Note:下面的解决方案仅在安装源分发 zip 或 tarball 或从源树以可编辑模式安装时有效。它会not从二进制轮安装时有效(.whl
)
这个解决方案更加透明:
您将做一些补充setup.py
并且不需要额外的文件。
您还需要考虑两种不同的安装后;一种用于开发/可编辑模式,另一种用于安装模式。
添加这两个类,其中包括你的安装后脚本到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,
},
...
)
您甚至可以在安装过程中调用 shell 命令,如本示例中执行安装前准备:
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(
...
附: setuptools 上没有任何可用的预安装入口点。读这次讨论 https://web.archive.org/web/20161202071142/https://bugs.python.org/setuptools/issue41如果您想知道为什么没有。