Python .toml 和 .cfg 废话?

问题描述 投票:0回答:1

我很难配置正确的 cfg 和 toml 文件...... 我只是想了解这些,我来自 Java 背景,我的研究没有明确的内容。

  1. 为什么命名空间这么糟糕?简单的 python 项目将采用第一个文件夹/包作为名称...如果我将其称为 SQLAlchemy,它将覆盖 pip 上真正的 SQLAlchemy 作为基本名称...

  2. .cfg 文件有什么用?如果我有一堆包,每个包中应该有一个 .cfg,而不是全局包,因为它只保留一个包的“版本”,并且有一个“包目录搜索和查找”选项...

  3. .cfg 没用,我有这个项目:

    ZeProject
    |
    | -- src
    |    | - Whatever
    |       | - Package1
    |       |   | - somefiles.py
    |       | - Package2
    |       |   | - somefiles.py

所以这应该是 2 个模块,对吗?那么为什么我的一个版本只有 1 个 cfg 文件呢? 虽然我有项目版本的 toml 吗? 命名空间都不被考虑...

让我们看看,这是我的 .toml :

[build-system]
requires = ["setuptools"]
build-backend = "setuptools.build_meta"

[project]
name = "stfulama"
version = "4"

这是我的.cfg :

[metadata]
version = 666

[options]
package-dir = 
    = src
namespace_packages = wow

[options.packages.find]
where = youwant

它可以通过 pip install 完美安装,项目名称为“stfulama”,版本为 4...没有考虑 .cfg 的任何内容,从我写的愚蠢的东西来看,我可以导入另一个项目:从任何导入.package1 或其他.package2

谁能解释一下这些的用途吗?为什么没有命名空间 as se ?为什么 python 库(pip)可以用简单的包名称覆盖?我好困惑

python package configuration-files toml
1个回答
0
投票

为什么命名空间这么糟糕?

包命名空间是社区决定,有优点也有缺点。 python 社区在很大程度上倾向于不这样做,部分是出于社会原因,部分是出于技术原因:该语言历史上不支持“命名空间包”,并且它们不容易实现,并且因为它们是可选的很容易搞砸。因此,只有特定的多项目组织才会使用命名空间来将所有内容放在一起。

PEP 420对此进行了改进,但习惯仍然存在,“无用的命名空间”的想法也依然存在。

这并不像调用你的包org.sqlalchemy会阻止其他人调用他们的包org.sqlalchemy。包 registry 可能会这样做,但裸露的

sqlalchemy
也会发生同样的情况。

.cfg 文件有什么用?

setup.cfg
用于执行
setuptools
的声明性配置。从字面上看,谷歌上的第二次点击产生了https://setuptools.pypa.io/en/latest/userguide/declarative_config.html

它早于 pyproject.toml,因此两者之间存在冗余,主要是

[metadata]
setup.cfg
表和 [project]
pyproject.toml
 表都是表达 package 的声明性方式元数据

所以这应该是 2 个模块,对吗?

这是一包。

那么为什么我的一个版本只有 1 个 cfg 文件?

因为是一包。

它可以通过 pip install 完美安装,项目名称为“stfulama”,版本为 4...不考虑 .cfg 的任何内容

尝试删除 setup.cfg 并看看会发生什么。

为什么 python 库(pip)可以用简单的包名称覆盖?

我不知道这意味着什么。而且 pip 也不是“python 库”,无论这意味着什么。

© www.soinside.com 2019 - 2024. All rights reserved.