注:以下のソリューションは、ソース配布のzipまたはtarballをインストールする場合、またはソースツリーから編集可能なモードでインストールする場合にのみ機能します。バイナリホイールからインストールする場合は機能しません(.whl
)
このソリューションはより透過的です。
にいくつか追加します setup.py
行い、追加のファイルは必要ありません。
また、2つの異なるポストインストールを検討する必要があります。1つは開発/編集可能モード用で、もう1つはインストールモード用です。
インストール後のスクリプトを含むこれらの2つのクラスをに追加しますsetup.py
。
from setuptools import setup
from setuptools.command.develop import develop
from setuptools.command.install import install
class PostDevelopCommand(develop):
"""Post-installation for development mode."""
def run(self):
develop.run(self)
# PUT YOUR POST-INSTALL SCRIPT HERE or CALL A FUNCTION
class PostInstallCommand(install):
"""Post-installation for installation mode."""
def run(self):
install.run(self)
# PUT YOUR POST-INSTALL SCRIPT HERE or CALL A FUNCTION
関数にcmdclass
引数を挿入します:setup()
setup.py
setup(
...
cmdclass={
'develop': PostDevelopCommand,
'install': PostInstallCommand,
},
...
)
インストール前の準備を行う次の例のように、インストール中にシェルコマンドを呼び出すこともできます。
from setuptools import setup
from setuptools.command.develop import develop
from setuptools.command.install import install
from subprocess import check_call
class PreDevelopCommand(develop):
"""Pre-installation for development mode."""
def run(self):
check_call("apt-get install this-package".split())
develop.run(self)
class PreInstallCommand(install):
"""Pre-installation for installation mode."""
def run(self):
check_call("apt-get install this-package".split())
install.run(self)
setup(
...
PS setuptoolsで利用可能なインストール前のエントリポイントはありません。なぜ何もないのか疑問に思っているなら、この議論を読んでください。