安装 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 模块更紧密集成所必需的。所以,它是在安装文件时自动创建的。