eine Verzeichnisstruktur Gegeben:So übersetzen .pyx mit cythonize innerhalb setup.py
projectroot/
docs/
project/
__init__.py
core/
__init__.py
another.pyx
anotherone.pyx
lib/
__init__.py
something.pyx
tests/
mytest.py
setup.py
Und setup.py
folgendes enthält:
from Cython.Build import cythonize
try:
from setuptools import Extension, setup, find_packages
except ImportError:
from distutils.core import Extension, setup, find_packages
if __name__ == '__main__':
setup(
name='myproject',
version='1.0.0',
packages=find_packages(),
ext_modules=cythonize([
Extension('*', ['project/core/lib/*.pyx']),
Extension('*', ['project/core/*.pyx'])
])
)
Es kompiliert einwandfrei. Das einzige Problem ist, dass, wenn ich den Python-Interpreter von der root directory
öffne, es eine ImportError
wirft.
(test) [[email protected] projectroot]# python
>>> from project.core.lib.another import AnotherClass
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named another
Aber wenn ich den Interpreter in einem anderen Verzeichnis öffnen, funktioniert es.
(test) [[email protected] projectroot/project]# python
>>> from project.core.lib.another import AnotherClass
# no error
Wie kann ich das beheben?
hast du wörtlich "another.pyx" importiert oder "ein anderes importiert"? –
@NilsWerner 'import project.core.another' – Mico
Werden die' .so' Dateien überhaupt erzeugt? Außerdem würde ich einzelne 'Extension ('project.core.lib.something', ['project/core/lib/something.pyx'])' Einträge anstelle von Sternchen empfehlen. –