Учитывая структуру каталогов:Как скомпилировать .pyx с использованием cythonize внутри setup.py
projectroot/
docs/
project/
__init__.py
core/
__init__.py
another.pyx
anotherone.pyx
lib/
__init__.py
something.pyx
tests/
mytest.py
setup.py
И setup.py
, содержащий следующее:
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'])
])
)
Он компилирует правильно. Единственная проблема заключается в том, что когда я открываю интерпретатор python из root directory
, он вызывает ImportError
.
(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
Но когда я открываю интерпретатор внутри любого другого каталога, он работает.
(test) [[email protected] projectroot/project]# python
>>> from project.core.lib.another import AnotherClass
# no error
Как исправить это?
Вы буквально «импортировали другую.pyx» или вы «импортировали другую»? –
@NilsWerner 'import project.core.another' – Mico
Созданы ли файлы .so' вообще? Кроме того, я бы рекомендовал отдельные элементы 'Extension ('project.core.lib.something', ['project/core/lib/something.pyx'])' вместо звездочек. –