安装 Python 库后自动创建奇怪的文件
Strange file being created automatically after installing a Python library
我有一个依赖于 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
以及如何避免它。
现在很清楚,正在创建的 strange 文件与 .so
文件同名,没有造成任何问题。事实上,这是与 .so
模块更紧密集成所必需的。所以,它是在安装文件时自动创建的。
我有一个依赖于 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
以及如何避免它。
现在很清楚,正在创建的 strange 文件与 .so
文件同名,没有造成任何问题。事实上,这是与 .so
模块更紧密集成所必需的。所以,它是在安装文件时自动创建的。