ModuleNotFoundError mit setup.py unter Verwendung eines kompilierten Pyc-Moduls
Posted: 29 Dec 2024, 06:42
Normalerweise kann ich ein kompiliertes .pyc-Modul sowie .py importieren, aber wenn ich versuche, ein einfaches Projekt mit setup.py zu packen, erhalte ich den ModuleNotFoundError< /code>-Ausnahme für das kompilierte .pyc-Modul. Da dies nur passiert, wenn setup.py verwendet wird, andernfalls funktioniert es einwandfrei. Ich weiß nicht, ob ich irgendetwas tun müsste, damit setup.py funktioniert.
Die Projektstruktur sieht derzeit etwa so aus:
und die setup.py:
Die main.py:
Wenn ich nur versuche, FAILING.pyc in die Replik zu importieren, funktioniert alles wie erwartet:
Aber wenn ich zuerst python3 setup.py install ausführe und dann proj aufrufe, erhalte ich die folgende Fehlermeldung:
Ich führe dies auch in einer Virtualenv-Umgebung aus, obwohl ich vermute, dass dies nicht mit dem Fehler zusammenhängt.
Was mache ich? falsch, oder was müsste ich ändern, damit das funktioniert?
Die Projektstruktur sieht derzeit etwa so aus:
Code: Select all
proj
├── FAILING.pyc
├── __init__.py
├── aux/
│ ├── __init__.py
│ └── aux.c
└── main.py
Code: Select all
from setuptools import setup, Extension, find_packages
DISTNAME = 'proj'
INSTALL_REQUIRES = [
'cython>=0.29.13',
'numpy>=1.16.4'
]
PYTHON_REQUIRES = '>=3.6'
ENTRY_POINTS = {
'console_scripts': ['proj = proj.main:main']
}
def setup_extensions(metadata):
ext_modules = [Extension('proj.aux.aux', sources=['proj/aux/aux.c'])]
metadata['ext_modules'] = ext_modules
def setup_package():
metadata = dict(
name=DISTNAME,
version='0.1',
package_dir={'': '.'},
packages=find_packages(),
entry_points=ENTRY_POINTS,
python_requires=PYTHON_REQUIRES,
install_requires=INSTALL_REQUIRES,
zip_safe=False,
)
setup_extensions(metadata)
setup(**metadata)
if __name__ == '__main__':
setup_package()
Code: Select all
#!/usr/bin/env python3
import proj.aux.aux as aux
import proj.FAILING
def main():
print('Hello World')
Code: Select all
>>> import FAILING
>>>
Code: Select all
$ proj
Traceback (most recent call last):
File "/path/to/bin/proj", line 11, in
load_entry_point('proj==0.1', 'console_scripts', 'proj')()
File "/path/to/lib/python3.8/site-packages/pkg_resources/__init__.py", line 489, in load_entry_point
return get_distribution(dist).load_entry_point(group, name)
File "/path/to/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2852, in load_entry_point
return ep.load()
File "/path/to/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2443, in load
return self.resolve()
File "/path/to/lib/python3.8/site-packages/pkg_resources/__init__.py", line 2449, in resolve
module = __import__(self.module_name, fromlist=['__name__'], level=0)
File "/path/to/lib/python3.8/site-packages/proj-0.1-py3.8-macosx-10.14-x86_64.egg/proj/main.py", line 4, in
import proj.FAILING
ModuleNotFoundError: No module named 'proj.FAILING'
Was mache ich? falsch, oder was müsste ich ändern, damit das funktioniert?