我写了一个包,用
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 友这种情况该如何解决?谢谢!
1
lyricorpse OP 我后来在`setup.py`中的`setup()`中加入了一条`zip_safe=False`来生成 folder 而不是 egg,解决了问题,但不知道有没有更优雅的解决方案?
|
2
BiggerLonger 2017-06-22 14:40:15 +08:00 1
import sys
import os sys.path.append(os.path.abspath('xxx.egg')) ? |
3
ldbC5uTBj11yaeh5 2017-06-22 14:48:18 +08:00 via Android 1
用 zipimport 引用这 so
|
4
lyricorpse OP @BiggerLonger @jigloo 谢谢两位!不过如果通过 pip 安装,是默认生成 folder 的,并且 path 会有所变化,所以似乎 path.append 和 zipimport 都不能同时适用两种安装方式?
|