我有一个依赖于 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.pycreated 里面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.pyimports _lib,它就会导入 _lib.py 文件,而不是导入_lib.soC 库的实际 Python 包装器。
我想知道为什么_lib.py要创建以及如何避免它。