我很难配置正确的cfg和toml文件....我只是想了解这些,我来自Java背景,从我的研究中没有什么清楚的。
1.简单的python项目会将第一个文件夹/包作为名称...如果我称它为SQLAlchemy,它会覆盖pip上的真实的SQLAlchemy作为基名称...
- 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)可以用一个简单的包名来覆盖?我很困惑
1条答案
按热度按时间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库”,不管那是什么意思。