从不同包的 Python 个文件中导入 Cython 模块
import Cython modules in Python files from different packages
我在与其他 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")
)
我在main.py
中导入cython_file
,喜欢
from pack1.pack1.1.cython_file import cython_func
但出现错误:
ImportError: No module named 'pack1.pack1.1.cython_file'
如何解决这个问题?
最初,您不应命名文件夹 pack1.1
。在此处使用 .
将使 python 搜索名称为 1
的包(在 import
语句中用点分隔包);由于 Python 语法不允许名称以数字开头,因此您会遇到语法错误。选择一个像 pack1_1
.
这样的名字
现在,尝试从同级目录 import
比较棘手,不建议;您最好的选择是将 main_python.py
移动到顶级目录中,如果它是 main 脚本,它应该存在于那里。您的结构应如下所示:
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()
但这很丑陋,你找不到人推荐它。
我在与其他 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")
)
我在main.py
中导入cython_file
,喜欢
from pack1.pack1.1.cython_file import cython_func
但出现错误:
ImportError: No module named 'pack1.pack1.1.cython_file'
如何解决这个问题?
最初,您不应命名文件夹 pack1.1
。在此处使用 .
将使 python 搜索名称为 1
的包(在 import
语句中用点分隔包);由于 Python 语法不允许名称以数字开头,因此您会遇到语法错误。选择一个像 pack1_1
.
现在,尝试从同级目录 import
比较棘手,不建议;您最好的选择是将 main_python.py
移动到顶级目录中,如果它是 main 脚本,它应该存在于那里。您的结构应如下所示:
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()
但这很丑陋,你找不到人推荐它。