2

C ライブラリに依存する Python ライブラリがあるので、Cython を使用して対処しています。ライブラリをラップすることができ、インストールの準備が整いましたが、奇妙な問題に直面しています (注: 広告を避けるために、ライブラリの名前は使用していません)。

次のディレクトリ構造があります。

package/
       setup.py
       library/
              __init__.py
              module/
                    lib.py
                    _lib.pyx

はPython で簡単にインポートできる にsetup.py変換_lib.pyxされるはずです。_lib.soまた、library.module名前空間パッケージとしてインストールされることになっているためlib.__init__.py、PEP420 で必要な 1 行のコードが含まれています。

__import__('pkg_resources').declare_namespace(__name__)

しかし、私がするとき:

python setup.py install

作成されたものを確認した後、次の行が含まれる作成された内部が.egg見つかりました_lib.pymodule

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とすぐに、C ライブラリの実際の Python ラッパーであるインポートではなく、_lib.py ファイルをインポートします。lib.py_lib_lib.so

_lib.pyが作成される理由と、それを回避する方法を知りたいです。

4

1 に答える 1