当前位置: 首页 > 知识库问答 >
问题:

在软件包的设置中使用setuptools。py——如何有条件地安装脚本?

储嘉悦
2023-03-14

如何配置设置。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.
        ],
},

我的setup.py有版本化脚本(脚本名称中包含python版本)和未版本化脚本。在OS X上,我使用2.7版本的系统python,这需要超级用户权限来运行pip(sudo pip...),这导致脚本安装在具有根所有权的/usr/本地/bin下。然后,当我尝试在Python 3.4下安装时,它会尝试(但失败)覆盖/usr/local/bin中的未版本脚本。我不介意它不能覆盖脚本文件,我介意pip安装失败,让半安装的包处于奇怪、时髦的状态。

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

共有1个答案

陶炫明
2023-03-14

我不知道标准设置功能行为是否支持您的要求。

但我确信,可以做到以下几点:

>

  • 在调用设置程序之前,请检查脚本是否已经存在,并且是否愿意重新安装或跳过。您使用的是Python脚本,因此您手头有完整的Python功能,可以使用它来调查情况并做出决策。

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

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

    因为set是一个功能,你可以把它放入try除了,如果你知道,你可以解决问题,要求安装没有第一个脚本,第二次尝试可能会走这条路。

  •  类似资料:
    • 问题内容: 是否可以通过命令标志或环境变量来指定自定义包目标? 默认情况下,npm local安装最终会在当前目录中进行,但是我希望它安装在其他目录中。我该如何实现? 问题答案: TL; DR 您可以通过使用标志和*标志来实现。 *即使这是“全局”安装,除非存在中,否则无法通过命令行访问已安装的垃圾箱。 TL; R 的每个可配置属性都可以在六个不同的地方设置。按优先顺序: 命令行标志: 环境变量:

    • 问题内容: 如何在中使用模块的本地版本。例如,在我的应用中,我安装了coffee-script: 这会将其安装在中,coffee命令在中。当我在项目的主文件夹中时,是否可以运行此命令?我想我正在寻找类似于捆扎机中的东西。基本上,我想指定一个咖啡脚本的版本,参与该项目的每个人都应该使用。 我知道我可以添加该标志以在全球范围内安装它,这样咖啡在任何地方都可以正常工作,但是如果我想每个项目使用不同版本的

    • 问题内容: 使用setuptools时,无法让安装程序提取任何文件。我读过的所有内容都表明,以下是正确的方法。有人可以请教吗? 数据文件的位置在哪里。 问题答案: 我知道这是一个老问题,但人们发现这里通过谷歌自己的方式: 是低了下来,肮脏的谎言。它仅在构建 二进制 软件包()时使用, 而 在构建源软件包()时不使用。当然,这是荒谬的-人们希望构建源代码分发将导致文件的集合,这些文件可以发送给其他人

    • 问题内容: 我有一个组件,有时有时需要呈现为和,有时需要呈现为。在我读来确定这一点,是。 如果存在,则需要将组件包装在中。否则,它将仅呈现为。 可能? 这是我现在正在做的,但是感觉可以简化: 更新: 这是最终的锁定。感谢您的提示,@ Sulthan! 问题答案: 只需使用一个变量。 或者,您可以使用辅助函数来呈现内容。JSX和其他代码一样。如果要减少重复,请使用函数和变量。

    • 问题内容: 我想将包从github安装到我的gopath,我已经尝试过了: 仓库在这里。 问题答案: 命令去 下载并安装软件包和依赖项 用法: [packages] Get下载由导入路径命名的包及其依赖项。然后,它将安装命名的软件包,例如“ go install”。 -d标志指示下载软件包后停止。也就是说,它指示不要安装软件包。 -f标志仅在设置-u后才有效,它强制-u不验证每个软件包是否已从其导

    • 我有一个python包fsspec。该库提供了一种注册外部文件系统(后端集成)的方法。注册所需文件系统的一种方法是将其添加到setuptools中的入口点。 为了完成任务,我们可以在设置中手动添加入口点。然后安装该软件包。但我要寻找的是一种通过编程在fsspec包安装前/安装后创建条目的方法。