10

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

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

foo脚本期望其中一个包src/被符号链接到其他地方的目录(例如,不仅仅是 on PYTHONPATH)。有没有办法做到这一点?

4

3 回答 3

9

我知道这篇文章已经有好几年了,但我想提供一个更新,在 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,
    },
    ...
)
于 2014-10-21T15:45:38.767 回答
4

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

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

于 2010-01-29T17:36:42.530 回答
0

扩展@pjeby 的答案,您还可以扩展安装命令以添加您自己的自定义安装后步骤。但是,这仅在从源安装(即运行 setup.py)时有效,而其他安装程序(如 RPM 和 MSI)会默默地忽略您的更改。

编辑:在谷歌搜索后发现这个,看来你不应该尝试自己创建符号链接:http: //docs.python.org/2/install/index.html#alternate-installation

于 2013-03-20T12:28:27.323 回答