Pythonモジュールをプリコンパイルされた.so
ライブラリと一緒にパッケージ化するにはどうすればよいですか?具体的には、Pythonでこれを行うときにsetup.py
をどのように記述すればよいですか?
>>> import top_secret_wrapper
top_secret.so
を設定しなくても、LD_LIBRARY_PATH
を簡単に見つけることができますか?
私のモジュール開発環境では、次のファイル構造があります。
.
├── top_secret_wrapper
│ ├── top_secret.so
│ └── __init__.py
└── setup.py
__init__.py
の中に、次のようなものがあります。
import top_secret
これが私のsetup.py
です
from setuptools import setup, Extension
setup(
name = 'top_secret_wrapper',
version = '0.1',
description = 'A Python wrapper for a top secret algorithm',
url = None,
author = 'James Bond',
author_email = '[email protected]',
license = 'Spy Game License',
Zip_safe = True,
)
setup.py
の場所を指定する設定が、top_secret.so
にないことは確かですが、その方法はわかりません。
私がやったことは:
setup(
name='py_my_lib',
version=version, # specified elsewhere
packages=[''],
package_dir={'': '.'},
package_data={'': ['py_my_lib.so']},
)
このようにして、libをその名前でインポートすることができ、別のレベルのネストはありません。
import py_my_lib
ではなく
from py_my_lib_wrapper import py_my_lib
そのライブラリもインストール中にコンパイルする必要がある場合は、これを 拡張モジュール として記述できます。出荷するだけの場合は、 package_data として追加します。
setupscript.html#installing-package-data で述べられているように:
setup(
...
package_data={'top_secret_wrapper': ['top_secret.so']},
)