Python包管理工具之PDM的使用教程(转载)

Python包管理工具之PDM的使用教程

今天主要是给大家推荐一个叫PDM的工具,全称:Python Development Master,它也是非常好用。本文将为大家详细讲讲它的使用,感兴趣的可以了解一下

目录

前言

大家好,我是小姜。之前讲了一个pipenv和poetry包管理工具,想必大家也和我一样去了解过pipenv所存在问题,所以不是很推荐使用。后来改成了poetry工具,但这个东西对我来说稍微有点麻烦,经常容易打错,虽然可以做成alias的形式。那么今天我给大家推荐一个叫PDM的工具,全称:Python Development Master。它也是非常好用,有兴趣的朋友可以使用一下。

安装使用PDM

1

2

3

4

5

6

7

# 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 会失败

1

2

pipx install pdm

pipx list

配置 pdm 自动补全

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

# 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初始化项目

执行 pdm init 就会开始初始化,初始化的时候,会让你选择项目的一些信息:

  • 是否要上传 PyPI
  • 依赖的 Python 版本
  • License 类型
  • 作者信息
  • 邮箱信息 在初始化项目时会把机器上的所有 Python 版本都扫描出来了,会让选择项目的 Python 版本。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

❯ mkdir pdm-demo

❯ cd pdm-demo

# 重新执行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 常用命令

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

# 安装包

pdm add requests

# 查看包

pdm list

# 以树状形式查看

pdm list --graph

# 查看包的详情

pdm show requests

# 删除包

pdm remove requests

# 项目配置(不加任何参数,可以打印出该项目的环境配置)

pdm config

# 修改pypi源

pdm config pypi.url http://mirrors.aliyun.com/pypi/simple

pdm config pypi.url

运行命令

要在 pdm 的环境中执行命令或者项目,可以使用 run 命令,若是执行项目时,有诸多参数,可以在 pyproject.toml 配置命令别名

1

2

3

4

5

$ cat main.py

print('Hello, pdm')

$ pdm run python main.py

hello, pdm

查看环境

1

2

3

4

5

pdm info -v

pdm info --env

pdm info --packages

pdm info --where

pdm info --python

更新包

1

2

3

4

5

# 更新所有包

pdm update

# 更新某个包

pdm update <pkg>

复杂的场景,pdm 也都为你考虑到了,它提供了很多选项,可以根据需要使用

  • --save-compatible:项目依赖可兼容的版本
  • --save-wildcard:保存通配符版本(暂不明白)
  • --save-exact:保存有指定确切版本的包
  • --save-minimum:保持最小版本的包
  • --update-reuse:尽量只更新命令行中指定的包,其依赖包能不更新则不更新
  • --update-eager:更新某个包顺带更新其依赖包(递归升级)
  • --prerelease:允许提前释放(暂不明白)
  • --unconstrained:忽略包版本的约束,可将包升级至最新版本
  • --top:仅更新有在 pyproject.toml 的包
  • --dry-run:试运行,而不去修改 lock 文件
  • --no-sync:只更新 lock 文件,但不更新包

如果你的依赖包有设置分组,还可以指定分组进行更新

1

pdm update -G security -G http

也可以指定分组更新分组里的某个包

1

pdm update -G security cryptography

加个 -d 就可以再指定 dev 依赖

1

2

3

4

5

# 更新所有的 dev 依赖

pdm update -d

# 更新 dev 依赖下某个分组的某个包

pdm update -dG test pytest

也可以指定 --prod 或者 --production 升级非 dev (即生产)的包。

切换Python版本

当你在初始化 pdm 项目时,就已经选定了当前的 Python 版本和可用的 Python 版本范围,后面如果想更改,可以使用 use 命令,但版本要受之前设定的版本范围约束。假设允许范围是 python 3.9+,当前使用的是 python 3.10,可以直接切换过去。

1

pdm use python3.9

命令别名

在 pyproject.toml 添加 [tool.pdm.scripts] 可以设置快捷命令别名,若项目的执行有非常多的参数,这种设定别名的方法将很有用。

1

2

3

4

5

6

7

$ 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] 有两种形式

1

2

3

4

5

6

7

# 第一种

[tool.pdm.scripts]

start = "python main.py"

# 第二种

[tool.pdm.scripts]

start = {cmd = "python main.py"}

若想在参数中加注释,就必须得使用第二种方法,例如这样

1

2

3

4

5

6

7

[tool.pdm.scripts]

start = {cmd = [

    "flask",

    "run",

    # Important comment here about always using port 54321

    "-p", "54321"

]}

除了 cmd 之外,还有两个参数 一个是 shell 参数,从输出来看你应该和看出和 cmd 的区别,和 subprocess.Popen() with shell=True 差不多一个意思

1

2

3

4

5

6

7

$ 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 参数,可以指定配置环境变量的文件

1

2

3

[tool.pdm.scripts]

start.cmd = "flask run -p 54321"

start.env_file = ".env"

如果想要把这个环境变量的文件不仅限于某个命令,而是 pdm run 全局,可以这样配置

1

2

[tool.pdm.scripts]

_.env_file = ".env"

方案兼容

其他方案迁移到pdm

pdm 足够好用,也足够开放,如果你当前使用的是其他的包管理器,比如 pipenv ,poetry,或者还在用最原始的 requirements.txt ,你也可以很方便的迁移到 pdm 中来:

使用 pdm import -f 无需初始化,直接转换

执行 pdm init 或者 pdm install 的时候,会自动识别你当前的依赖情况并转换 pdm迁移到其他方案 也可以当 pdm 管理的项目,导出为其他方案 pyproject.toml 和 pdm.lock是 pdm 的两个核心文件。pdm 做为一个后起之秀,也没有忘本,它支持:

将 pyproject.toml 转成 setup.py

1

pdm export -f setuppy -o setup.py

将 pdm.lock 转成 requirements.txt

1

pdm export -o requirements.txt

pycharm 配置支持 PDM

在命令行创建项目目录,进入项目目录执行init初始化,设置一下pypi源,然后使用pycharm打开这个目录。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

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目录。这样就实现了项目级别的环境隔离效果,且无需创建额外的虚拟环境,要在IDE中使用pdm项目下的本地隔离库执行程序很简单,以pycharm为例,将pdm项目打开为pycharm工程之后,找到如图所示位置的lib文件夹,将其标记为Sources Root即可,同时记得将解释器选为pdm init初始化时所在环境相对应的。

用pycharm打开pdm-demo项目,找到如图所示位置的lib文件夹,将其标记为Sources Root即可,同时记得将解释器选为pdm init初始化时所在环境相对应的Python解释器。

pycharm设置Python解释器为pdm init初始化时所在环境相对应的Python解释器:先查看 pdm info 信息,可以看到 Python Interpreter 解释器路径

1

2

3

4

5

❯ 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内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值