dai*_*yue 5 cython python-import python-3.x
我在与其他 python 包分开的包中创建并构建了一个Cython文件,该项目具有以下目录结构,
pack1
pack1.1
cython_file.pyx
setup.py
pack2
main_python.py
Run Code Online (Sandbox Code Playgroud)
除了该pyx文件之外,还有一个名为的包build以及pyd在构建该文件后生成的文件Cython。
看起来setup.py像
from distutils.core import setup
from Cython.Build import cythonize
setup(
ext_modules=cythonize("cython_file.pyx")
)
Run Code Online (Sandbox Code Playgroud)
我导入cython_file,main.py就像
from pack1.pack1.1.cython_file import cython_func
Run Code Online (Sandbox Code Playgroud)
但出现错误:
ImportError: No module named 'pack1.pack1.1.cython_file'
Run Code Online (Sandbox Code Playgroud)
如何解决问题?
最初,您不应该命名文件夹pack1.1。使用.here将使python搜索具有该名称的包1(语句中用点分隔包import);由于 Python 语法不允许名称以数字开头,因此您会收到语法错误。选择一个像pack1_1.
现在,尝试import从同级目录进行操作相对比较棘手,因此不建议这样做;您最好的选择是将其移动main_python.py到顶级目录中,如果它是主脚本,它应该存放在那里。你的结构应该是这样的:
pack1
pack1_1
cython_file.pyx
setup.py
main_python.py
Run Code Online (Sandbox Code Playgroud)
现在执行main_python.py:
from pack1.pack1_1.cython_file import cython_func
cython_func()
Run Code Online (Sandbox Code Playgroud)
与cython_file.pyx:
cpdef cython_func():
print("Cython Function Called")
Run Code Online (Sandbox Code Playgroud)
得到想要的结果。
如果您确实需要具有该目录结构,则需要通过将顶级目录添加到来部署一些技巧sys.path:
import sys, os
sys.path.insert(0, os.path.abspath(".."))
from pack1.pack1_1.cython_file import cython_func
cython_func()
Run Code Online (Sandbox Code Playgroud)
但这很丑陋,你不会发现有人建议它。
| 归档时间: |
|
| 查看次数: |
11360 次 |
| 最近记录: |