在软件包的setup.py中使用setuptools - 如何有条件地安装脚本?

时间:2014-05-17 18:34:30

标签: python setuptools pypi

如何配置setup.py,以便它不会尝试覆盖已存在的脚本?或者,如果编写脚本失败,至少完成包安装的其余部分。我正在使用my setup.py的setuptools。 setup.py的相关部分是:

entry_points = {
    'console_scripts' : [
        'green = green:main',  # <-- The one I have problems with
        'green%d = green:main' % sys.version_info[:1],     # green2 or green3
        'green-%d.%d = green:main' % sys.version_info[:2], # green-3.4 etc.
        ],
},

my setup.py有两个版本化脚本(python版本包含在脚本名称中)和无版本脚本。在OS X上,我使用系统python for 2.7,这需要超级用户权限来运行pip(sudo pip ...),这会导致脚本安装在具有root所有权的/usr/local/bin下。然后当我尝试通过带有用户权限的homebrew安装的python 3.4下安装时,它会尝试(并且失败)覆盖/usr/local/bin中的无版本脚本。我不介意它不能覆盖脚本文件,我记得pip无法安装,并使半安装的软件包处于一个奇怪,时髦的状态。

我希望能够指示setup.py如果已经安装了其他内容,则不尝试安装脚本,或者至少忽略该错误并继续安装其余部分(如果它没有&# 39; t有权覆盖脚本。

1 个答案:

答案 0 :(得分:0)

我不知道,如果标准setup函数行为支持您的要求。

但我相信,可以这样做:

仅询问setup可能的内容

  1. 在致电setup之前,请检查脚本是否已存在且您是否愿意重新安装或跳过。你使用的是Python脚本,因此掌握了完整的Python功能,用它来调查情况并做出决定。

  2. 调用setup时,以这种方式构造entry_points的值,它可以满足您的需要(安装或不安装脚本)。

  3. 无论如何,这有点困难,你需要做自己的分析,如果要安装的脚本已经存在,它在哪里,检查,是否要更新它等。

    尝试向setup询问您想要的内容,如果失败,请减少

    由于setup是一个功能,您可以将它放入tryexcept,如果您知道,您可以在没有第一个脚本的情况下解决要求安装的问题,第二次尝试可能走这条路。