Hinweis: Die folgende Lösung funktioniert nur, wenn Sie eine Quellverteilungs-Zip oder einen Tarball installieren oder im bearbeitbaren Modus über einen Quellbaum installieren. Es funktioniert nicht bei der Installation von einem binären Rad ( .whl
)
Diese Lösung ist transparenter:
Sie werden einige Ergänzungen vornehmen setup.py
und es ist keine zusätzliche Datei erforderlich.
Außerdem müssen Sie zwei verschiedene Nachinstallationen berücksichtigen. eine für den Entwicklungs- / Bearbeitungsmodus und die andere für den Installationsmodus.
Fügen Sie diese beiden Klassen hinzu, die Ihr Skript nach der Installation enthaltensetup.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
und fügen Sie ein cmdclass
Argument ein, um setup()
in zu funktionieren setup.py
:
setup(
...
cmdclass={
'develop': PostDevelopCommand,
'install': PostInstallCommand,
},
...
)
Sie können sogar Shell-Befehle während der Installation aufrufen, wie in diesem Beispiel, in dem die Vorbereitung vor der Installation durchgeführt wird:
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: Auf setuptools sind keine Einstiegspunkte vor der Installation verfügbar. Lesen Sie diese Diskussion, wenn Sie sich fragen, warum es keine gibt.