è¿ç¯æç« å°ä¼ä»ç» PDM ç lock çç¥ï¼åºäºå½åææ°çæ¬ 2.13ãè±æçç± LLM è¾ å©ç¿»è¯ã
PDM æ¯å¦ä½è§£æä¾èµçï¼
PDM åºå±æ¯ç¨çä¸ä¸ªçº¯ Python å®ç°ç PubGrub 解æç®æ³ï¼Resolvelibãè¥ç¨éä¿çè¯è¨è§£éï¼å®ç解æè¿ç¨å¤§è´å¦ä¸ï¼
- éæ©ä¸ä¸ªæªè§£æçä¾èµï¼è·åå®çææçæ¬çå表
- ä»ææ°çæ¬å¼å§å°è¯ï¼è·åè¿ä¸ªçæ¬çä¾èµ
- æ£æ¥è¿ä¸ªçæ¬çä¾èµä¸å·²è§£æçä¾èµæ¯å¦æå²çª
- è¥æå²çªï¼å°è¯ä¸ä¸ä¸ªçæ¬
- è¥æ å²çªï¼å°è¿ä¸ªä¾èµççæ¬å å ¥ç»æä¸
- è¥å°è¯è¿ææçæ¬é½æ æ³è§£æï¼å溯å°ä¸ä¸ªç¡®å®ç»æçä¾èµï¼å°è¯ä¸ä¸ä¸ªçæ¬
- æç»ææä¾èµé½è§£æå®æï¼å¾å°ä¸ä¸ªæ»¡è¶³ææä¾èµççæ¬å表
解æå®æ以åï¼PDM å°±ä¼å°ç»æåå° pdm.lock
æ件ä¸ï¼è¿ä¸ªæ件é¤äºå
å«ææä¾èµççæ¬ä¿¡æ¯ï¼è¿å
å«äºä¸äºå
¶ä»å
æ°æ®ã
æ¡ä»¶ä¾èµ
ææ¶æ们éè¦æ ¹æ®ä¸åçæ¡ä»¶å®è£ ä¸åçå çæ¬ï¼è¿ä¼å©ç¨ Markerï¼ä¾å¦ï¼
pytest >= 7.0; python_version >= "3.6"
pytest < 7.0; python_version < "3.6"
ä½æ¯ PDM ç°å¨ææ¶ä¸æ¯æ解æè¿ç§æ¡ä»¶ä¾èµï¼åå æ¯ PDM çä¾èµè§£æå¨å®ç°ä¼æå åä½ä¸ºè§£éä¸ç keyï¼æ¢å¥è¯è¯´ï¼æ¯ä¸ªå å¨è§£éä¸æä¸åªæä¸ä¸ªç¡®å®ççæ¬ãä¸å¾ä¸æ¿è®¤ï¼è¿ç¡®å®æ¯ PDM çä¸å¤§ç¼ºé·ï¼æ¬¢è¿å¤§å®¶è´¡ç®ä»£ç æ¥è§£å³è¿ä¸ªé®é¢ã
Lock æ件çå æ°æ®
pdm.lock
æ件æ¯ä¸ä¸ª TOML æ ¼å¼çæ件ï¼å¨å®ç [metadata]
表ä¸å
å«äºä¸äºå
æ°æ®ï¼å
æ¬ï¼
[metadata]
groups = [
"default",
"all",
"doc",
"pytest",
"test",
"tox",
"workflow"
]
strategy = [
"cross_platform",
"inherit_metadata"
]
lock_version = "4.4.1"
content_hash = "sha256:13270582f610302a77a5e1fef2192e1a65f5b6202cf15aedf12bf799de8de45c"
lock_version
è¿æ¯ä¸ä¸ªä¸ä½ççæ¬å·ï¼æ æè¿ä¸ª lock æ件çå ¼å®¹æ åµã第ä¸ä½è¡¨ç¤ºååä¸å ¼å®¹çæ¹å¨ï¼ç¬¬äºä½è¡¨ç¤ºååå ¼å®¹ä½ååä¸å ¼å®¹çæ¹å¨ï¼ç¬¬ä¸ä½è¡¨ç¤ºååååé½å ¼å®¹çæ¹å¨ã
æ¯å¦è¯´ï¼åå¦å½å lock æ件ççæ¬æ¯ 4.4.2ï¼é£ä¹ï¼
- æ¯æ读åççæ¬æï¼
4.3.0
,4.4.0
,4.4.3
- ä¸è½è¯»åççæ¬æï¼
5.1.0
,3.0.0
æ¯å½æ´æ° lock æ件æ¶ï¼PDM ä¼æå½åç lock çæ¬åå ¥æ件ä¸ãéè¿è¿ä¸ªçæ¬å·ï¼PDM å°±å¯ä»¥å³å®æ¯å¦åºè¯¥å°è¯è¯»åè¿ä¸ª lock æ件ï¼ææ¯æ示ç¨æ·éæ°çæ lock æ件ã
groups
è®°å½äºè¿ä¸ª lock æ件æ¯ä»åªäºä¾èµåç»çæçï¼å表ä¸çæ¯ä¸ªå¼é½å¯¹åºäº pyproject.toml
ä¸ optional-dependencies
æ dev-dependencies
çä¸ä¸ªåç»ã å½ä¾èµè§£æå®ææ¶ï¼è¿äºåç»å°±ä¼è¢«è®°å½å¨ lock æ件ä¸ï¼å®è£
æ¶ï¼PDM ä¼æ£æ¥ä½ è¦æ±å®è£
çåç»æ¯å¦å
å«å
¶ä¸ã
content_hash
å 为 lock æ件对åºäºä¸ç»åå§è¾å
¥ï¼å³ä»åªäºä¾èµè§£æçæãå¨ PDM ä¸ï¼è¿ä¸ªè¾å
¥å°±æ¯ pyproject.toml
ä¸åçä¾èµä¿¡æ¯ï¼content_hash
å°±æ¯ä»è¿äºå
容计ç®åºæ¥çä¸ä¸ª sha256 å¼ï¼å½ä½ ç pyproject.toml
åçååï¼PDM å°±ä¼éæ°è®¡ç®è¿ä¸ªå¼ï¼å¦æåç°ä¸ lock æ件ä¸çå¼ä¸ä¸è´ï¼å°±ä¼ä¸ºä½ æ´æ° lock æ件ï¼å¹¶ææ°ç content_hash
åå
¥å
¶ä¸ã
Lock çç¥
[metadata]
表ä¸ç strategy
å段就记å½äºå½å lock æ件ççç¥ï¼ç¨æ¥æ§å¶ä¾èµè§£æçè¿ç¨ã
cross_platform
é»è®¤å¯ç¨ï¼PDM ä¼å°ææå¹³å°çæ件é½åå ¥ Lock æ件ä¸ï¼è¯¦è§ä¸ç¯æç« ãä½ææ¶æ们ä¸å¾ä¸ä½¿ç¨å½åç¯å¢ç Lockï¼ä¸å¤§åå æ¯æäºå å¨ä¸åå¹³å°åå¸çå æçå®æä¸åçä¾èµå表ï¼è¿æ ·ä¼ä½¿å¾è·¨å¹³å°é产çé误çç»æãå¨ PDM ä¸ï¼å¦æè¦ç¦ç¨ä¸ä¸ª Lock çç¥ï¼åªéè¦ï¼
pdm lock --strategy=no_cross_platform
è¿æ¡å½ä»¤ä¼åæ¶ cross_platform
çç¥ï¼å·²ä½¿ç¨çå
¶ä»çç¥ä¸ä¼è¢«å½±åã
static_urls
é»è®¤æ
åµä¸ï¼[[package]]
ç files
å段ä¸åªä¼è®°å½å
æ件çæ件åï¼èä¸å
å« URLãè¿æ ·åç好å¤æ¯ç¨æ·å¯ä»¥èªç±åæ¢å°å
¶ä» PyPI çéåæºï¼PDM å®è£
æ¶åªä¼æ£æ¥ä¸è½½çæ件åå
å«å¨ Lock æ件ä¸ãèå¦æå¯ç¨äº static_urls
çç¥ï¼PDM ä¼è®°å½å
æ件ç URLï¼å®è£
æ¶å°±ä¼ç´æ¥éè¿è¿äº URL ä¸è½½å®è£
å
ãè¿æ ·ä¹å¯ä»¥æ¹ä¾¿ä¸äºå®å
¨å®¡è®¡å·¥å
·æ£æ¥å
çæ¥æºã
inherit_metadata
é»è®¤å¯ç¨ï¼PDM ä¼å°è¯ä¸ºæ¯ä¸ªå
计ç®å®çæç» Markerï¼è¯¦è§ ä¸ç¯æç« ï¼ãè¿æ ·ç好å¤æ¯ï¼å®è£
æ¶ PDM åªéè¦ pdm.lock
è¿ä¸ä¸ªæ°æ®æ¥æºï¼å¹¶ä¸éå lock æ件åæ±å¼ Markers è¿ä¸ªè¿ç¨ä½¿ç¨ Python æ ååº1å°±å¯ä»¥å®æï¼ä¸éè¦ä¾èµ PDM çå
¶ä»ç»ä»¶ãå¦æç¦ç¨è¿ä¸ªçç¥ï¼Marker å°ä¸ä¼è®°å½å¨å
ä¸ï¼è¿æ · lock æ件ä¸è®°å½çä¿¡æ¯å°±ä¸è¶³ä»¥è®©å®è£
å¨å³å®æ¯å¦å®è£
è¿ä¸ªå
ï¼å®è£
è¿ç¨ä¼æäºè®¸ååãPDM ä¼éè¿è¦æ±å®è£
åä¾èµå表ï¼å Lock æ件ä¸çä¾èµä¿¡æ¯ï¼è¿è¡ä¸æ¬¡ä¾èµè§£æè¿ç¨ï¼æ¥åå¾æç»éè¦å®è£
çå
çæ¬çå表ã
direct_minimal_versions
é»è®¤æ åµä¸ï¼è§£æä¾èµæ¶ä¼ä»ææ°çæ¬å¼å§å°è¯ï¼è¿æ ·å¾å°ç lock ç»æé常å å«äºå°½å¯è½æ°çå çæ¬ãä½ææ¶ä¸ºäºæµè¯åºçå ¼å®¹æ§ï¼æ们ä¼å¸æçå°å®æ¯å¦è½å¨æå®çæå°ä¾èµçæ¬ä¸å·¥ä½ãå¯ç¨è¿ä¸ªçç¥åï¼PDM ä¼å°è¯ä»æå°çæ¬å¼å§è§£æä¾èµï¼å¾å°ç lock æ件ä¸ççæ¬å·å°±æ¯æå°çæ¬çä¾èµã
--exclude-newer DATE
é¤äºä¸è¿°çç¥ä¹å¤ï¼PDM lock è¿æ¯æä¸ä¸ªä¸æ¬¡æ§é项 --exclude-newer
ãè¿ä¸ªé项çä½ç¨æç¹ç±»ä¼¼äºæ¶å
æºï¼å½æå®äºä¸ä¸ªæ¶é´ææ¥æä¹åï¼PDM 解æä¾èµæ¶ä¼è·³è¿é£äºæäºè¿ä¸ªæ¶é´ç¹ä¸ä¼ çå
çæ¬ã使ç¨è¿ä¸ªé项å¯ä»¥è®© lock æ件æ¯å¯å¤ç°çãéè¦æ³¨æçæ¯ï¼å
çä¸ä¼ æ¶é´éè¦ PyPI æºçæ¯æï¼å®å¿
é¡»å®ç°äº PEP 700ï¼å¦åï¼è¿ä¸ªå
ä¼è¢«è®¤ä¸ºä¸æ»¡è¶³æ¡ä»¶å¹¶ä¼è¢«å¿½ç¥ã
æ´æ°çç¥
å¨ä½ å°è¯æ´æ° lock æ件ä¸çå
çæ¬æ¶ï¼PDM ä¹æä¾äºä¸åçæ´æ°çç¥ï¼è¿äºçç¥å¯ä»¥éè¿ --update-*
é项æ¥æå®ï¼pdm add
ï¼pdm lock
ï¼pdm update
åæ¯æè¿ç»é项ã
--update-all
ï¼æ´æ°ææå ï¼ç´æ¥ä¾èµ+é´æ¥ä¾èµï¼å°ææ°çæ¬ï¼ä¹å°±æ¯å®å ¨å¿½ç¥ lock æ件ä¸ççæ¬ä¿¡æ¯--update-reuse
ï¼åªæ´æ°ç´æ¥ä¾èµççæ¬ï¼å¤ç¨ lock æ件ä¸çé´æ¥ä¾èµçæ¬--update-eager
ï¼æ´æ°æå®ä¾èµåå ¶é´æ¥ä¾èµå°ææ°çæ¬ï¼å¤ç¨ lock æ件ä¸çå ¶ä»ä¾èµçæ¬--update-reuse-installed
ï¼ å°½å¯è½å¤ç¨å½åå·²å®è£ ççæ¬
æ´æ°ä¾èµçæ¬æ¶ï¼ä»ç¶ä¼å°é pyproject.toml
ä¸æå®ççæ¬èå´ï¼è¿ä¸ªè¡ä¸ºå¯ä»¥éè¿ --unconstrained
é项å
³éï¼å³åæ¶çæ¬èå´çéå¶ã
å°æ¤ä¸ºæ¢ï¼æ们ä»ç»äºå´ç» PDM ç lock æ件çä¸ç³»ååè½åèåçé»è¾ï¼å¸æè¿äºä¿¡æ¯è½å¸®å©ä½ æ´å¥½å°ç解 PDM çå·¥ä½åçã