Python .toml和.cfg的废话?

ss2ws0br  于 2022-11-27  发布在  Python
关注(0)|答案(1)|浏览(177)

我很难配置正确的cfg和toml文件....我只是想了解这些,我来自Java背景,从我的研究中没有什么清楚的。
1.简单的python项目会将第一个文件夹/包作为名称...如果我称它为SQLAlchemy,它会覆盖pip上的真实的SQLAlchemy作为基名称...

  1. cfg文件有什么用?如果我有一堆软件包,它应该是一个.cfg在每个,而不是一个全局的,因为它只保留一个软件包的“版本”,并有一个“包目录搜索和查找”选项...
    1..cfg是无用的看,我有这个项目:
ZeProject
    |
    | -- src
    |    | - Whatever
    |       | - Package1
    |       |   | - somefiles.py
    |       | - Package2
    |       |   | - somefiles.py

所以这应该是2个模块,对吗?那么为什么我只有一个版本的cfg文件?而我有一个项目版本的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安装,与项目名称'stfulama',和版本4...没有考虑.cfg,从我写的愚蠢的东西,我可以导入到另一个项目:从文件包1或文件包2导入
谁能解释一下这些的用法?为什么没有se这样的命名空间?为什么python库(pip)可以用一个简单的包名来覆盖?我很困惑

pbwdgjma

pbwdgjma1#

为什么命名空间如此糟糕?
包命名空间是一个有优点也有缺点的社区决策。Python社区已经很大程度上倾向于不这样做,部分是因为社会原因,部分是因为技术原因:这种语言在历史上不支持“命名空间包,”它们不容易实现,而且由于它们是选择性加入的,因此很容易搞砸。因此,只有特定的多项目组织才会使用命名空间,以便将它们的所有东西放在一起。
PEP 420在此基础上进行了改进,但这个习惯仍然存在,“无用的名称空间”的想法也是如此。
这不像调用你的包org.sqlalchemy阻止别人调用 * 他们的 * 包org.sqlalchemy。包 registry 可能会这样做,但同样的情况也会发生在一个空的sqlalchemy上。
.cfg文件的用途是什么?
setup.cfg用于执行setuptools的声明性配置。
它早于pyproject.toml,因此两者之间存在冗余,主要是因为setup.cfg[metadata]表和pyproject.toml[project]表都是表示package metadata的声明性方式。
所以这应该是2个模块,对吗?
这是一个包裹。
那么,为什么我只有一个版本的cfg文件?
因为这是一个包裹。
它可以完美地安装pip install,项目名为'stfulama',版本为4....cfg文件中没有任何内容被考虑在内
尝试删除setup.cfg并查看会发生什么情况。
为什么python库(pip)可以用一个简单的包名覆盖呢?
我不知道那是什么意思。而且pip也不是“python库”,不管那是什么意思。

相关问题