2010-01-29 65 views
9

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

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

foo该脚本期望被符号链接到别处目录从src/包中的一个(例如不单纯是对PYTHONPATH)。有没有办法实现这一点?

回答

4

目前,只有特定于平台的软件包管理工具(例如RPM,DEB,win32的安装程序)必须运行后的安装步骤的能力:Distutils的,setuptools的,等不直接支持这一点。 (除了允许你创建RPM,Windows Installer的程度等)

所以,要做到这一点没有特定于平台的安装程序最简单的方法,就是要创建自己的后脚本,或者为你的现有脚本添加一个postinstall选项,并告诉用户运行它。否则,您将不得不使用bdist_rpm或其他bdist命令之一来为相应的平台构建安装程序。对@ pjeby的回答

0

扩展,还可以扩展安装命令添加自己的自定义安装后的步骤。然而从源代码安装时(即运行setup.py)和其他安装RPM一样只会工作和MSI会悄悄地忽略更改。

编辑:一些谷歌上搜索后发现这一点,看来你应该试图自行创建符号链接:http://docs.python.org/2/install/index.html#alternate-installation

4

我知道这个帖子是几个岁,但我想提供一个更新在setup.py中可以使用后处理代码。长话短说,你要重写的setuptools的安装功能,但从此之后,你可以添加任何你想要的代码,比如复制该MANIFEST.in拒绝复制符号链接。采取自Peter Lamut的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, 
    }, 
    ... 
) 
+1

Helio公司的Guilherme通知我,链接到我的博客文章已经死了。我编辑了你的帖子,让链接重新开始。顺便说一句,我很高兴你发现它很有用。 – plamut 2016-02-06 18:36:55