【问题标题】:Bash script get version from setup.py or from PKG-INFO file and export as environment variableBash 脚本从 setup.py 或 PKG-INFO 文件中获取版本并导出为环境变量
【发布时间】: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解决方案stackoverflow.com/questions/2058802/…,您可以在上一步中使用它并在工作序列的下一步中获得答案。

标签: python bash awk sed github-actions


【解决方案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 变量为exported,以便脚本运行的后续命令将在其环境中接收它。
  • 如果命令以非零退出状态退出,则会将诊断信息打印到标准错误流中

【讨论】:

    【解决方案2】:

    虽然比我容易:

    VERSION=$(python setup.py --version)
    echo $VERSION
    

    同样的方法也可以得到模块名:

    MODULE_NAME=$(python setup.py --name)
    echo $MODULE_NAME
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-10-26
      • 1970-01-01
      • 2015-07-24
      • 2017-12-25
      • 1970-01-01
      • 2021-07-11
      • 2022-01-17
      相关资源
      最近更新 更多