setup.cfg Python 项目的单源包版本

2024-01-21

对于具有以下功能的传统 Python 项目setup.py,有多种方法可以确保版本字符串不必在整个代码库中重复。看PyPA 的“单一来源包版本”指南 https://packaging.python.org/guides/single-sourcing-package-version/获取建议列表。

很多人都在努力远离setup.py to setup.cfg(可能是受到影响PEP517 and PEP518; setup.py无论如何,大多数情况下都以声明方式使用,并且当存在逻辑时setup.py,情况可能会变得更糟。)这意味着大多数建议将不再起作用,因为setup.cfg不能包含“代码”。

如何为使用的 Python 项目单一来源包版本setup.cfg?


有几种方法可以做到这一点(有关这些示例中使用的项目结构,请参见下文):

1.

setup.cfg

[metadata]
version = 1.2.3.dev4

src/my_top_level_package/__init__.py

import importlib.metadata
__version__ = importlib.metadata.version('MyProject')

2.

setup.cfg

[metadata]
version = file: VERSION.txt

VERSION.txt

1.2.3.dev4

src/my_top_level_package/__init__.py

import importlib.metadata
__version__ = importlib.metadata.version('MyProject')

3.

setup.cfg

[metadata]
version = attr: my_top_level_package.__version__

src/my_top_level_package/__init__.py

__version__ = '1.2.3.dev4'

和更多...

可能还有其他方法可以通过不同的组合来做到这一点。


参考:

  • https://setuptools.readthedocs.io/en/latest/userguide/declarative_config.html https://setuptools.readthedocs.io/en/latest/userguide/declarative_config.html
  • https://docs.python.org/3/library/importlib.metadata.html https://docs.python.org/3/library/importlib.metadata.html

前面示例中假设的结构如下......

MyProject
├── setup.cfg
├── setup.py
└── src
    └── my_top_level_package
        └── __init__.py

setup.py

#!/usr/bin/env python3

import setuptools

if __name__ == '__main__':
    setuptools.setup(
        # see 'setup.cfg'
    )

setup.cfg

[metadata]
name = MyProject
# See above for the value of 'version = ...'

[options]
package_dir =
    = src
packages = find:

[options.packages.find]
where = src
$ cd path/to/MyProject
$ python3 setup.py --version
1.2.3.dev4
$ python3 -m pip install .
# ...
$ python3 -c 'import my_top_level_package; print(my_top_level_package.__version__)'
1.2.3.dev4
$ python3 -V
Python 3.6.9
$ python3 -m pip list
Package       Version   
------------- ----------
MyProject     1.2.3.dev4
pip           20.0.2    
pkg-resources 0.0.0     
setuptools    45.2.0    
wheel         0.34.2    
zipp          3.0.0
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setup.cfg Python 项目的单源包版本 的相关文章

  • sudo 和 pip 不在同一路径上

    pip and sudo不在我的计算机上的同一路径上 因此当 基本上一直 我需要运行这两个命令时 如下所示 sudo pip install xxx I get sudo pip command not found pip下载软件包 但由于
  • 使用 pyppeteer 与 asyncio 关联来抓取内容

    我用 python 结合编写了一个脚本pyppeteer随着asyncio从其登陆页面抓取不同帖子的链接 并最终通过跟踪通向其内页的 url 来获取每个帖子的标题 我这里解析的内容不是动态的 但是 我利用了pyppeteer and asy
  • 使用 keras 澄清 Yolo v3 模型输出

    我将 yolo v3 模型与 keras 一起使用 该网络为我提供了形状如下的输出容器 1 13 13 255 1 26 26 255 1 52 52 255 所以我找到了这个link https www cyberailab com ho
  • 如何搜索一列并用找到的内容填充另一列?

    我有一个带有虚构人物数据的大熊猫数据框 下面是一个小例子 每个人都由一个数字定义 import pandas as pd import numpy as np df pd DataFrame Number 5569 3385 9832 64
  • 在 ubuntu 中卸载 python 模块

    我必须删除一个名为 django 的 python 模块 一种流行的模块 因为我安装了错误的版本 1 3 py 2 6 中的 beta 如何卸载这个模块 请解释一下 因为我只在 Windows 中使用过 python 而从未在 Ubuntu
  • 在Python中,如何通过去掉括号和大括号来打印Json

    我想以一种很好的方式打印 Json 我想去掉方括号 引号和大括号 只使用缩进和行尾来显示 json 的结构 例如 如果我有一个像这样的 Json A A1 1 A2 2 B B1 B11 B111 1 B112 2 B12 B121 1
  • Python SQLite3 SQL注入漏洞代码

    我知道下面的代码片段由于 format 的原因很容易受到 SQL 注入的攻击 但我不知道为什么 有谁明白为什么这段代码容易受到攻击以及我从哪里开始修复它 我知道这些代码片段使输入字段保持打开状态 以便通过 SQL 注入执行其他恶意命令 但不
  • Python正则表达式替换引号中的文本(引号本身除外)

    例如 我有一个测试字符串 content I opened my mouth Good morning I said cheerfully 我想使用正则表达式删除双语音标记之间的文本 但不删除语音标记本身 所以它会返回 I opened m
  • 私有属性,但却是一个神秘的领域

    我想将属性设为私有 但带有 pydantic 字段 from pydantic import BaseModel Field PrivateAttr validator class A BaseModel a str I want a py
  • python 硒 按名称查找元素

    查找电子邮件输入的正确代码是什么https accounts google com ServiceLogin html 是
  • 在添加数据之前使用 Python gdata 清除工作表中的行

    我有一个 Google 电子表格 我使用 python 脚本和 gdata 库填充值 如果我多次运行脚本 它会将新行附加到工作表中 我希望脚本在填充之前首先清除行中的所有数据 这样每次运行时我都会有一组新的数据脚本 我尝试过使用 Updat
  • 使用张量流导出神经网络的权重

    我使用张量流工具编写了神经网络 一切正常 现在我想导出神经网络的最终权重以制定单一的预测方法 我怎样才能做到这一点 您需要在训练结束时使用以下命令保存模型tf train Saver https www tensorflow org ver
  • 在 Keras 中使用有状态 LSTM 训练多变量多级数回归问题

    我有时间序列P过程 每个过程的长度各不相同 但都有 5 个变量 维度 我试图预测测试过程的估计寿命 我正在用有状态的方法来解决这个问题LSTM在喀拉斯 但我不确定我的训练过程是否正确 我将每个序列分成长度的批次30 所以每个序列都是这样的形
  • 哈希 freezeset 与排序元组

    在 Python 中 给定一组可比较的 可散列的元素s 散列是否更好frozenset s or tuple sorted s 这取决于你在做什么 创建一个更快frozenset 比排序tuple but frozenset占用的内存比tu
  • 配置 Django 和 Google 云存储?

    I am not使用应用引擎 我有一个在虚拟机上运行的普通 Django 应用程序 我想使用 Google Cloud Storage 来提供静态文件 以及上传 提供媒体文件 我有一个水桶 如何将 Django 应用程序链接到我的存储桶 我
  • 如何在 Jupyter Notebook 中选择 conda 环境

    我安装了 Anaconda 5 3 和 Python 3 7 根环境 之后我使用 Python 3 6 创建了一个新环境 py36 我激活了新环境activate py36 conda env list表明环境是活跃的 但是当我启动 Jup
  • python 中“重载”函数的最佳方法? [复制]

    这个问题在这里已经有答案了 我正在尝试在 python 中做这样的事情 def foo x y do something at position x y def foo pos foo pos x pos y 所以我想根据我提供的参数数量调
  • 为什么我的 Python 散点图不起作用?

    我使用 pylab 创建了一个非常简单的散点图 pylab scatter engineSize fuelMile pylab show 该程序的其余部分不值得发布 因为正是该行给我带来了问题 当我将 散点 更改为 绘图 时 它会绘制数据图
  • 如何使用 Matplotlib 可视化标量二维数据?

    所以我有一个网格网格 矩阵 X 和 Y 以及标量数据 矩阵 Z 我需要将其可视化 最好是一些 2D 图像 在各点处带有颜色 显示 Z 值 我做了一些研究 但没有找到任何能完全满足我想要的效果的东西 pyplot imshow Z 看起来不错
  • nltk 标记化和缩写

    我用 nltk 对文本进行标记 只是将句子输入到 wordpunct tokenizer 中 这会拆分缩写 例如 don t 到 don t 但我想将它们保留为一个单词 我正在改进我的方法 以实现更精确的文本标记化 因此我需要更深入地研究

随机推荐

  • iOS 上 UIImage 的运动模糊效果

    有没有办法在 UIImage 上获得运动模糊效果 我尝试了 GPUImage Filtrr 和 iOS Core Image 但所有这些都有常规模糊 没有运动模糊 我也尝试过 UIImage DSP 但它的运动模糊几乎不可见 我需要更强大的
  • java.lang.IllegalArgumentException:尝试打开下载的图像时未知的 URI

    我无法打开下载的图像DownloadManager单击通知时 这就是它的可重现性 我使用从网络下载图像DownloadManager 然后 当我单击有关此下载的通知时 操作系统会显示一个对话框 我可以在其中选择应用程序来打开下载的图像 但是
  • ASP.NET MVC 路由, Html.BeginForm

    div div
  • innerHTML 返回 NaN 和文本

    我遇到一个问题 我尝试返回一个值innerHTML但我得到了一个 NaN 我知道我的变量不是数字 但为什么他一直告诉我这个 function checkWord id nameOutput var pattern new RegExp b
  • 是否可以在操作系统级别限制 php 可以通过 exec 传递哪些命令?

    我目前正在主持一个Drupal http drupal org CentOS 计算机上的 6 个站点 德鲁帕尔 CMS http en wikipedia org wiki Content management system 配置包含几十个
  • 在 C++ 中设置差异

    如果我知道一个集合是另一个集合的子集 并且我想找出差异 那么最有效的方法是什么 前任 伪代码 gt set
  • 对于生成 1..n 范围内的 N 个唯一随机数,以下哪种算法在性能和顺序方面更好?

    1 取一个包含 n 个元素的数组 1 2 3 n 使用任意随机洗牌数组的标准算法对数组进行洗牌 修改后的数组的前 N 个元素就是您要查找的内容 2 只需使用Random Next 循环并检查它是否已经存在于Dictionary 直到我们有
  • 未显示数据库中的 JSF bean

    我有以下豆 import java util List import javax faces bean RequestScoped import javax annotations ManagedBean import javax pers
  • 我怎样才能用承诺重写这个?

    我正在为 T 恤网站构建内容抓取器 目标是仅通过一个硬编码的 url 进入网站 http shirts4mike com 然后 我将找到每件 T 恤的所有产品页面 然后创建一个包含其详细信息的对象 然后将其添加到数组中 当数组填满 T 恤时
  • 关于图形工具中嵌套块模型的基本问题

    非常简短地提出两到三个基本问题minimize nested blockmodel dl https graph tool skewed de static doc inference html graph tool inference m
  • C# 的跨平台嵌入式数据库/键值存储 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在寻找一种快速 可嵌入的键 值存储 其具有键集合上的游标语义 或简单的可嵌入数据库 可以在 NET
  • 小端和大端

    我必须编写一个例程来在两种表示形式之间进行转换 但我有点困惑 如果我有一个内存为 32 位字的架构 我必须存储字 0xA15D23B1 使用 Big endian 时 内存在 23 之后的 5D 之后变为 A1 最后变为 B1 使用 Lit
  • bootstrap.yml 未加载 Spring Boot 2

    我遇到了与此类似的问题thread https stackoverflow com questions 48300174 my application does not read bootstrap yml why is that 尚未解决
  • 递归泛型

    有没有办法使此方法适当通用并消除警告 p Sort a collection by a certain value in its entries This value is retrieved using the given code va
  • Angular 5 路由:空路径内的空路径

    我正在使用 Angular 5 尝试将空路径子路由加载到空路径父布局路由中 FullLayoutComponent 始终会加载 而 WhyUsComponent 组件会在我访问 localhost 4200 why us 时加载 但是当我访
  • 从移动应用程序向 Android Wear 发送数据延迟 [重复]

    这个问题在这里已经有答案了 我正在尝试在设置应用程序和表盘之间同步数据 但运气不佳 我尝试使用 googleApiClient 与侦听器 onDataChanged 和 DataMaps 但穿戴设备接收数据有很大的延迟 我说的是从手机发送到
  • 如何在常量正确性下实现 strtol ?

    根据http www cplusplus com reference cstdlib strtol http www cplusplus com reference cstdlib strtol 该函数的签名为long int strtol
  • 如何根据角色获取用户?

    如何从 MembershipUserCollection 中检索 客户 角色的用户 Roles GetUsersInRole返回一个string 角色中的用户名 如果你真的想要MembershipUser对象 您可以使用 var list
  • R plm 与 Fixst 包 - 结果不同?

    我试图理解为什么 R 包 plm and fixest 当我使用异方差稳健标准误差 HC1 和状态固定效应估计面板模型时 给我不同的标准误差 有人给我提示吗 这是代码 library AER For the Fatality Dataset
  • setup.cfg Python 项目的单源包版本

    对于具有以下功能的传统 Python 项目setup py 有多种方法可以确保版本字符串不必在整个代码库中重复 看PyPA 的 单一来源包版本 指南 https packaging python org guides single sour