我很难配置正确的 cfg 和 toml 文件...... 我只是想了解这些,我来自 Java 背景,我的研究没有明确的内容。
为什么命名空间这么糟糕?简单的 python 项目将采用第一个文件夹/包作为名称...如果我将其称为 SQLAlchemy,它将覆盖 pip 上真正的 SQLAlchemy 作为基本名称...
.cfg 文件有什么用?如果我有一堆包,每个包中应该有一个 .cfg,而不是全局包,因为它只保留一个包的“版本”,并且有一个“包目录搜索和查找”选项...
.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 社区在很大程度上倾向于不这样做,部分是出于社会原因,部分是出于技术原因:该语言历史上不支持“命名空间包”,并且它们不容易实现,并且因为它们是可选的很容易搞砸。因此,只有特定的多项目组织才会使用命名空间来将所有内容放在一起。
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 库”,无论这意味着什么。