作为项目安装过程的一部分,我需要将其中一个包符号链接到指定的目录,以便init.d脚本可以找到它。有没有办法将其作为后处理命令添加到setup()中?我甚至愿意创建另一个文件来创建链接,并将其作为某个“运行这些”(如果存在这样的选项)的kwarg列表的一部分传递给setup()。
setup(
...
packages = find_packages('src'),
package_dir = {'': 'src'},
install_requires = ...,
data_files = [('/etc/init.d', ['scripts/foo'])],
...
)该foo脚本要求来自src/的一个包被符号链接到其他地方的目录(例如,不仅仅是在PYTHONPATH上)。有没有办法做到这一点?
发布于 2010-01-30 01:36:43
目前,只有特定于平台的包管理工具(例如RPM、deb、win32安装程序)能够运行安装后步骤: distutils、setuptools等不直接支持此功能。(除非允许您构建RPM、windows installer等)
因此,没有特定于平台的安装程序的最简单方法是创建自己的postinstall脚本,或者将postinstall选项添加到现有脚本中,并告诉用户运行它。否则,您将不得不使用bdist_rpm或其他某个bdist命令为适当的平台构建安装程序。
发布于 2014-10-21 23:45:39
我知道这篇文章已经有几年的历史了,但我想提供一个更新,即在setup.py中可以进行后处理代码。长话短说,您必须覆盖setuptools的安装功能,但从那时起,您可以添加任何您想要的代码,例如复制MANIFEST.in拒绝复制的符号链接。取自彼得·拉姆特的solution
from setuptools.command.install import install
class CustomInstallCommand(install):
"""Customized setuptools install command - prints a friendly greeting."""
def run(self):
print "Hello, developer, how are you? :)"
install.run(self)
#post-processing code
setup(
...
cmdclass={
'install': CustomInstallCommand,
},
...
)https://stackoverflow.com/questions/2159211
复制相似问题