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

时间:2015-06-26 14:51:40

标签: python namespaces package cython

我有一个依赖于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.py内创建了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.py导入_lib,它就会导入_lib.py文件而不是导入_lib.so是C库的实际Python包装器。

我想知道为什么要创建_lib.py以及如何避免它。

1 个答案:

答案 0 :(得分:0)

现在很清楚,使用与.so文件同名创建的 strange 文件不会产生任何问题。事实上,与.so模块更紧密地集成是必要的。因此,它会在安装文件时自动创建。