Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 是否使用分发/设置工具创建符号链接(或运行脚本)?_Python_Symlink_Setuptools_Distribute - Fatal编程技术网

Python 是否使用分发/设置工具创建符号链接(或运行脚本)?

Python 是否使用分发/设置工具创建符号链接(或运行脚本)?,python,symlink,setuptools,distribute,Python,Symlink,Setuptools,Distribute,作为项目设置过程的一部分,我需要将其中一个包符号链接到指定目录,以便init.d脚本可以找到它。有没有办法将此作为后处理命令添加到setup()?我甚至愿意创建另一个文件来创建链接,并将其传递给setup(),作为“运行这些”的kwarg列表的一部分(如果存在这样的选项) 该foo脚本期望src/中的一个包被符号链接到其他目录(例如,不只是位于PYTHONPATH)。有没有办法实现这一点?目前,只有特定于平台的软件包管理工具(如RPM、deb、win32 Installer)能够运行安装后步骤:

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


foo
脚本期望
src/
中的一个包被符号链接到其他目录(例如,不只是位于
PYTHONPATH
)。有没有办法实现这一点?

目前,只有特定于平台的软件包管理工具(如RPM、deb、win32 Installer)能够运行安装后步骤:distutils、setuptools等不直接支持此功能。(允许您构建RPM、windows installer等的范围除外)

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

在@pjeby的答案上展开,您还可以扩展install命令以添加自己的自定义安装后步骤。然而,这只在从源代码安装(即运行setup.py)时起作用,其他安装程序(如RPM和MSI)将默默地忽略您的更改


编辑:在谷歌搜索后发现,似乎您不应该尝试自己创建符号链接:

我知道这篇文章已经有几年了,但我想提供一个更新,即setup.py中可以使用后期处理代码。长话短说,您必须覆盖setuptools的安装功能,但从那时起,您可以添加任何需要的代码,例如复制MANIFEST.in拒绝复制的符号链接。取自彼得·拉穆特的


Hélio Guilherme通知我,我博客帖子的链接已被删除。我编辑了你的帖子,使链接再次活跃起来。顺便说一句,我很高兴你觉得它很有用。
setup(
    ...
    packages = find_packages('src'),
    package_dir = {'': 'src'},
    install_requires = ...,
    data_files = [('/etc/init.d', ['scripts/foo'])],
    ...
)
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,
    },
    ...
)