在 setup.cfg 中正确使用 PEP 508 环境标记

2023-11-26

我正在尝试利用PEP 496 -- 环境标记 and PEP 508——Python 软件包的依赖规范通过指定仅在特定操作系统上有意义的依赖关系。

My setup.py看起来像这样:

import setuptools
assert setuptools.__version__ >= '36.0'

setuptools.setup()

我的最小setup.cfg看起来像这样:

[metadata]
name = foobar
version = 1.6.5+0.1.0

[options]
packages = find:

install_requires =
    ham >= 0.1.0
    eggs >= 8.1.2
    spam >= 1.2.3; platform_system=="Darwin"
    i-love-spam >= 1.2.0; platform_system="Darwin"

但是,当尝试使用以下命令安装这样的软件包时pip install -e foobar/,失败并显示:

pip._vendor.pkg_resources.RequirementParseError: Invalid requirement, parse error at "'; platfo'"

我猜想那里不会有分号。但是我应该如何使用环境标记呢?


一个字符。这就是你所缺少的。你有过platform_system="Darwin"代替platform_system=="Darwin"(你的最后一行install_requires)。这样就可以正常工作:

[metadata]
name = foobar
version = 1.6.5+0.1.0

[options]
packages = find:

install_requires =
    ham >= 0.1.0
    eggs >= 8.1.2
    spam >= 1.2.3; platform_system=="Darwin"
    i-love-spam >= 1.2.0; platform_system=="Darwin"

这不是必需的,但你的setup.py也可以简化。

import setuptools

setup(setup_requires=['setuptools>=36.0'])

与之前的评论不同,我喜欢使用setup.cfg。它干净又简单。如果您想使用来自setup.cfg在运行时,很容易解析:

from setuptools.config.setupcfg import read_configuration

conf_dict = read_configuration('/home/user/dev/package/setup.cfg')

更多 setup.cfg 信息

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 setup.cfg 中正确使用 PEP 508 环境标记 的相关文章

  • Python PAM 模块的安全问题?

    我有兴趣编写一个 PAM 模块 该模块将利用流行的 Unix 登录身份验证机制 我过去的大部分编程经验都是使用 Python 进行的 并且我正在交互的系统已经有一个 Python API 我用谷歌搜索发现pam python http pa
  • 如何使用固定的 pandas 数据框进行动态 matplotlib 绘图?

    我有一个名为的数据框benchmark returns and strategy returns 两者具有相同的时间跨度 我想找到一种方法以漂亮的动画风格绘制数据点 以便它显示逐渐加载的所有点 我知道有一个matplotlib animat
  • 如何生成给定范围内的回文数列表?

    假设范围是 1 X 120 这是我尝试过的 gt gt gt def isPalindrome s check if a number is a Palindrome s str s return s s 1 gt gt gt def ge
  • 如何使用包含代码的“asyncio.sleep()”进行单元测试?

    我在编写 asyncio sleep 包含的单元测试时遇到问题 我要等待实际的睡眠时间吗 I used freezegun到嘲笑时间 当我尝试使用普通可调用对象运行测试时 这个库非常有用 但我找不到运行包含 asyncio sleep 的测
  • SQL Alchemy 中的 NULL 安全不等式比较?

    目前 我知道如何表达 NULL 安全的唯一方法 SQL Alchemy 中的比较 其中与 NULL 条目的比较计算结果为 True 而不是 NULL 是 or field None field value 有没有办法在 SQL Alchem
  • 从列表中的数据框列中搜索部分字符串匹配 - Pandas - Python

    我有一个清单 things A1 B2 C3 我有一个 pandas 数据框 其中有一列包含用分号分隔的值 某些行将包含与上面列表中的一项的匹配 它不会是完美的匹配 因为它在其中包含字符串的其他部分 该列 例如 该列中的一行可能有 哇 这里
  • IRichBolt 在storm-1.0.0 和 pyleus-0.3.0 上运行拓扑时出错

    我正在运行风暴拓扑 pyleus verbose local xyz topology jar using storm 1 0 0 pyleus 0 3 0 centos 6 6并得到错误 线程 main java lang NoClass
  • python pandas 中的双端队列

    我正在使用Python的deque 实现一个简单的循环缓冲区 from collections import deque import numpy as np test sequence np array range 100 2 resha
  • Abaqus 将曲面转化为集合

    我一直试图在模型中找到两个表面的中心 参见照片 但未能成功 它们是元素表面 面 查询中没有选项可以查找元素表面的中心 只能查找元素集的中心 找到节点集的中心也很好 但是我的节点集没有出现在工具 gt 查询 gt 质量属性选项中 而且我找不到
  • Pandas Dataframe 中 bool 值的条件前向填充

    问题 如何转发 fill boolTruepandas 数据框中的值 如果是当天的第一个条目 True 到一天结束时 请参阅以下示例和所需的输出 Data import pandas as pd import numpy as np df
  • 表达式中的 Python 'in' 关键字与 for 循环中的比较 [重复]

    这个问题在这里已经有答案了 我明白什么是in运算符在此代码中执行的操作 some list 1 2 3 4 5 print 2 in some list 我也明白i将采用此代码中列表的每个值 for i in 1 2 3 4 5 print
  • ExpectedFailure 被计为错误而不是通过

    我在用着expectedFailure因为有一个我想记录的错误 我现在无法修复 但想将来再回来解决 我的理解expectedFailure是它会将测试计为通过 但在摘要中表示预期失败的数量为 x 类似于它如何处理跳过的 tets 但是 当我
  • Python:尝试检查有效的电话号码

    我正在尝试编写一个接受以下格式的电话号码的程序XXX XXX XXXX并将条目中的任何字母翻译为其相应的数字 现在我有了这个 如果启动不正确 它将允许您重新输入正确的数字 然后它会翻译输入的原始数字 我该如何解决 def main phon
  • Python - 按月对日期进行分组

    这是一个简单的问题 起初我认为很简单而忽略了它 一个小时过去了 我不太确定 所以 我有一个Python列表datetime对象 我想用图表来表示它们 x 值是年份和月份 y 值是此列表中本月发生的日期对象的数量 也许一个例子可以更好地证明这
  • Python:计算字典的重复值

    我有一本字典如下 dictA unit1 test1 alpha unit1 test2 beta unit2 test1 alpha unit2 test2 gamma unit3 test1 delta unit3 test2 gamm
  • 检查所有值是否作为字典中的键存在

    我有一个值列表和一本字典 我想确保列表中的每个值都作为字典中的键存在 目前我正在使用两组来确定字典中是否存在任何值 unmapped set foo set bar keys 有没有更Pythonic的方法来测试这个 感觉有点像黑客 您的方
  • 如何从没有结尾的管道中读取 python 中的 stdin

    当管道来自 打开 时 不知道正确的名称 我无法从 python 中的标准输入或管道读取数据 文件 我有作为例子管道测试 py import sys import time k 0 try for line in sys stdin k k
  • Spark.read 在 Databricks 中给出 KrbException

    我正在尝试从 databricks 笔记本连接到 SQL 数据库 以下是我的代码 jdbcDF spark read format com microsoft sqlserver jdbc spark option url jdbc sql
  • 改变字典的哈希函数

    按照此question https stackoverflow com questions 37100390 towards understanding dictionaries 我们知道两个不同的字典 dict 1 and dict 2例
  • Python 分析:“‘select.poll’对象的‘poll’方法”是什么?

    我已经使用 python 分析了我的 python 代码cProfile模块并得到以下结果 ncalls tottime percall cumtime percall filename lineno function 13937860 9

随机推荐

  • 芹菜、昆布和 django - 导入错误

    我正在使用 django 运行一个应用程序 我想使用 celery 来制作一些计划任务 根据官方文档 在我的 settings py 文件中 我设置了代理传输 BROKER URL django 并将 kombu transport dja
  • R从半标准字符串中提取时间分量

    Setup 我有一列持续时间作为字符串存储在数据框中 我想将它们转换为适当的时间对象 可能POSIXlt 大多数字符串都很容易使用解析这个方法 gt data lt data frame time string c 1 d 2 h 3 m
  • 在spark中对海量数据运行reduceByKey

    我在spark 中运行reduceByKey 我的程序是spark最简单的例子 val counts textFile flatMap line gt line split repartition 20000 map word gt wor
  • JAX-WS,身份验证和授权 - 如何?

    在 Web 服务中进行身份验证和授权的最佳方法是什么 我正在开发一组 Web 服务 需要基于角色的访问控制 使用 Metro SOAP 没有 EJB 的简单 java 我只想使用用户名和用户名对用户进行一次身份验证 密码 与数据库进行匹配
  • Javascript IE检测,为什么不使用简单的条件注释呢? [复制]

    这个问题在这里已经有答案了 为了检测 IE 大多数 Javascript 库都会使用各种技巧 jQuery 似乎在页面的 DOM 中添加了一个临时对象来检测某些功能 YUI2 在其用户代理上执行正则表达式YAHOO env ua funct
  • C 中字符到二进制的转换

    我正在尝试将字符转换为其二进制表示形式 因此字符 gt ascii 十六进制 gt 二进制 我知道要做到这一点我需要转变AND 但是 由于某种原因 我的代码无法正常工作 这是我所拥有的 temp指向 C 字符串中的索引 char c int
  • 编译时 jsoncpp 出现致命错误

    我是 cpp 新手 但根据项目要求 我需要使用其余 api 并解析响应 我能够调用 api 并捕获响应 但无法使用 JSONCPP 库解析它 这些是我解析 json 所遵循的步骤 使用此命令在 ubuntu 中安装 libjsoncppsu
  • 如何销毁/删除/解除绑定 Flexslider

    github 页面上有一些关于 destroy 方法的讨论 以及堆栈上的几个问题 但还没有一个简单的答案或解决方案 我经过大量搜索后才找到 当前版本的flexsliderhttp www woothemes com flexslider 没
  • 边框样式不适用于粘性位置元素

    我不知道为什么我的边框样式不兼容position sticky 属性 我想在我的粘性表格标题上设置边框样式 但我不想使用透明背景色 我怎样才能实现它 这是我的问题的示例代码和JSFiddle 链接 wrapper width 400px h
  • 有没有办法在 Graphviz 上绘制 B 树?

    我正在尝试生成类似的东西 https upload wikimedia org wikipedia commons 6 65 B tree svg 从内存中的 btree 有没有办法生成像 Graphviz 上那样的图形 以便我可以生成 d
  • Bootstrap 工具提示不适用于 Font Awesome 图标

    我正在使用引导工具提示 但我似乎无法让它与很棒的字体图标一起使用 我可以让它工作 a title Other Prep Info a 但这不起作用 a title Other Prep a
  • 如何将 Quasar 添加到现有的 Nuxt 应用程序?

    我想将 Quasar 安装到我现有的 Nuxt 项目中 我一直在阅读类星体文档他们在安装页面中唯一提到的是他们自己的 CLI 其中没有 Nuxt 选项 我也遇到过新类星体模块 但不再维护 有人有这方面的经验吗 如果它兼容 Vue 那么它也兼
  • 带事件的日期选择器?

    有没有一个 jquery 插件可以让我有一个像矩形一样的小日历 就像在日期选择器中一样 并且一些日期会有不同的颜色 当我用鼠标浏览日期时 会弹出一个窗口 说明当天安排了哪些活动 当然 我会用事件填充事件数组 我找到的只是日期选择器 小 或日
  • Java Enterprise 未出现在 IntelliJ 中

    我在将 Java EE glassfish 服务器导入 IntelliJ 时遇到问题 我没有在网上搜索任何内容 当我想创建一个新的 glassfish 项目时 我没有选择 我无法添加图像 因为我没有这方面的声誉 我在文本下方添加了图像的直接
  • ListView.removeFooterView(View) 崩溃

    我收到以下崩溃报告 android widget ListView lv lv removeFooterView v 错误是空指针异常 我检查 listView 本身不为空 这是什么原因造成的 是否需要确保要删除的视图不为空 这足够了还是我
  • Next.js 13 - 错误:next.config.js 不再支持“target”属性,甚至 next.config.js 也没有 target 属性

    我将 next js 应用程序升级到 Next js 13 并将新版本推送到 AWS Amplify 由于此错误 构建失败 next config js 中不再支持 target 属性 Error The target property i
  • Activity 泄露了 IntentReceiver - LollipopBrowserAccessibilityManager

    我希望在这里找到一些帮助 因为我对Android中的BroadcastReceivers不熟悉 这段代码会打开一个 WebView 将您重定向到登录页面 并在检测到 URL 更改后接收登录令牌 之后 该活动将被关闭 Override pro
  • 使 Tkinter Entry 小部件只读但可选择

    有没有办法制作 Tkinter Entry 小部件 以便可以突出显示和复制文本 但不能更改文本 Use the 状态选项 禁用 全部小写 使用此选项禁用 Entry 小部件 以便用户无法 在其中输入任何内容 使用 state tk DISA
  • 我想删除所有 bin 和 obj 文件夹以强制所有项目重建所有内容

    我处理多个项目 并且我想递归删除名为 bin 或 obj 的所有文件夹 这样我确信所有项目都会重建所有内容 有时这是强制 Visual Studio 忘记所有以前的内容的唯一方法 构建 有没有一种快速方法可以完成此任务 例如使用 bat 文
  • 在 setup.cfg 中正确使用 PEP 508 环境标记

    我正在尝试利用PEP 496 环境标记 and PEP 508 Python 软件包的依赖规范通过指定仅在特定操作系统上有意义的依赖关系 My setup py看起来像这样 import setuptools assert setuptoo