web-dev-qa-db-ja.com

コンパイルされた動的共有ライブラリを使用してPythonパッケージを配布する

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にないことは確かですが、その方法はわかりません。

16
Kit

私がやったことは:

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
4
Ibolit

そのライブラリもインストール中にコンパイルする必要がある場合は、これを 拡張モジュール として記述できます。出荷するだけの場合は、 package_data として追加します。

2
renefritze

setupscript.html#installing-package-data で述べられているように:

setup(
    ...
    package_data={'top_secret_wrapper': ['top_secret.so']},
)
1
Yan QiDong