Skip to content

Commit

Permalink
Replace pkg_resources with importlib
Browse files Browse the repository at this point in the history
No more dependency on setuptools!
  • Loading branch information
JCGoran committed Feb 19, 2024
1 parent 8d67f69 commit 4873e76
Show file tree
Hide file tree
Showing 2 changed files with 24 additions and 19 deletions.
40 changes: 22 additions & 18 deletions nmodl/_binwrapper.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,41 +3,45 @@
A generic wrapper to access nmodl binaries from a python installation
Please create a softlink with the binary name to be called.
"""

import os
import sys
import stat
from pkg_resources import working_set
import sys

if sys.version_info >= (3, 9):
from importlib.metadata import metadata
from importlib.resources import files
else:
from importlib_metadata import metadata
from importlib_resources import files

from find_libpython import find_libpython


def main():
"""Sets the environment to run the real executable (returned)"""

package_name = "nmodl"

if package_name not in working_set.by_key:
print ("INFO : Using nmodl-nightly Package (Developer Version)")
package_name = 'nmodl-nightly'

assert (
package_name in working_set.by_key
), "NMODL package not found! Verify PYTHONPATH"
try:
metadata("nmodl-nightly")
print("INFO : Using nmodl-nightly Package (Developer Version)")
except Exception:
pass

NMODL_PREFIX = os.path.join(working_set.by_key[package_name].location, "nmodl")
NMODL_HOME = os.path.join(NMODL_PREFIX, ".data")
NMODL_BIN = os.path.join(NMODL_HOME, "bin")
NMODL_PREFIX = files("nmodl")
NMODL_HOME = NMODL_PREFIX / ".data"
NMODL_BIN = NMODL_HOME / "bin"

# add libpython*.so path to environment
os.environ["NMODL_PYLIB"] = find_libpython()

# add nmodl home to environment (i.e. necessary for nrnunits.lib)
os.environ["NMODLHOME"] = NMODL_HOME
os.environ["NMODLHOME"] = str(NMODL_HOME)

# set PYTHONPATH for embedded python to properly find the nmodl module
os.environ["PYTHONPATH"] = working_set.by_key[package_name].location + ':' + os.environ.get("PYTHONPATH", "")
os.environ["PYTHONPATH"] = (
str(NMODL_PREFIX) + ":" + os.environ.get("PYTHONPATH", "")
)

exe = os.path.join(NMODL_BIN, os.path.basename(sys.argv[0]))
exe = NMODL_BIN / os.path.basename(sys.argv[0])
st = os.stat(exe)
os.chmod(exe, st.st_mode | stat.S_IEXEC)
os.execv(exe, sys.argv)
3 changes: 2 additions & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ dynamic = ["version"]
dependencies = [
"find_libpython",
"sympy>=1.3",
"setuptools",
"importlib-metadata;python_version<'3.9'",
"importlib-resources;python_version<'3.9'",
]
scripts = {nmodl = "nmodl._binwrapper:main"}
requires-python = ">=3.8"
Expand Down

0 comments on commit 4873e76

Please sign in to comment.