Python Setuptools 和 PBR - 如何使用 git 标签作为版本来创建包发布?
Python Setuptools and PBR - how to create a package release using the git tag as the version?
我如何实际创建 release/distro 的 python 包,使用 setuptools
和 pbr
使用 git repo 标签进行版本控制?
关于所需的基本设置和配置的信息很多:
- SetupTools Documentation - setup() and setup.py configuration
- Python Packaging User Guide - Installing Packages
- PBR v3.1.1 documentation
但是关于如何实际创建发行版的简单信息在哪里?
即我正在寻找任何命令找到带有版本信息的 git 标记并将其拉入配置信息,因此可以分发带有新版本信息的源,并且可以从脚本中发现版本信息,使用this answer.
中描述的方法
其他详细信息
我正在开发一个项目,该项目将仅通过 git 存储库分发给其他开发人员,而不是通过 PyPi。该项目将作为可执行文件使用 pyinstaller
发布给用户,因此此包分发将仅用于几个关键目的:
- Install/Setup 其他开发人员的包,以便 dependencies/environment 可以干净地重新创建。
- 管理版本控制 - 当前计划是使用
pbr
从 Git 回购标签生成版本,因此这些标签可以成为我们版本控制的真实来源
- 使用
pbr
从 Git 自动生成其他普通项目,例如作者、manifest.in 文件、发行说明等。
因为 setuptools
文档专注于使用 PyPi 和 pip
设置一个完全可分发和可重用的包,而 pbr
文档只真正告诉你如何修改 setuptools
配置以使用 pbr
,我找不到关于如何 运行 distribution/release 过程的信息。
我确定它存在于文档中的某处,但在几次错误启动后我在这里问。我看到的每个地方都暗示每个人都知道如何做到这一点,或者它只是作为过程的一部分神奇地发生了。
我只是错过了显而易见的东西吗?
更新:
根据 sinoroc 的回答,看来我需要查看开发模式安装。即任何开发该项目的人将从 git 克隆,然后使用 setuptools
开发安装模式进行安装。
这不是原始问题的直接部分,而是隐含的,我相信处于相同情况的人会感兴趣(我不容易找到的信息)。
他关于更新一些元数据的回答中提供了更多信息,并通过 this setuptools
documentation link to working in "Development Mode"
简而言之:
python3 setup.py sdist
python3 setup.py bdist_wheel
How do I actually create a release/distro of a python package that uses a git repo tag for the versioning, using setuptools and pbr?
使用 setuptools 创建 Python 包的(源代码和 wheel)发行版的常用命令是:python3 setup.py sdist
和 python3 setup.py bdist_wheel
。默认情况下,可以在 dist
目录中找到这些发行版。
Since setuptools docs focus on setting up a fully distributable and reusable package with PyPi and pip, and pbr docs only really tell you how to modify setuptools configuration to use pbr, I can't find the info on how to just run the distribution/release process.
setuptools确实没有记录这一点。它只记录了 distutils
的差异,这确实令人困惑。请参阅下面的实际文档...
But where is the simple info on how to actually create the distro?
- https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives
- https://docs.python.org/3/distutils/sourcedist.html
- https://docs.python.org/3/distutils/builtdist.html
更新
由于您不打算在 PyPI 等索引上发布项目的分发版,并且您打算使用 pyinstaller相反,那么您确实很可能会忽略 setuptools 命令,例如 sdist
和 bdist_wheel
。
您可能还想知道这些用于开发阶段的命令:
- 使用
python3 setup.py --version
、python3 setup.py --fullname
等命令来确定设置工具(在您的情况下是 pbr)是否捕获了正确的信息。
- 使用
python3 setup.py develop
(或 pip install --editable .
)在您的 site-packages 中放置伪 link(egg-link
)这表明您正在进行的工作。这样您的更改总是 已安装 并且可以导入。重要提示:不要使用 python3 setup.py install
,这会将当前版本复制到 site-packages,更新的更改将无法导入。
现在我不知道一旦你转向 pyinstaller 这一切将如何运作。特别是因为您提到您希望从脚本中发现 元信息 (例如版本号)。使用 setuptools pkg_resources
的技术在 pyinstaller 上下文中可能有效,也可能无效。
这就是我解决同一个问题的方法,同时还阅读了几个不同的链接。
我创建了一个包含以下内容的 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
我如何实际创建 release/distro 的 python 包,使用 setuptools
和 pbr
使用 git repo 标签进行版本控制?
关于所需的基本设置和配置的信息很多:
- SetupTools Documentation - setup() and setup.py configuration
- Python Packaging User Guide - Installing Packages
- PBR v3.1.1 documentation
但是关于如何实际创建发行版的简单信息在哪里?
即我正在寻找任何命令找到带有版本信息的 git 标记并将其拉入配置信息,因此可以分发带有新版本信息的源,并且可以从脚本中发现版本信息,使用this answer.
中描述的方法其他详细信息
我正在开发一个项目,该项目将仅通过 git 存储库分发给其他开发人员,而不是通过 PyPi。该项目将作为可执行文件使用 pyinstaller
发布给用户,因此此包分发将仅用于几个关键目的:
- Install/Setup 其他开发人员的包,以便 dependencies/environment 可以干净地重新创建。
- 管理版本控制 - 当前计划是使用
pbr
从 Git 回购标签生成版本,因此这些标签可以成为我们版本控制的真实来源 - 使用
pbr
从 Git 自动生成其他普通项目,例如作者、manifest.in 文件、发行说明等。
因为 setuptools
文档专注于使用 PyPi 和 pip
设置一个完全可分发和可重用的包,而 pbr
文档只真正告诉你如何修改 setuptools
配置以使用 pbr
,我找不到关于如何 运行 distribution/release 过程的信息。
我确定它存在于文档中的某处,但在几次错误启动后我在这里问。我看到的每个地方都暗示每个人都知道如何做到这一点,或者它只是作为过程的一部分神奇地发生了。
我只是错过了显而易见的东西吗?
更新:
根据 sinoroc 的回答,看来我需要查看开发模式安装。即任何开发该项目的人将从 git 克隆,然后使用 setuptools
开发安装模式进行安装。
这不是原始问题的直接部分,而是隐含的,我相信处于相同情况的人会感兴趣(我不容易找到的信息)。
他关于更新一些元数据的回答中提供了更多信息,并通过 this setuptools
documentation link to working in "Development Mode"
简而言之:
python3 setup.py sdist
python3 setup.py bdist_wheel
How do I actually create a release/distro of a python package that uses a git repo tag for the versioning, using setuptools and pbr?
使用 setuptools 创建 Python 包的(源代码和 wheel)发行版的常用命令是:python3 setup.py sdist
和 python3 setup.py bdist_wheel
。默认情况下,可以在 dist
目录中找到这些发行版。
Since setuptools docs focus on setting up a fully distributable and reusable package with PyPi and pip, and pbr docs only really tell you how to modify setuptools configuration to use pbr, I can't find the info on how to just run the distribution/release process.
setuptools确实没有记录这一点。它只记录了 distutils
的差异,这确实令人困惑。请参阅下面的实际文档...
But where is the simple info on how to actually create the distro?
- https://packaging.python.org/tutorials/packaging-projects/#generating-distribution-archives
- https://docs.python.org/3/distutils/sourcedist.html
- https://docs.python.org/3/distutils/builtdist.html
更新
由于您不打算在 PyPI 等索引上发布项目的分发版,并且您打算使用 pyinstaller相反,那么您确实很可能会忽略 setuptools 命令,例如 sdist
和 bdist_wheel
。
您可能还想知道这些用于开发阶段的命令:
- 使用
python3 setup.py --version
、python3 setup.py --fullname
等命令来确定设置工具(在您的情况下是 pbr)是否捕获了正确的信息。 - 使用
python3 setup.py develop
(或pip install --editable .
)在您的 site-packages 中放置伪 link(egg-link
)这表明您正在进行的工作。这样您的更改总是 已安装 并且可以导入。重要提示:不要使用python3 setup.py install
,这会将当前版本复制到 site-packages,更新的更改将无法导入。
现在我不知道一旦你转向 pyinstaller 这一切将如何运作。特别是因为您提到您希望从脚本中发现 元信息 (例如版本号)。使用 setuptools pkg_resources
的技术在 pyinstaller 上下文中可能有效,也可能无效。
这就是我解决同一个问题的方法,同时还阅读了几个不同的链接。
我创建了一个包含以下内容的 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