Bash 脚本从 setup.py 或 PKG-INFO 文件中获取版本并导出为环境变量
Posted
技术标签:
【中文标题】Bash 脚本从 setup.py 或 PKG-INFO 文件中获取版本并导出为环境变量【英文标题】:Bash script get version from setup.py or from PKG-INFO file and export as environment variable 【发布时间】:2021-10-20 07:06:00 【问题描述】:我需要使用 bash 从 setup.py 或 PKG-INFO 获取版本值,并使用版本值提取环境变量以供以后使用。 (其实我需要 GitHub Action 的版本值)
from setuptools import setup, find_packages
with open("README.md", "r") as fh:
long_description = fh.read()
setup(
name="helloworld",
version="0.0.3",
author="John",
author_email="john@gmail.com",
url="https://github.com/google/helloworld",
description="Hello World!",
long_description=long_description,
long_description_content_type="text/markdown",
packages=find_packages(),
classifiers=[
"Programming Language :: Python :: 3",
"License :: OSI Approved :: MIT License",
"Operating System :: OS Independent",
],
install_requires=["click"],
python_requires='>=3.6',
py_modules=["helloworld"],
entry_points="console_scripts": ["helloworld = src.main:main"],
)
PKG-信息:
Metadata-Version: 2.1
Name: helloworld
Version: 0.0.3
Summary: Hello World!
Home-page: https://github.com/google/helloworld
Author: John
Author-email: john@gmail.com
License: UNKNOWN
Platform: UNKNOWN
Classifier: Programming Language :: Python :: 3
Classifier: License :: OSI Approved :: MIT License
Classifier: Operating System :: OS Independent
Requires-Python: >=3.6
Description-Content-Type: text/markdown
# helloworld
Hello World Python
...
【问题讨论】:
你试过什么?这可能是重复的。 你为什么不使用 github 脚本而不是 bash,因为你提到你的包是独立于操作系统的,你需要一个 POSIX 解决方案。这里还描述了python解决方案***.com/questions/2058802/…,您可以在上一步中使用它并在工作序列的下一步中获得答案。 【参考方案1】:我需要使用 bash 从 setup.py 或 PKG-INFO 获取版本值,并使用版本值提取环境变量以供以后使用。
从PKG-INFO
获取所需数据可能比从setup.py
更容易。假设只有一个Version:
条目,您可以使用sed
:
the_version=$(sed -n 's/^Version: *//p' PKG-INFO) ||
echo 'no version found' 1>&2
export the_version
解释:
sed
的 -n
选项禁止在每个循环结束时打印当前行的默认行为。
s
命令从任何以它开头的行中删除Version:
标签。 p
后缀会导致(仅)为实际执行替换的行打印替换结果。
sed
命令周围的$()
构造捕获并扩展为该命令的标准输出,这将是Version:
行的尾部。然后将其分配给 shell 变量 the_version
。
如果sed
以非零退出状态终止,则执行echo
命令以打印诊断信息,该诊断信息被重定向到标准错误而不是标准输出
shell 变量为export
ed,以便脚本运行的后续命令将在其环境中接收它。
如果命令以非零退出状态退出,则会将诊断信息打印到标准错误流中
【讨论】:
【参考方案2】:虽然比我容易:
VERSION=$(python setup.py --version)
echo $VERSION
同样的方法也可以得到模块名:
MODULE_NAME=$(python setup.py --name)
echo $MODULE_NAME
【讨论】:
以上是关于Bash 脚本从 setup.py 或 PKG-INFO 文件中获取版本并导出为环境变量的主要内容,如果未能解决你的问题,请参考以下文章
distutils:如何将用户定义的参数传递给 setup.py?
我的setup.py在python 3.8.1中安装所有依赖项有什么问题