独自のビルド メカニズムを使用してICUをコンパイルする必要があります。したがって、質問:
から Makefile を実行するにはどうすればよいsetup.py
ですか? 明らかに、インストール中ではなく、ビルドプロセス中にのみ実行したい.
私が通常使用する方法は、問題のコマンドをオーバーライドすることです。
from distutils.command.install import install as DistutilsInstall
class MyInstall(DistutilsInstall):
def run(self):
do_pre_install_stuff()
DistutilsInstall.run(self)
do_post_install_stuff()
...
setup(..., cmdclass={'install': MyInstall}, ...)
distutils
ドキュメントとソースからこれを理解するのにかなりの時間がかかりました。
注: このcmdclass
パラメーターを使用して、新しいコマンドを追加することもできます。
Python 拡張機能を構築している場合は、distutils/setuptools 拡張機能を使用できます。例えば:
from setuptools import Extension
# or:
# from distutils.extension import Extension
setup(...
ext_modules = [Extension("pkg.icu",
["icu-sqlite/icu.c"]),
]
)
拡張機能を構築するための多くのオプションがあります。ドキュメントを参照してください: http://docs.python.org/distutils/setupscript.html
distutils を使用して C ライブラリをビルドすることは可能ですが (distutils.core.setup の libraries パラメータを参照)、既に Makefile にあるオプションを複製する必要がある場合があるため、おそらく最も簡単な方法は、インストール コマンドを次のように拡張することです。他の回答で説明し、subprocess モジュールで make を呼び出します。