【发布时间】:2017-07-12 06:27:53
【问题描述】:
我的包结构如下:
+ repo/
+ setup.py
+ package/
+ module1/
+ submodule1.py
+ submodule2.pyx
+ module2/
+ submodule3.py
我想通过以下方式使用 submodule1.py 中的 submodule2.pyx:
import submodule2
但我完全不知道该怎么做。我尝试在 setup.py 中添加以下行:
from distutils.core import setup
from setuptools import setup
from Cython.Distutils import build_ext
ext_modules = cythonize(Extension(
"zindex",
sources=["ndmg/graph/zindex.pyx"],
language="c",
))
for e in ext_modules:
e.pyrex_directives = {"boundscheck": False}
setup(
name='ndmg',
ext_modules = ext_modules,
packages=[
'package',
'package.module1',
....
)
但没有成功。我能找到的所有教程都有非常简单的示例,所以当包的其余部分只是普通的 python 代码时,我不确定如何在我的 python 包中包含 Cython 模块。有没有人有我可以效仿的好例子,或者有人可以告诉我我做错了什么吗?
提前致谢!
【问题讨论】:
-
请在运行
python setup.py build_ext --inplace时提供有关操作系统、编译器、错误(如果有)/输出的信息。假设是 linux,检查你的目录树中是否有 submodule2.so。 -
更准确地说:编译后的模块名称以 i.e. 结尾:*.cpython-36m-x86_64-linux-gnu.so
-
你在 submodule1.py 中尝试过
from . import submodule2吗? -
@Rich 尝试首先使用
python setup.py build_ext --inplace编译 PYX,这应该会生成一个 PYD 文件。然后你应该可以从你的第一个 .py 脚本中像from submodule2 import {functionname}一样导入它。然后它应该导入模块并可用。