Python Setuptools和PBR-如何使用git标签作为版本创建软件包发行版?

时间:2019-10-21 17:42:27

标签: python versioning setuptools python-pbr

我实际上如何使用setuptoolspbr创建使用git repo标签进行版本控制的python软件包的发行版/发行版?

关于所需的基本设置和配置,有很多信息:

但是关于如何实际创建发行版的简单信息在哪里?

即我正在寻找任何找到带有版本信息的git标记并将其拉入配置信息的命令,以便可以分发具有该新版本信息的源,并且可以使用上述方法从脚本中找到版本信息在this answer中。


其他详细信息

我正在开发一个项目,该项目只能通过git repo而不是通过 PyPi 分发给其他开发人员。该项目将使用pyinstaller作为可执行文件发布给用户,因此此程序包分发仅用于一些关键目的:

  1. 为其他开发人员安装/设置软件包,以便可以完全重新创建依赖关系/环境。
  2. 管理版本控制-当前的计划是使用pbr从Git repo标签生成版本,因此这些标签可以成为我们进行版本控制的真实来源
  3. pbr用于其他从Git自动生成的普通项目,例如作者,manifest.in文件,发行说明等。

由于setuptools文档致力于使用 PyPi pip设置完全可分发和可重用的软件包,而pbr文档仅真正告诉您如何修改setuptools配置为使用pbr,我找不到有关如何仅运行分发/发布过程的信息。

我确定它存在于文档中的某处,但是在几次错误的开始之后,我要问这里。在我看来,到处都有暗示,每个人要么知道如何做到这一点,要么就神奇地发生在过程中。

我只是想念明显的东西吗?


更新

基于sinoroc的回答,看来我需要研究开发模式的安装。即开发该项目的任何人都将从git克隆,然后使用setuptools开发安装模式进行安装。

这不是原始问题的直接一部分,而是暗含的,我相信同样情况下的人们也会对此感兴趣(我无法轻易找到的信息)。

他的回答中提供了有关更新某些元数据以及通过this setuptools documentation link to working in "Development Mode"

的更多信息。

2 个答案:

答案 0 :(得分:1)

简而言之:

  • UPDATE t2 SET salary = t1.TotalSalary FROM table2 AS t2 JOIN (SELECT id, SUM(salary) as TotalSalary FROM table1 ) AS t1 ON t1.id = t2.id;
  • python3 setup.py sdist
  

我实际上如何使用setuptools和pbr创建使用git repo标签进行版本控制的python软件包的发行版/发行版?

使用 setuptools 创建(源和转轮)Python软件包的常用命令是:python3 setup.py bdist_wheelpython3 setup.py sdist。然后可以默认在python3 setup.py bdist_wheel目录中找到这些分布。

  

由于setuptools文档致力于通过PyPi和pip设置完全可分发和可重用的软件包,而pbr文档仅真正告诉您如何修改setuptools配置以使用pbr,因此我找不到有关如何仅运行pbr的信息。分发/发布过程。

setuptools 确实没有对此进行说明。它仅记录与dist之间的差异,确实令人困惑。请参阅下面的实际文档...

  

但是关于如何实际创建发行版的简单信息在哪里?


更新

由于您不打算在诸如 PyPI 的索引上发布项目的发行版,而是打算使用 pyinstaller 进行发布,因此确实有可能忽略诸如distutilssdist之类的 setuptools 命令。

在开发阶段您仍然可能想知道以下命令:

  • 使用bdist_wheelpython3 setup.py --version之类的命令来确定setuptools(以您的情况为pbr)是否捕获了正确的信息。
  • 使用python3 setup.py --fullname(或python3 setup.py develop)在您的 site-packages 中放置一个指向您正在进行的工作的伪链接(pip install --editable .)。这样,您的更改始终可以安装并导入。重要提示:请勿使用egg-link,这会将当前版本复制到 site-packages ,并且较新的更改将无法导入。

现在,我不知道一旦转到 pyinstaller ,这一切将如何工作。特别是因为您提到要从脚本中发现元信息(例如版本号)。使用 setuptools python3 setup.py install的技术可能在 pyinstaller 上下文中有效或无效。

答案 1 :(得分:1)

这是我解决相同问题的方法,同时也阅读了几个不同的链接。 我创建了一个setup.py文件,内容如下:

from setuptools import setup, find_packages

def readme():
    with open('README.rst') as f:
        return f.read()

def read_other_requirements(other_type):
    with open(other_type+'-requirements.txt') as f:
        return f.read()

setup(
      setup_requires=read_other_requirements('setup'),
      pbr=True,
      packages=find_packages('src'),
      package_dir={'': 'src'},
      include_package_data=True,
      zip_safe=True
)

我在./src中有源代码。另外,我有一个setup-requirements.txt,内容:

pip==18.1
pbr==5.1.1
setuptools==40.7.0

还有一个setup.cfg,其中包含以下内容:

[metadata]
name = XXXXX
description = XXXXX
description-file = README.rst
home-page = https://github.com/XXXXX/XXXXX

因此,首先,安装安装要求:

pip install -r setup-requirements.txt

然后,只要您在本地具有在GitHub中标记的提交,就可以使用以下命令进行安装:

python setup.py install

,它将与带标签的版本一起安装。 您可以通过以下方法进行检查:

python setup.py --version

相关问题