十年網(wǎng)站開發(fā)經(jīng)驗(yàn) + 多家企業(yè)客戶 + 靠譜的建站團(tuán)隊(duì)
量身定制 + 運(yùn)營維護(hù)+專業(yè)推廣+無憂售后,網(wǎng)站問題一站解決
大家好,我是小姜。之前講了一個(gè)pipenv和poetry包管理工具,想必大家也和我一樣去了解過pipenv所存在問題,所以不是很推薦使用。后來改成了poetry工具,但這個(gè)東西對我來說稍微有點(diǎn)麻煩,經(jīng)常容易打錯(cuò),雖然可以做成alias的形式。那么今天我給大家推薦一個(gè)叫PDM的工具,全稱:Python Development Master。它也是非常好用,有興趣的朋友可以使用一下。

# macos安裝pipx
brew install pipx
pipx ensurepath
# Linux安裝pipx
python3 -m pip install pipx
python3 -m pipx ensurepath
PDM 只有 Python 3.7+ 的版本才能使用,使用其他的方法安裝,要先保證你的 Python 版本,但使用 pipx 則不需要你去操心。一定要注意安裝pipx的版本以及pipx安裝pdm時(shí)使用的Python版本,否則 pdm init 會(huì)失敗
pipx install pdm
pipx list
# 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
執(zhí)行 pdm init 就會(huì)開始初始化,初始化的時(shí)候,會(huì)讓你選擇項(xiàng)目的一些信息:
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 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
要在 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
pdm info -v
pdm info --env
pdm info --packages
pdm info --where
pdm info --python
# 更新所有包
pdm update
# 更新某個(gè)包
pdm update
復(fù)雜的場景,pdm 也都為你考慮到了,它提供了很多選項(xiàng),可以根據(jù)需要使用
如果你的依賴包有設(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 升級非 dev (即生產(chǎn))的包。
當(dāng)你在初始化 pdm 項(xiàng)目時(shí),就已經(jīng)選定了當(dāng)前的 Python 版本和可用的 Python 版本范圍,后面如果想更改,可以使用 use 命令,但版本要受之前設(shè)定的版本范圍約束。假設(shè)允許范圍是 python 3.9+,當(dāng)前使用的是 python 3.10,可以直接切換過去。
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ù),從輸出來看你應(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 足夠好用,也足夠開放,如果你當(dāng)前使用的是其他的包管理器,比如 pipenv ,poetry,或者還在用最原始的 requirements.txt ,你也可以很方便的遷移到 pdm 中來:
使用 pdm import -f 無需初始化,直接轉(zhuǎn)換
執(zhí)行 pdm init 或者 pdm install 的時(shí)候,會(huì)自動(dòng)識別你當(dāng)前的依賴情況并轉(zhuǎn)換 pdm遷移到其他方案 也可以當(dāng) pdm 管理的項(xiàng)目,導(dǎo)出為其他方案 pyproject.toml 和 pdm.lock是 pdm 的兩個(gè)核心文件。pdm 做為一個(gè)后起之秀,也沒有忘本,它支持:
將 pyproject.toml 轉(zhuǎn)成 setup.py
pdm export -f setuppy -o setup.py
將 pdm.lock 轉(zhuǎn)成 requirements.txt
pdm export -o requirements.txt
在命令行創(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_目錄,我們前面所安裝的庫就隔離安裝在其下面,類似node的node_modules目錄。這樣就實(shí)現(xiàn)了項(xiàng)目級別的環(huán)境隔離效果,且無需創(chuàng)建額外的虛擬環(huán)境,要在IDE中使用pdm項(xiàng)目下的本地隔離庫執(zhí)行程序很簡單,以pycharm為例,將pdm項(xiàng)目打開為pycharm工程之后,找到如圖所示位置的lib文件夾,將其標(biāo)記為Sources Root即可,同時(shí)記得將解釋器選為pdm init初始化時(shí)所在環(huán)境相對應(yīng)的。
用pycharm打開pdm-demo項(xiàng)目,找到如圖所示位置的lib文件夾,將其標(biāo)記為Sources Root即可,同時(shí)記得將解釋器選為pdm init初始化時(shí)所在環(huán)境相對應(yīng)的Python解釋器。
pycharm設(shè)置Python解釋器為pdm init初始化時(shí)所在環(huán)境相對應(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 出來的一樣即可。
關(guān)于PDM的使用介紹到這里就結(jié)束了,看完后是不是覺得它很強(qiáng)大,也很有用。趕緊去試試吧!