请教Python 从 egg 中 import so 文件的正确姿势

2025-05-01 02:42:02
推荐回答(1个)
回答1:

我写了一个包,用

python setup.py install

安装后会在site-package目录下得到一个.egg 的文件,然后可以在 python 中 import 这个包。 问题是,我在setup.py文件中包含了 package_data,是一个名为xxx.so的动态库文件,这个库文件在 install 之后也被正确包含进那个.egg 文件里了(把.egg 重命名成.zip 解压后可以确认)。 但是,如果只用这个.egg 文件,那么包里的一行代码

from . import xxx

就会报错

ImportError: cannot import name 'xxx'

奇怪的是,如果我重命名.zip 然后解压成文件夹,from . import xxx 就能正常加载那个动态库了。

请问熟悉 Python 的 V 友这种情况该如何解决?谢谢!

我后来在`setup.py`中的`setup()`中加入了一条`zip_safe=False`来生成 folder 而不是 egg,解决了问题,但不知道有没有更优雅的解决方案?