日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問(wèn)題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
Python包管理工具之 PDM

前言

大家好,我是小姜。之前講了一個(gè)pipenv和poetry包管理工具,想必大家也和我一樣去了解過(guò)pipenv所存在問(wèn)題,所以不是很推薦使用。后來(lái)改成了poetry工具,但這個(gè)東西對(duì)我來(lái)說(shuō)稍微有點(diǎn)麻煩,經(jīng)常容易打錯(cuò),雖然可以做成alias的形式。那么今天我給大家推薦一個(gè)叫PDM的工具,全稱:Python Development Master。它也是非常好用,有興趣的朋友可以使用一下。

安裝使用PDM

# macos安裝pipx
brew install pipx
pipx ensurepath

# Linux安裝pipx
python3 -m pip install pipx
python3 -m pipx ensurepath

用pipx安裝pdm

PDM 只有 Python 3.7+ 的版本才能使用,使用其他的方法安裝,要先保證你的 Python 版本,但使用 pipx 則不需要你去操心。一定要注意安裝pipx的版本以及pipx安裝pdm時(shí)使用的Python版本,否則 pdm init 會(huì)失敗

pipx install pdm
pipx list

配置 pdm 自動(dòng)補(bǔ)全

# zsh方法
mkdir $ZSH_CUSTOM/plugins/pdm
pdm completion zsh > $ZSH_CUSTOM/plugins/pdm/_pdm

vim ~/.zshrc
plugins=(
pdm
poetry
git
zsh-completions
zsh-autosuggestions
)

source ~/.zshrc

pdm info

PDM初始化項(xiàng)目

執(zhí)行 pdm init 就會(huì)開始初始化,初始化的時(shí)候,會(huì)讓你選擇項(xiàng)目的一些信息:

  • 是否要上傳 PyPI
  • 依賴的 Python 版本
  • License 類型
  • 作者信息
  • 郵箱信息 在初始化項(xiàng)目時(shí)會(huì)把機(jī)器上的所有 Python 版本都掃描出來(lái)了,會(huì)讓選擇項(xiàng)目的 Python 版本。
 mkdir pdm-demo
cd pdm-demo
# 重新執(zhí)行pdm成功
pdm init
Creating a pyproject.toml for PDM...
Please enter the Python interpreter to use
0. /Users/allenjol/.pyenv/versions/3.10.4/bin/python3 (3.10)
1. /Users/allenjol/.pyenv/versions/3.10.4/bin/python (3.10)
2. /Users/allenjol/.pyenv/versions/3.10.4/bin/python3.10 (3.10)
3. /Users/allenjol/.pyenv/versions/3.10.4/bin/python3.10 (3.10)
4. /Users/allenjol/.pyenv/versions/3.10.4/bin/python3 (3.10)
5. /Users/allenjol/.pyenv/versions/3.10.4/bin/python (3.10)
6. /Library/Frameworks/Python.framework/Versions/Current/bin/python3.10 (3.10)
7. /Library/Developer/CommandLineTools/usr/bin/python3 (3.8)
8. /Users/allenjol/.local/pipx/venvs/pdm/bin/python (3.10)
Please select: [0]: 8
Using Python interpreter: /Users/allenjol/.local/pipx/venvs/pdm/bin/python (3.10)
Is the project a library that will be uploaded to PyPI? [y/N]: N
License(SPDX name) [MIT]:
Author name [allen_jol]:
Author email [471733951@qq.com]:
Python requires('*' to allow any) [>=3.10]:
Changes are written to pyproject.toml.

# 完成之后,PDM 會(huì)將你的選擇以 toml 格式寫入 pyproject.toml 配置文件中。
ll
total 8
-rw-r--r-- 1 allenjol staff 283 May 20 13:58 pyproject.toml


cat pyproject.toml
[project]
name = ""
version = ""
description = ""
authors = [
{name = "allen_jol", email = "471733951@qq.com"},
]
dependencies = []
requires-python = ">=3.10"
license = {text = "MIT"}

[tool.pdm]

[build-system]
requires = ["pdm-pep517>=0.12.0"]
build-backend = "pdm.pep517.api"

PDM 常用命令

# 安裝包
pdm add requests

# 查看包
pdm list

# 以樹狀形式查看
pdm list --graph

# 查看包的詳情
pdm show requests

# 刪除包
pdm remove requests

# 項(xiàng)目配置(不加任何參數(shù),可以打印出該項(xiàng)目的環(huán)境配置)
pdm config

# 修改pypi源
pdm config pypi.url http://mirrors.aliyun.com/pypi/simple
pdm config pypi.url

運(yùn)行命令

要在 pdm 的環(huán)境中執(zhí)行命令或者項(xiàng)目,可以使用 run 命令,若是執(zhí)行項(xiàng)目時(shí),有諸多參數(shù),可以在 pyproject.toml 配置命令別名

$ cat main.py
print('Hello, pdm')

$ pdm run python main.py
hello, pdm

查看環(huán)境

pdm info -v
pdm info --env
pdm info --packages
pdm info --where
pdm info --python

更新包

# 更新所有包
pdm update

# 更新某個(gè)包
pdm update

復(fù)雜的場(chǎng)景,pdm 也都為你考慮到了,它提供了很多選項(xiàng),可以根據(jù)需要使用

  • --save-compatible:項(xiàng)目依賴可兼容的版本
  • --save-wildcard:保存通配符版本(暫不明白)
  • --save-exact:保存有指定確切版本的包
  • --save-minimum:保持最小版本的包
  • --update-reuse:盡量只更新命令行中指定的包,其依賴包能不更新則不更新
  • --update-eager:更新某個(gè)包順帶更新其依賴包(遞歸升級(jí))
  • --prerelease:允許提前釋放(暫不明白)
  • --unconstrained:忽略包版本的約束,可將包升級(jí)至最新版本
  • --top:僅更新有在 pyproject.toml 的包
  • --dry-run:試運(yùn)行,而不去修改 lock 文件
  • --no-sync:只更新 lock 文件,但不更新包

如果你的依賴包有設(shè)置分組,還可以指定分組進(jìn)行更新

pdm update -G security -G http

也可以指定分組更新分組里的某個(gè)包

pdm update -G security cryptography

加個(gè) -d 就可以再指定 dev 依賴

# 更新所有的 dev 依賴
pdm update -d

# 更新 dev 依賴下某個(gè)分組的某個(gè)包
pdm update -dG test pytest

也可以指定 --prod 或者 --production 升級(jí)非 dev (即生產(chǎn))的包。

切換Python版本

當(dāng)你在初始化 pdm 項(xiàng)目時(shí),就已經(jīng)選定了當(dāng)前的 Python 版本和可用的 Python 版本范圍,后面如果想更改,可以使用 use 命令,但版本要受之前設(shè)定的版本范圍約束。假設(shè)允許范圍是 python 3.9+,當(dāng)前使用的是 python 3.10,可以直接切換過(guò)去。

pdm use python3.9

命令別名

在 pyproject.toml 添加 [tool.pdm.scripts] 可以設(shè)置快捷命令別名,若項(xiàng)目的執(zhí)行有非常多的參數(shù),這種設(shè)定別名的方法將很有用。

$ tail -n 2 pyproject.toml
[tool.pdm.scripts]
start = 'python main.py'

$ pdm run start
Running cmd script: ['python', 'main.py']
Hello, pdm

[tool.pdm.scripts] 有兩種形式

# 第一種
[tool.pdm.scripts]
start = "python main.py"

# 第二種
[tool.pdm.scripts]
start = {cmd = "python main.py"}

若想在參數(shù)中加注釋,就必須得使用第二種方法,例如這樣

[tool.pdm.scripts]
start = {cmd = [
"flask",
"run",
# Important comment here about always using port 54321
"-p", "54321"
]}

除了 cmd 之外,還有兩個(gè)參數(shù) 一個(gè)是 shell 參數(shù),從輸出來(lái)看你應(yīng)該和看出和 cmd 的區(qū)別,和 subprocess.Popen() with shell=True 差不多一個(gè)意思

$ tail -n 2 pyproject.toml
[tool.pdm.scripts]
start = {shell = "python main.py"}

$ pdm run start
Running cmd script: python main.py
Hello, pdm

一個(gè)是 env_file 參數(shù),可以指定配置環(huán)境變量的文件

[tool.pdm.scripts]
start.cmd = "flask run -p 54321"
start.env_file = ".env"

如果想要把這個(gè)環(huán)境變量的文件不僅限于某個(gè)命令,而是 pdm run 全局,可以這樣配置

[tool.pdm.scripts]
_.env_file = ".env"

方案兼容

其他方案遷移到pdm

pdm 足夠好用,也足夠開放,如果你當(dāng)前使用的是其他的包管理器,比如 pipenv ,poetry,或者還在用最原始的 requirements.txt ,你也可以很方便的遷移到 pdm 中來(lái):

使用 pdm import -f 無(wú)需初始化,直接轉(zhuǎn)換

執(zhí)行 pdm init 或者 pdm install 的時(shí)候,會(huì)自動(dòng)識(shí)別你當(dāng)前的依賴情況并轉(zhuǎn)換 pdm遷移到其他方案 也可以當(dāng) pdm 管理的項(xiàng)目,導(dǎo)出為其他方案 pyproject.toml 和 pdm.lock是 pdm 的兩個(gè)核心文件。pdm 做為一個(gè)后起之秀,也沒(méi)有忘本,它支持:

將 pyproject.toml 轉(zhuǎn)成 setup.py

pdm export -f setuppy -o setup.py

將 pdm.lock 轉(zhuǎn)成 requirements.txt

pdm export -o requirements.txt

pycharm 配置支持 PDM

在命令行創(chuàng)建項(xiàng)目目錄,進(jìn)入項(xiàng)目目錄執(zhí)行init初始化,設(shè)置一下pypi源,然后使用pycharm打開這個(gè)目錄。

mkdir pdm-demo
cd pdm-demo

pdm config pypi.url
pdm config pypi.url http://mirrors.aliyun.com/pypi/simple –-trusted-host mirrors.aliyun.com
pdm config pypi.url

# 永久設(shè)置 Linux下
vi ~/.pip/pip.conf
[global]
index-url=https://mirrors.aliyun.com/pypi/simple/
[install]
trusted-host=mirrors.aliyun.com


# 使用 pdm 安裝一個(gè)包:
pdm add -v requests flask

完成安裝后,我們可以在當(dāng)前目錄下看到__pypackages_目錄,我們前面所安裝的庫(kù)就隔離安裝在其下面,類似node的node_modules目錄。這樣就實(shí)現(xiàn)了項(xiàng)目級(jí)別的環(huán)境隔離效果,且無(wú)需創(chuàng)建額外的虛擬環(huán)境,要在IDE中使用pdm項(xiàng)目下的本地隔離庫(kù)執(zhí)行程序很簡(jiǎn)單,以pycharm為例,將pdm項(xiàng)目打開為pycharm工程之后,找到如圖所示位置的lib文件夾,將其標(biāo)記為Sources Root即可,同時(shí)記得將解釋器選為pdm init初始化時(shí)所在環(huán)境相對(duì)應(yīng)的。

用pycharm打開pdm-demo項(xiàng)目,找到如圖所示位置的lib文件夾,將其標(biāo)記為Sources Root即可,同時(shí)記得將解釋器選為pdm init初始化時(shí)所在環(huán)境相對(duì)應(yīng)的Python解釋器。

pycharm設(shè)置Python解釋器為pdm init初始化時(shí)所在環(huán)境相對(duì)應(yīng)的Python解釋器:先查看 pdm info 信息,可以看到 Python Interpreter 解釋器路徑

 pdm info
PDM version: 1.15.0
Python Interpreter: /Users/allenjol/.local/pipx/venvs/pdm/bin/python (3.10)
Project Root: /Users/allenjol/Documents/Codes/pdm-demo
Project Packages: /Users/allenjol/Documents/Codes/pdm-demo/__pypackages__/3.10

pycharm設(shè)置 Python Interpreter 路徑和pdm info 出來(lái)的一樣即可。

關(guān)于PDM的使用介紹到這里就結(jié)束了,看完后是不是覺(jué)得它很強(qiáng)大,也很有用。趕緊去試試吧!


網(wǎng)頁(yè)題目:Python包管理工具之 PDM
本文URL:http://www.dlmjj.cn/article/djpoisi.html