Nota: A solução abaixo só funciona ao instalar um zip ou tarball de distribuição de código-fonte, ou instalar em modo editável a partir de uma árvore de código-fonte. Ele vai não funciona quando instalando a partir de uma roda de binário ( .whl
)
Esta solução é mais transparente:
Você fará alguns acréscimos setup.py
e não há necessidade de um arquivo extra.
Além disso, você precisa considerar duas pós-instalações diferentes; um para o modo de desenvolvimento / editável e o outro para o modo de instalação.
Adicione essas duas classes que incluem seu script pós-instalação para 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
e insira o cmdclass
argumento para setup()
funcionar em setup.py
:
setup(
...
cmdclass={
'develop': PostDevelopCommand,
'install': PostInstallCommand,
},
...
)
Você pode até chamar comandos shell durante a instalação, como neste exemplo, que faz a preparação de pré-instalação:
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, não há nenhum ponto de entrada de pré-instalação disponível nas ferramentas de configuração. Leia esta discussão se você está se perguntando por que não há nenhum.