Uwaga: Poniższe rozwiązanie działa tylko podczas instalowania archiwum źródłowego ZIP lub TARBULL albo instalowania w trybie edytowalnym z drzewa źródłowego. To będzie nie działa podczas instalacji z kołem binarnym ( .whl
)
To rozwiązanie jest bardziej przejrzyste:
Dodasz kilka dodatków setup.py
i nie potrzebujesz dodatkowego pliku.
Musisz także wziąć pod uwagę dwie różne czynności po instalacji; jeden dla trybu deweloperskiego / edytowalnego, a drugi dla trybu instalacji.
Dodaj te dwie klasy, które zawierają twój skrypt poinstalacyjny, do 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)
class PostInstallCommand(install):
"""Post-installation for installation mode."""
def run(self):
install.run(self)
i wstaw cmdclass
argument do setup()
funkcji w setup.py
:
setup(
...
cmdclass={
'develop': PostDevelopCommand,
'install': PostInstallCommand,
},
...
)
Możesz nawet wywołać polecenia powłoki podczas instalacji, jak w tym przykładzie, który wykonuje przygotowanie przed instalacją:
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 w setuptools nie ma żadnych punktów wejścia do instalacji wstępnej. Przeczytaj tę dyskusję, jeśli zastanawiasz się, dlaczego nie ma.