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

2017-06-22 12:32:39 +08:00
 lyricorpse

我写了一个包,用

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 友这种情况该如何解决?谢谢!

5849 次点击
所在节点    Python
4 条回复
lyricorpse
2017-06-22 12:44:17 +08:00
我后来在`setup.py`中的`setup()`中加入了一条`zip_safe=False`来生成 folder 而不是 egg,解决了问题,但不知道有没有更优雅的解决方案?
BiggerLonger
2017-06-22 14:40:15 +08:00
import sys
import os
sys.path.append(os.path.abspath('xxx.egg')) ?
jigloo
2017-06-22 14:48:18 +08:00
用 zipimport 引用这 so
lyricorpse
2017-06-23 00:57:28 +08:00
@BiggerLonger @jigloo 谢谢两位!不过如果通过 pip 安装,是默认生成 folder 的,并且 path 会有所变化,所以似乎 path.append 和 zipimport 都不能同时适用两种安装方式?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/370279

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX