myo*_*erg 8 python setuptools setup.py python-packaging
当你有一个setup.py文件时,你可以通过以下命令获取包的名称:
C:\some\dir>python setup.py --name
Run Code Online (Sandbox Code Playgroud)
这会将包的名称打印到命令行。
为了遵循最佳实践,我试图setup.py通过将所有内容放入其中来迁移setup.cfg,因为以前的所有内容setup.py都是静态内容。
但我们的构建管道依赖于能够调用python setup.py --name. 我希望以不需要创建setup.py文件的方式重写管道。
setup.cfg当您有文件但没有文件时,有没有办法获取包的名称setup.py?
TL;DR,使用 setuptools 配置 API https://setuptools.pypa.io/en/latest/setuptools.html#configuration-api。
\n在您的情况下,这一行将给出包的名称:
\npython -c \'from setuptools.config import read_configuration as c; print(c("setup.cfg")["metadata"]["name"])\'\nRun Code Online (Sandbox Code Playgroud)\n编辑:
\n在 setuptools v61.0.0(2022 年 3 月 24 日)中setuptools.config.read_configuration已弃用。使用新的 API,命令变为:
python -c \'from setuptools.config.setupcfg import read_configuration as c; print(c("setup.cfg")["metadata"]["name"])\'\nRun Code Online (Sandbox Code Playgroud)\n解释:
\nsetuptools 公开了一个read_configuration()用于解析配置的元数据和选项部分的函数。在内部,setuptools 使用该configparser模块来解析配置文件setup.cfg。对于简单str类型的数据,例如“name”键,可以使用configparser来读取数据。但是,setuptools 还允许使用无法使用 configparser 直接解析的指令进行动态配置。
下面的示例显示了两种替换方法之间的差异python setup.py --version:
$ tree .\n.\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 my_package\n\xe2\x94\x82\xc2\xa0\xc2\xa0 \xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 __init__.py\n\xe2\x94\x9c\xe2\x94\x80\xe2\x94\x80 pyproject.toml\n\xe2\x94\x94\xe2\x94\x80\xe2\x94\x80 setup.cfg\n\n1 directory, 3 files\n\n$ cat setup.cfg\n[metadata]\nname = my_package\nversion = attr:my_package.__version__\n\n[options]\npackages = find:\n\n$ cat my_package/__init__.py \n__version__ = "1.0.0"\n\n$ cat pyproject.toml\n\n$ python -c \'from setuptools.config import read_configuration as c; print(c("setup.cfg")["metadata"]["version"])\'\n1.0.0\n\n$ python -c \'from configparser import ConfigParser; c = ConfigParser(); c.read("setup.cfg"); print(c["metadata"]["version"])\'\nattr:my_package.__version__\n\nRun Code Online (Sandbox Code Playgroud)\n
也许使用ConfigParser Python 模块?
python -c "from configparser import ConfigParser; cf = ConfigParser(); cf.read('setup.cfg'); print(cf['metadata']['name'])"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3097 次 |
| 最近记录: |