by Anonymous » 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:
Code: Select all
proj
├── FAILING.pyc
├── __init__.py
├── aux/
│ ├── __init__.py
│ └── aux.c
└── main.py
und die setup.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()
Die main.py:
Code: Select all
#!/usr/bin/env python3
import proj.aux.aux as aux
import proj.FAILING
def main():
print('Hello World')
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:
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'
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?
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:
[code]proj
├── FAILING.pyc
├── __init__.py
├── aux/
│ ├── __init__.py
│ └── aux.c
└── main.py
[/code]
und die setup.py:
[code]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]
Die main.py:
[code]#!/usr/bin/env python3
import proj.aux.aux as aux
import proj.FAILING
def main():
print('Hello World')
[/code]
Wenn ich nur versuche, FAILING.pyc in die Replik zu importieren, funktioniert alles wie erwartet:
[code]>>> import FAILING
>>>
[/code]
Aber wenn ich zuerst python3 setup.py install ausführe und dann proj aufrufe, erhalte ich die folgende Fehlermeldung:
[code]$ 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'
[/code]
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?