python - 安装 Python 库后自动创建奇怪的文件

标签 python namespaces package cython namespace-package

我有一个依赖于 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/

相关文章:

python - 有限生成器的长度

python - 在嵌套列表python中连接项目

web-services - BizTalk 与 WCF 服务 - 服务中的空对象

perl - 如何使用perl中的函数引用执行包中的函数?

python - Visual Studio Code 快速修复和 python

ruby-on-rails-4 - 具有命名空间的专家策略

wpf - 名称 "YesNo"在命名空间 "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter"中不存在

java - 重命名jar包名称

java - 使用 Java 包的示例

python - 如何正确导入鼠尾草?