我有一个依赖于 C 库的 Python 库,所以我使用 Cython 来处理它。虽然我设法包装了库并准备好安装,但我遇到了一个奇怪的问题(注意:为了非广告,我没有使用库的名称)。
我有以下目录结构:
package/
setup.py
library/
__init__.py
module/
lib.py
_lib.pyx
setup.py
应该转换_lib.pyx
为,_lib.so
可以很容易地被 Python 导入。此外,library.module
应该作为命名空间包安装,因此lib.__init__.py
包含 PEP420 所需的单行代码。
__import__('pkg_resources').declare_namespace(__name__)
但是当我这样做时:
python setup.py install
在检查.egg
创建后,我发现一个_lib.py
created 里面module
有以下几行
def __bootstrap__():
global __bootstrap__, __loader__, __file__
import sys, pkg_resources, imp
__file__ = pkg_resources.resource_filename(__name__,'_lib.so')
__loader__ = None; del __bootstrap__, __loader__
imp.load_dynamic(__name__,__file__)
__bootstrap__()
虽然_lib.py
与 一起存在,但_lib.so
只要lib.py
imports _lib
,它就会导入 _lib.py 文件,而不是导入_lib.so
C 库的实际 Python 包装器。
我想知道为什么_lib.py
要创建以及如何避免它。