我有一个依赖于 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
之后,我发现在 module
中创建了一个 _lib.py
,其中包含以下行
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
导入 _lib
>,它导入 _lib.py 文件而不是导入 _lib.so
,后者是 C 库的实际 Python 包装器。
我想知道为什么要创建 _lib.py
以及如何避免它。
最佳答案
现在很清楚,奇怪 文件正在创建,其名称与 .so
文件相同,不会造成任何问题。事实上,这是与 .so
模块更紧密集成所必需的。因此,它是在安装文件时自动创建的。
关于python - 安装 Python 库后自动创建奇怪的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31076235/