6

我如何实际创建一个使用 git repo 标签进行版本控制的 python 包的发布/发行版,使用setuptoolsand pbr

有大量关于所需基本设置和配置的信息:

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

即我正在寻找任何命令找到带有版本信息的git标签并将其拉入配置信息中,因此可以分发具有该新版本信息的源,并且可以从脚本中发现版本信息,使用类似的方法在这个答案中描述。


额外细节

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

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

由于文档专注于使用PyPisetuptools设置一个完全可分发和可重用的包,并且文档只真正告诉您如何修改配置以使用,我找不到有关如何运行分发/发布过程的信息。pippbrsetuptoolspbr

我确定它存在于文档中的某个地方,但是在几次错误的开始之后我在这里问。我所看到的任何地方都暗示每个人都知道如何做到这一点,或者它只是作为过程的一部分神奇地发生。

我只是错过了显而易见的事情吗?


更新:

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

这不是原始问题的直接一部分,而是暗示的,我相信处于相同情况的人会感兴趣(我无法轻易找到的信息)。

更多信息可在他关于更新一些元数据的回答中获得,并通过setuptools文档链接在“开发模式”下工作

4

2 回答 2

3

简而言之:

  • python3 setup.py sdist
  • python3 setup.py bdist_wheel

如何使用 setuptools 和 pbr 创建使用 git repo 标签进行版本控制的 python 包的发布/发行版?

使用setuptools创建 Python 包的(源代码和轮子)发行版的常用命令是:python3 setup.py sdistpython3 setup.py bdist_wheel. dist然后默认情况下可以在目录中找到分发。

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

确实setuptools没有记录这一点。它仅记录与 的差异distutils,确实令人困惑。请参阅下面的实际文档...

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


更新

由于您不打算在PyPI之类的索引上发布项目的发行版,而是打算使用pyinstaller,那么您确实很可能忽略setuptools命令,例如sdistbdist_wheel

您仍然可能想了解开发阶段的这些命令:

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

现在,我不知道一旦您继续使用pyinstaller ,这一切将如何运作。特别是因为您提到您希望从脚本中发现元信息(例如版本号)。setuptools的技术在pyinstaller pkg_resources上下文中可能有效,也可能无效

于 2019-10-21T21:39:52.767 回答
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

因此,首先,您安装 setup-requirements:

pip install -r setup-requirements.txt

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

python setup.py install

它将与标记版本一起安装。您可以通过以下方式进行检查:

python setup.py --version

于 2020-01-22T18:44:33.107 回答