使用distribute/setuptools创建符号链接(或运行脚本)?

tda*_*vis 10 python symlink setuptools distribute

作为项目设置过程的一部分,我需要将其中一个软件包符号链接到指定的目录,以便init.d脚本可以找到它.有没有办法将此作为后处理命令添加到setup()?我甚至愿意创建另一个创建链接的文件并将其setup()作为"运行这些"的一些kwarg列表的一部分传递(如果存在这样的选项).

setup(
    ...
    packages = find_packages('src'),
    package_dir = {'': 'src'},
    install_requires = ...,
    data_files = [('/etc/init.d', ['scripts/foo'])],
    ...
)
Run Code Online (Sandbox Code Playgroud)

foo脚本期望其中一个包与src/其他地方的符号链接(例如,不是简单地打开PYTHONPATH).有没有办法实现这一目标?

小智 7

我知道这篇文章有几年的历史了,但我想提供一个更新,即在setup.py中可以进行后处理代码.简而言之,您必须覆盖setuptools的安装功能,但从那时起,您可以添加所需的任何代码,例如复制MANIFEST.in拒绝复制的符号链接.取自Peter Lamut的解决方案.

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,
    },
    ...
)
Run Code Online (Sandbox Code Playgroud)


PJ *_*Eby 4

目前,只有特定于平台的包管理工具(例如 RPM、deb、win32 安装程序)能够运行安装后步骤:distutils、setuptools 等不直接支持此操作。(除非允许您构建 RPM、Windows 安装程序等)

因此,在没有特定于平台的安装程序的情况下执行此操作的最简单方法是创建您自己的安装后脚本,或者将安装后选项添加到您的现有脚本中,并告诉用户运行它。否则,您必须使用 bdist_rpm 或其他 bdist 命令之一来构建适用于适当平台的安装程序。