使用 Python setuptools 的安装后脚本

2024-02-25

是否可以将安装后 Python 脚本文件指定为 setuptools setup.py 文件的一部分,以便用户可以运行以下命令:

python setup.py install

在本地项目文件存档上,或者

pip install <name>

对于 PyPI 项目,脚本将在标准 setuptools 安装完成时运行?我希望执行可以在单个 Python 脚本文件中编码的安装后任务(例如,向用户传递自定义安装后消息,从不同的远程源存储库中提取其他数据文件)。

我碰到这个答案来自几年前 https://stackoverflow.com/questions/250038/how-can-i-add-post-install-scripts-to-easy-install-setuptools-distutils解决了这个主题,听起来当时的共识是您需要创建一个 install 子命令。如果情况仍然如此,是否有人可以提供如何执行此操作的示例,以便用户无需输入第二个命令来运行脚本?


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如果您想知道为什么没有。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 Python setuptools 的安装后脚本 的相关文章

随机推荐