以下文件为helloworld.pyx:
print("Hello World")以下文件为setup.py:
from distutils.core import setup
from distutils.extension import Extension
from Cython.Distutils import build_ext
ext_modules = [Extension("helloworld",["helloworld.pyx"]
setup(
name = 'HW',
cmdclass = {'build_ext': build_ext},
ext_modules = ext_modules
)使用python setup.py build_ext --inplace后,我得到了我的*.so文件
因此,我将*.so重命名为hw.so,以获得较短的导入名。
但是,如果我搜索python并输入:import hw,我得到了以下错误:
ImportError: dynamic module does not define init function (PyInit_hw)我三个小时前就在做这件事了,一切都很好。但我从这边试了一件事:http://sourceforge.net/p/ubertooth/mailman/message/31699880/
我尝试了以下几点:
cmake -DPYTHON_EXECUTABLE=$(which python2) \
-DPYTHON_INCLUDE_DIR=$(echo /usr/include/python2*) \
-DPYTHON_LIBRARY=$(echo /usr/lib/libpython2.*.so) \因为我想修点东西。我用"3“替换了所有的"2”,因为我在用python3.4
在我做了这个之后,我总是得到上面的错误。我有没有破坏任何一条路?我怎么才能解开它?谢谢你的帮助
发布于 2014-12-01 22:12:09
当查看Python3关于“用C或C++扩展Python”的文档时,我们看到
初始化函数必须命名为PyInit_name(),其中名称是模块的名称,并且应该是模块文件中定义的唯一非静态项。
这意味着我们不能只更改模块的文件名而不更改init函数。首先,我们必须编译带有最终名称的模块。编译后重命名.so文件将无法工作。
https://stackoverflow.com/questions/27207874
复制相似问题