【问题标题】:Package can't import cython library in the egg包无法在egg中导入cython库
【发布时间】:2017-09-15 00:28:06
【问题描述】:

我可以从它的文件夹中使用我的包,但是一旦我将它安装为一个 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 代码将被编译并按照配置文件的指示在 mypkg 文件夹中创建 fastcode.pyd(或 Linux 中的 fastcode.so)。

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

我尝试添加

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

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

【问题讨论】:

    标签: python cython setuptools egg


    【解决方案1】:

    我找到了解决方法:必须删除 setup.cfg。对于那些感兴趣的人来说,问题在于使用新设置,.egg 文件还包含生成的fastcode.py 文件和fastcode.pyc 文件,而不仅仅是fastcode.pyd 文件(我希望通过查看@987654326 @ 在使用之前的设置进行编译之后,其中仅存在 .pyd 文件)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-02-21
      • 2014-03-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多