首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Cython ImportError

Cython ImportError
EN

Stack Overflow用户
提问于 2014-11-29 22:32:06
回答 1查看 1.8K关注 0票数 2

以下文件为helloworld.pyx:

代码语言:javascript
复制
print("Hello World")

以下文件为setup.py:

代码语言:javascript
复制
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,我得到了以下错误:

代码语言:javascript
复制
ImportError: dynamic module does not define init function (PyInit_hw)

我三个小时前就在做这件事了,一切都很好。但我从这边试了一件事:http://sourceforge.net/p/ubertooth/mailman/message/31699880/

我尝试了以下几点:

代码语言:javascript
复制
cmake -DPYTHON_EXECUTABLE=$(which python2) \
-DPYTHON_INCLUDE_DIR=$(echo /usr/include/python2*) \
-DPYTHON_LIBRARY=$(echo /usr/lib/libpython2.*.so) \

因为我想修点东西。我用"3“替换了所有的"2”,因为我在用python3.4

在我做了这个之后,我总是得到上面的错误。我有没有破坏任何一条路?我怎么才能解开它?谢谢你的帮助

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-12-01 22:12:09

当查看Python3关于“用C或C++扩展Python”的文档时,我们看到

初始化函数必须命名为PyInit_name(),其中名称是模块的名称,并且应该是模块文件中定义的唯一非静态项。

(https://docs.python.org/3/extending/extending.html#the-module-s-method-table-and-initialization-function)

这意味着我们不能只更改模块的文件名而不更改init函数。首先,我们必须编译带有最终名称的模块。编译后重命名.so文件将无法工作。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/27207874

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档