簡體   English   中英

Python.toml 和.cfg 胡說八道?

[英]Python .toml and .cfg nonsense?

我很難配置正確的 cfg 和 toml 文件....我只想了解這些,我來自 Java 背景,但我的研究並不清楚。

  1. 為什么名稱空間如此糟糕? 簡單的 python 項目會將第一個文件夾 / package 作為名稱...如果我將其命名為 SQLAlchemy 它將覆蓋 pip 上的真實 SQLAlchemy 作為基本名稱...

  2. .cfg文件有什么用? 如果我有一堆包,每個包都應該是 a.cfg,而不是全局包,因為它只保留一個 package 的“版本”,並且有一個“包目錄搜索和查找”選項......

  3. .cfg 看起來沒用,我有這個項目:

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

所以這應該是 2 個模塊,對嗎? 那么,為什么我的一個版本只有 1 個 cfg 文件? 雖然我有項目版本的 toml? 既不考慮名稱空間...

讓我們看看,這是 my.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,從我寫的愚蠢的東西,我可以導入另一個項目:從任何導入。 package1 或 whatever.package2

誰能解釋一下這些的用途? 為什么沒有名稱空間作為 se? 為什么 python 庫 (pip) 可以用簡單的 package 名稱覆蓋? 我感到很困惑

為什么名稱空間如此糟糕?

Package 命名空間是一個社區決定,有優點也有缺點。 python 社區在很大程度上站在不這樣做的一邊,部分是出於社會原因,部分是出於技術原因:該語言歷史上不支持“命名空間包”並且它們不容易實現,並且由於它們是可選的 -很容易搞砸。 所以只有特定的多項目組織才會使用命名空間來將他們的所有東西放在一起。

PEP 420對此進行了改進,但習慣仍然存在,“無用名稱空間”的想法也是如此。

調用您的 package org.sqlalchemy 不會阻止其他人調用他們的package org.sqlalchemy。 package注冊表可能會這樣做,但對於裸sqlalchemy也會發生同樣的情況。

.cfg文件有什么用?

setup.cfg用於執行setuptools的聲明式配置。 從字面上看,第二次點擊谷歌產量https://setuptools.pypa.io/en/latest/userguide/declarative_config.html

它早於 pyproject.toml,因此兩者之間存在冗余,主要在於 setup.cfg 的[metadata]表和setup.cfg[project]表都是表達pyproject.toml 元數據的聲明方式。

所以這應該是 2 個模塊,對嗎?

這是一個 package。

那么,為什么我的一個版本只有 1 個 cfg 文件?

因為它是一個 package。

它與 pip 安裝完美安裝,項目名稱為“stfulama”,版本 4 ...沒有考慮 .cfg

嘗試刪除 setup.cfg,看看會發生什么。

為什么 python 庫 (pip) 可以用簡單的 package 名稱覆蓋?

我不知道那是什么意思。 並且 pip 不是“python 庫”,也不是什么意思。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM