我在与其他python包分离的包中创建并构建了一个Cython
文件,该项目具有以下目录结构,
pack1
pack1.1
cython_file.pyx
setup.py
pack2
main_python.py
除了pyx
文件外,还有一个名为build
的程序包,并在构建pyd
文件后生成了Cython
文件。
setup.py
看起来像,
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("cython_file.pyx")
)
我在cython_file
中导入main.py
,例如
from pack1.pack1.1.cython_file import cython_func
但收到了错误:
ImportError: No module named 'pack1.pack1.1.cython_file'
如何解决问题?
答案 0 :(得分:1)
最初,您不应将文件夹命名为pack1.1
。在这里使用.
将使python搜索名为1
的包(import
语句中的点分隔包);由于Python语法不允许名称以数字开头,因此会出现语法错误。选择pack1_1
等名称。
现在,从兄弟目录尝试import
相对棘手而且没有建议;您最好的选择是将main_python.py
移到顶级目录中,如果它是主脚本,它应该存在那里。您的结构应如下所示:
pack1
pack1_1
cython_file.pyx
setup.py
main_python.py
现在执行main_python.py
:
from pack1.pack1_1.cython_file import cython_func
cython_func()
使用cython_file.pyx
:
cpdef cython_func():
print("Cython Function Called")
会产生预期的结果。
如果您确实需要具有该目录结构,则需要通过将顶级目录添加到sys.path
来部署一些小技巧:
import sys, os
sys.path.insert(0, os.path.abspath(".."))
from pack1.pack1_1.cython_file import cython_func
cython_func()
但这很丑陋,你找不到人们的建议。