5

いくつかのコンテキスト:コンパイル時に次のようにターミナルで呼び出すことができるCコードがいくつかあります。./my_excec -paramsこれは、チャートやその他のものを生成するためにPythonで使用しているいくつかのファイルを生成します。

CコードとPythonコードの両方をPythonライブラリにすべて詰め込みたいです。C コードは Python 拡張機能ではありません (将来的にはそうなりますが、現在はそうではありません)。

Cコードをコンパイルするためのmakeファイルがあり、次のようにsetup.pyから呼び出すことができることを知っています: subprocess.call(['make', '-C', 'word2vec-src'])

私ができるようにしたいpip install my_moduleのは、makefile を呼び出し、C をコンパイルして、ユーザーがバイナリを呼び出せるようにする必要がありますmy_excec -params。また、Python コードをその周りにインポートできるようにすることです。

私が抱えている問題は、python パッケージをパッケージ化するときです。data_filesこのオプションを次のsetup()ように使用しています。data_files=[('bin', ['bin/binary_file'])],これにより、ファイルが bin からインストール フォルダー (仮想環境内) に移動され、それらを呼び出すことができます。しかし、パッケージ化によってコンパイル済みファイルも tarball に配置され、pip install my_module を呼び出すと、コンピューターからコンパイル済みファイルが配置されます。

ありがとう。

4

1 に答える 1

5

本当に簡単な解決策を見つけることができました。

私が言ったように、私の主な問題は、コンパイルされたファイルをパッケージ化していたことです。これらのファイルを tarball/zip から除外するには、これを MANIFEST.in: に配置する必要がありましたprune bin

次に、setup.py から makefile を呼び出すだけです。

directory = 'bin'
if not os.path.exists(directory):
    os.makedirs(directory)

subprocess.call(['make', '-C', 'src'])

これにより、誰かがpip install whatevermake ファイルを呼び出してバイナリを配置することbinになります (make ファイルでこれを指定する必要があります)。

次に、これらのファイルをコピーするためのセットアップを言う必要があります。

setup(
...
data_files=[('bin', ['bin/binaries'])],
)

終わり!うまくいけば、誰かがこれが役に立つと思います:)

于 2013-08-26T21:33:55.843 に答える