我可以在其文件夹中使用我的包,但是一旦我将其作为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文件中(通过浏览解压缩版本),但仍无法导入。
答案 0 :(得分:0)
我发现在我的情况下如何修复它:必须删除setup.cfg
。对于那些感兴趣的人来说,问题在于使用新设置,.egg
文件还包含生成的fastcode.py
文件和fastcode.pyc
文件,而不仅仅是fastcode.pyd
文件(其中我希望通过在编译之前查看mypkg
,之前只有.pyd
个文件存在。