我正在尝试将 cython 模块 data.pyx 导入另一个 cython 模块 user.pyx。 一切都编译得很好,但是当我尝试在 python 模块中调用 user.pyx 时,我收到错误“ImportError: No module named data”。
一切都在同一个目录中。
package/
__init__.py #empty
setup.py
data.pxd
data.pyx
user.pyx
我的 setup.py
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [
Extension("data", ["data.pyx"]),
Extension("user", ["user.pyx"],include_dirs = ['myPackageDir'])
]
setup(
name = 'app',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)
运行下面的 test.py 会报错。
import user #this line raised the 'ImportError: No module named data' below
user.doSomething()
我得到的异常(exception)是
Traceback:
File "test.py", line 1, in <module>
import package.user
File "user.pyx", line 1, in init user (user.c:3384)
ImportError: No module named data
我怎样才能使导入工作?感谢您的帮助。
最佳答案
我在另一个项目中再次遇到这个问题。为了解决它,这是我所做的:
- 所有
import
和cimport
语句必须是完全限定的 - 所有的python代码都必须包含在一个
rootFolder
setup.py
必须与rootFolder
处于同一级别rooFolder
中的所有文件夹,包括rootFolder
都必须包含__init__.py
- 在您的
setup.py
中,扩展的include_dirs
必须包含'.'
我创建了一个简单的项目来说明 here .
这个page帮助我创建了它。
但是我的项目比较简单,如果我拥有它,我想它会对我有很大帮助。
我的项目还说明了如何自动构建项目中的所有 cython 文件。
关于python - Cython:ImportError:没有名为 'myModule' 的模块:如何将包含 cimport 的 cython 模块调用到另一个 cython 结节?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9882447/