Python包管理工具之PDM的使用教程
前言
大家好,我是小姜。之前講了一個pipenv和poetry包管理工具,想必大家也和我一樣去了解過pipenv所存在問題,所以不是很推薦使用。后來改成了poetry工具,但這個東西對我來說稍微有點麻煩,經(jīng)常容易打錯,雖然可以做成alias的形式。那么今天我給大家推薦一個叫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時使用的Python版本,否則 pdm init 會失敗
pipx install pdm pipx list
配置 pdm 自動補全
# 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初始化項目
執(zhí)行 pdm init 就會開始初始化,初始化的時候,會讓你選擇項目的一些信息:
- 是否要上傳 PyPI
- 依賴的 Python 版本
- License 類型
- 作者信息
- 郵箱信息 在初始化項目時會把機器上的所有 Python 版本都掃描出來了,會讓選擇項目的 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 會將你的選擇以 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 # 項目配置(不加任何參數(shù),可以打印出該項目的環(huán)境配置) pdm config # 修改pypi源 pdm config pypi.url http://mirrors.aliyun.com/pypi/simple pdm config pypi.url
運行命令
要在 pdm 的環(huán)境中執(zhí)行命令或者項目,可以使用 run 命令,若是執(zhí)行項目時,有諸多參數(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 # 更新某個包 pdm update <pkg>
復雜的場景,pdm 也都為你考慮到了,它提供了很多選項,可以根據(jù)需要使用
- --save-compatible:項目依賴可兼容的版本
- --save-wildcard:保存通配符版本(暫不明白)
- --save-exact:保存有指定確切版本的包
- --save-minimum:保持最小版本的包
- --update-reuse:盡量只更新命令行中指定的包,其依賴包能不更新則不更新
- --update-eager:更新某個包順帶更新其依賴包(遞歸升級)
- --prerelease:允許提前釋放(暫不明白)
- --unconstrained:忽略包版本的約束,可將包升級至最新版本
- --top:僅更新有在 pyproject.toml 的包
- --dry-run:試運行,而不去修改 lock 文件
- --no-sync:只更新 lock 文件,但不更新包
如果你的依賴包有設置分組,還可以指定分組進行更新
pdm update -G security -G http
也可以指定分組更新分組里的某個包
pdm update -G security cryptography
加個 -d 就可以再指定 dev 依賴
# 更新所有的 dev 依賴 pdm update -d # 更新 dev 依賴下某個分組的某個包 pdm update -dG test pytest
也可以指定 --prod 或者 --production 升級非 dev (即生產(chǎn))的包。
切換Python版本
當你在初始化 pdm 項目時,就已經(jīng)選定了當前的 Python 版本和可用的 Python 版本范圍,后面如果想更改,可以使用 use 命令,但版本要受之前設定的版本范圍約束。假設允許范圍是 python 3.9+,當前使用的是 python 3.10,可以直接切換過去。
pdm use python3.9
命令別名
在 pyproject.toml 添加 [tool.pdm.scripts] 可以設置快捷命令別名,若項目的執(zhí)行有非常多的參數(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 之外,還有兩個參數(shù) 一個是 shell 參數(shù),從輸出來看你應該和看出和 cmd 的區(qū)別,和 subprocess.Popen() with shell=True 差不多一個意思
$ tail -n 2 pyproject.toml [tool.pdm.scripts] start = {shell = "python main.py"} $ pdm run start Running cmd script: python main.py Hello, pdm
一個是 env_file 參數(shù),可以指定配置環(huán)境變量的文件
[tool.pdm.scripts] start.cmd = "flask run -p 54321" start.env_file = ".env"
如果想要把這個環(huán)境變量的文件不僅限于某個命令,而是 pdm run 全局,可以這樣配置
[tool.pdm.scripts] _.env_file = ".env"
方案兼容
其他方案遷移到pdm
pdm 足夠好用,也足夠開放,如果你當前使用的是其他的包管理器,比如 pipenv ,poetry,或者還在用最原始的 requirements.txt ,你也可以很方便的遷移到 pdm 中來:
使用 pdm import -f 無需初始化,直接轉(zhuǎn)換
執(zhí)行 pdm init 或者 pdm install 的時候,會自動識別你當前的依賴情況并轉(zhuǎn)換 pdm遷移到其他方案 也可以當 pdm 管理的項目,導出為其他方案 pyproject.toml 和 pdm.lock是 pdm 的兩個核心文件。pdm 做為一個后起之秀,也沒有忘本,它支持:
將 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)建項目目錄,進入項目目錄執(zhí)行init初始化,設置一下pypi源,然后使用pycharm打開這個目錄。
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 # 永久設置 Linux下 ? vi ~/.pip/pip.conf [global] index-url=https://mirrors.aliyun.com/pypi/simple/ [install] trusted-host=mirrors.aliyun.com # 使用 pdm 安裝一個包: pdm add -v requests flask
完成安裝后,我們可以在當前目錄下看到__pypackages_目錄,我們前面所安裝的庫就隔離安裝在其下面,類似node的node_modules目錄。這樣就實現(xiàn)了項目級別的環(huán)境隔離效果,且無需創(chuàng)建額外的虛擬環(huán)境,要在IDE中使用pdm項目下的本地隔離庫執(zhí)行程序很簡單,以pycharm為例,將pdm項目打開為pycharm工程之后,找到如圖所示位置的lib文件夾,將其標記為Sources Root即可,同時記得將解釋器選為pdm init初始化時所在環(huán)境相對應的。
用pycharm打開pdm-demo項目,找到如圖所示位置的lib文件夾,將其標記為Sources Root即可,同時記得將解釋器選為pdm init初始化時所在環(huán)境相對應的Python解釋器。
pycharm設置Python解釋器為pdm init初始化時所在環(huán)境相對應的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設置 Python Interpreter 路徑和pdm info 出來的一樣即可。
到此這篇關于Python包管理工具之PDM的使用教程的文章就介紹到這了,更多相關Python包管理工具PDM內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
Python?通過colorama?設置控制臺、命令行輸出彩色文字
這篇文章主要介紹了Python?通過colorama?設置控制臺、命令行輸出彩色文字的相關資料,需要的朋友可以參考下2023-09-09簡單的Python動態(tài)可視化神器,編程小白也能上手
這篇文章就來介紹簡單的Python動態(tài)可視化神器,最近發(fā)現(xiàn)了一個寶藏動態(tài)可視化庫,非常簡單,即使是小白也能輕松上手。這個庫就是motionchart,它能夠用 pandas 的 dataframe 數(shù)據(jù)直接創(chuàng)建交互式的動態(tài)圖表,下面來簡單看一下如何使用。2021-10-10python使用原始套接字發(fā)送二層包(鏈路層幀)的方法
今天小編就為大家分享一篇python使用原始套接字發(fā)送二層包(鏈路層幀)的方法,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧2019-07-07Python利用operator模塊實現(xiàn)對象的多級排序詳解
python中的operator模塊提供了一系列的函數(shù)操作。下面這篇文章主要給大家介紹了在Python中利用operator模塊實現(xiàn)對象的多級排序的相關資料,需要的朋友可以參考借鑒,下面來一起看看吧。2017-05-05