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.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
とすぐに、C ライブラリの実際の Python ラッパーであるインポートではなく、_lib.py ファイルをインポートします。lib.py
_lib
_lib.so
_lib.py
が作成される理由と、それを回避する方法を知りたいです。