包不能导入蛋中的cython库

时间:2017-04-19 00:54:31

标签: python cython setuptools egg

我可以在其文件夹中使用我的包,但是一旦我将其作为egg包安装,基于cython的模块就无法导入。

我有以下包结构

src/
├── mypkg/
│   ├── __init__.py
│   ├── myfile.py
├── cython/
│   ├── fastcode.pyx
setup.py

模块myfile.py导入import fastcode。在setup.py,我有

setup(
    name='mypkg',
    version='0.1',
    packages=find_packages(where="src"),
    package_dir={'':'src'},
    cmdclass={'build_ext': build_ext},
    ext_modules=df_ext_modules,
)

我也有setup.cfg

[build_ext]
build-lib=src/mypkg

如果我运行python setup.py install,cython代码将被编译,并按照配置文件的指示在fastcode.pyd文件夹中创建fastcode.so(或Linux中的mypkg

现在,如果我转到mypkg文件夹并运行python,我可以放心地import mypkg.myfile。 但是,当我从其他文件夹运行python时(使用已安装的.egg文件),我收到错误ImportError: No module named fastcode

我尝试添加

package_data={
    'mypkg': ['*.pyd', '*.so']
},

setup.py,这会将fastcode.pyd添加到egg文件中(通过浏览解压缩版本),但仍无法导入。

1 个答案:

答案 0 :(得分:0)

我发现在我的情况下如何修复它:必须删除setup.cfg。对于那些感兴趣的人来说,问题在于使用新设置,.egg文件还包含生成的fastcode.py文件和fastcode.pyc文件,而不仅仅是fastcode.pyd文件(其中我希望通过在编译之前查看mypkg,之前只有.pyd个文件存在。