python - 在你的包的 setup.py 中使用 setuptools——你如何有条件地安装脚

如何配置 setup.py 以便它不会尝试覆盖已经存在的脚本?或者,如果编写脚本失败,至少完成其余的包安装。我正在为 my setup.py 使用设置工具. 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 上,我使用 2.7 的系统 python,它需要 super 用户权限才能运行 pip (sudo pip ...),这会导致脚本安装在 /usr/local/bin 下,具有 root 所有权。然后,当我尝试在具有用户权限的通过自制软件安装的 python 3.4 下安装时,它会尝试(但失败)覆盖 /usr/local/bin 中的未版本化脚本。我不介意它不能覆盖脚本文件,我确实介意 pip 安装失败并使安装了一半的包处于奇怪、古怪的状态。

我希望能够指示 setup.py 要么不要尝试安装脚本,如果它已经被其他东西安装,或者至少忽略错误并继续安装的其余部分,如果它没有'没有权限覆盖脚本。

最佳答案

我不知道标准的 setup 函数行为是否支持您的要求。

但我敢肯定,可以做到以下几点:

只询问真正可行的setup

  1. 在您调用您的设置 之前,请检查该脚本是否已经存在并且您愿意重新安装它或跳过它。你在 Python 脚本中,所以你手头有完整的 Python 能力,用它来调查情况并做出决定。

  2. 调用 setup 时,以这种方式构造 entry_points 的值,它会执行您需要的操作(安装或不安装脚本)。

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

尝试向 setup 询问你想要什么,如果失败,则要求更少

因为setup是一个函数,你可以把它放到tryexcept中,如果你知道,你可以解决问题要在没有第一个脚本的情况下安装,第二次尝试可能会这样。

关于python - 在你的包的 setup.py 中使用 setuptools——你如何有条件地安装脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23714793/

相关文章:

sql-server-2008-r2 - SQL Server 2008 R2 Express :

c# - displayformatattribute 自定义格式化字符串

python - 谷歌搜索

validation - 如何验证从应用程序到我的 Web 服务的请求的真实性

javascript - 为什么在 Chrome Dev-tools 中的 Resources ->

java - 如何为复选框添加边框并使其始终可见

SAPUI5 - Sap.m.RadioButton 值字段?

ruby-on-rails - 在 Rails Controller 中跳过多个过滤器

string - 如何在 Matlab 中为文本添加轮廓?

r - 传单 map 未在浏览器中显示