是否可以将安装后Python脚本文件指定为setuptools setup.py文件的一部分,以便用户可以运行以下命令:
python setup.py安装
在本地项目文件存档中,或
pip安装<;名称>;
对于PyPI项目,脚本将在标准setuptools安装完成时运行?我希望执行可以在单个Python脚本文件中编码的安装后任务(例如,向用户发送自定义的安装后消息,从不同的远程源存储库提取其他数据文件)
我在几年前遇到了这个解决这个问题的答案,当时的共识似乎是您需要创建一个install子命令。如果情况仍然如此,是否有人可以提供一个示例,说明如何执行此操作,以便用户无需输入第二个命令来运行脚本
注意:以下解决方案仅在安装源发行版zip或tarball,或从源代码树以可编辑模式安装时有效。从二进制转轮(.whl)安装时,它将不起作用
此解决方案更加透明:
您将对setup.py进行一些添加,不需要额外的文件
也需要考虑两种不同的后安装方式;一个用于开发/可编辑模式,另一个用于安装模式
将包含安装后脚本的这两个类添加到setup.py:
从设置工具导入设置
从setuptools.command.develop导入开发
从setuptools.command.install导入安装
课程开发后命令(开发):
“”“开发模式的安装后。”“”
def运行(自):
开发。运行(自我)
#将安装后脚本放在此处或调用函数
类PostInstallCommand(安装):
“”“安装模式的安装后。”“”
def运行(自):
安装。运行(自我)
#将安装后脚本放在此处或调用函数
并在setup.py中的setup()函数中插入cmdclass参数:
设置(
...
cmdclass={
“开发”:后开发命令,
“安装”:PostInstallCommand,
},
...
)
您甚至可以在安装过程中调用shell命令,如本例中的预安装准备:
从设置工具导入设置
从setuptools.command.develop导入开发
从setuptools.command.install导入安装
从子流程导入检查调用
类预开发命令(开发):
“”“开发模式的预安装。”“”
def运行(自):
检查调用(“apt get install this package”.split())
开发。运行(自我)
类PreInstallCommand(安装):
“”“安装模式的预安装。”“”
def运行(自):
检查调用(“apt get install this package”.split())
安装。运行(自我)
设置(
...
另外,setuptools上没有任何预安装入口点。如果您想知道为什么没有,请阅读本讨论。