pypi 库:https://pypi.python.org/pypi
python 查看离线帮助,执行命令:python -m pydoc -p 5200
命令行 执行 Python 代码示例:python -c "import hashlib;print(hashlib.md5('hello').hexdigest())"
1、python 包管理工具
Python 装包的几种方式
- 1. easy_install 是最古老的包安装方式,目前基本没有人使用。
- 2. pip 是最主流的包管理方案,类似于 macOS 上的 brew,Ubuntu 上的 apt,CentOS 上的 yum。使用 pip install xxx 就可以从 pypi 上搜索并安装。
- 3. pipx 依赖 pip 和 venv,是一个专门用于安装和管理包的 CLI 工具,简化了使用 venv 或者 virtualenv 新建虚拟环境步骤,
| 工具 | 核心定位 | 锁文件 | 虚拟环境 | Python 版本管理 | 典型命令 |
|---|---|---|---|---|---|
| pip | 基础包安装器 | ❌(配合 pip-tools 才有) | ❌(要自己搭配 venv) | ❌ | pip install xxx |
| pipx | CLI 工具隔离安装器 | ❌ | ✅(每个工具单独 env) | ❌ | pipx install ruff/pipx run xxx |
| uv (推荐) | 全能高速一体化管理器 | ✅uv.lock | ✅ 内置 uv venv | ✅uv python install | uv init/uv add/uv sync/uvx |
| pdm | PEP 兼容项目管理器 | ✅pdm.lock | ✅,可选无 venv 模式 | ❌(配合 pyenv /uv python) | pdm add/pdm sync/pdm publish |
2、pip、pipx、uv、pdm
pip
python 安装完成后,一般自带 pip 工具,如果没有,可以通过 get-pip.py 安装 pip
curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
python get-pip.py
pip -V // 查看 pip 版本以及 Python 版本
// pip 20.1.1 from /usr/local/lib/python2.7/dist-packages/pip (python 2.7)
如果安装的是 python3, 则 python3 默认安装的有 pip3 ,不需要再自己安装 pip3。
pip3 安装在 python3 路径下的 bin 目录里面如果没有,则 执行 python3 get-pip.py
pip3 -V // 查看 pip 版本以及 Python 版本
// pip 20.1.1 from /usr/local/lib/python3.8/dist-packages/pip (python 3.8)
pip 是 Python 自带,属于最底层。
- 作用:安装 / 卸载 / 列出包、
pip freeze > requirements.txt - 短板:没有锁依赖、没有内置虚拟环境、解析慢、容易依赖冲突
- 适合:老脚本、简单一次性脚本、兼容旧 CI
- 不适合:复杂项目、需要可复现环境、全局装 CLI 工具
最佳搭档:
python -m venv .venv+ pip
pip 帮助
用法: pip <命令> [选项] 命令: install 安装包。 lock 生成锁文件。 download 下载包。 uninstall 卸载包。 freeze 以 requirements 格式输出已安装的包。 inspect 检查 python 环境。 list 列出已安装的包。 show 显示已安装包的信息。 check 验证已安装的包是否具有兼容的依赖关系。 config 管理本地和全局配置。 search 在 PyPI 上搜索包。 cache 检查和管理 pip 的 wheel 缓存。 index 检查包索引中可用的信息。 wheel 根据您的需求构建 wheels。 hash 计算包存档的哈希值。 completion 用于命令补全的辅助命令。 debug 显示有助于调试的信息。 help 显示命令帮助。 通用选项: -h, --help 显示帮助。 --debug 让未处理的异常传播到主子程序外部,而不是记录到 stderr。 --isolated 以隔离模式运行 pip,忽略环境变量和用户配置。 --require-virtualenv 只允许 pip 在虚拟环境中运行;否则退出并显示错误。 --python <python> 使用指定的 Python 解释器运行 pip。 -v, --verbose 增加输出。该选项可累加,最多可使用 3 次。 -V, --version 显示版本并退出。 -q, --quiet 减少输出。该选项可累加,最多可使用 3 次(对应 WARNING、ERROR 和 CRITICAL 日志级别)。 --log <路径> 详细追加日志的路径。 --no-input 禁用输入提示。 --keyring-provider <keyring_provider> 如果允许用户输入,则启用通过 keyring 库查找凭据。指定要使用的机制 [auto, disabled, import, subprocess]。(默认:auto) --proxy <代理> 以 scheme://[user:passwd@]proxy.server:port 格式指定代理。 --retries <重试次数> 建立新 HTTP 连接的最大尝试次数。(默认:5) --timeout <秒> 设置套接字超时(默认 15 秒)。 --exists-action <操作> 路径已存在时的默认操作:(s)witch 切换、(i)gnore 忽略、(w)ipe 清除、(b)ackup 备份、(a)bort 中止。 --trusted-host <主机名> 将此主机或主机:端口对标记为受信任,即使它没有有效的或任何 HTTPS。 --cert <路径> PEM 编码的 CA 证书包路径。如果提供,将覆盖默认值。更多信息请参见 pip 文档中的"SSL 证书验证"。 --client-cert <路径> SSL 客户端证书路径,包含私钥和证书的单个 PEM 格式文件。 --cache-dir <目录> 将缓存数据存储在 <目录> 中。 --no-cache-dir 禁用缓存。 --disable-pip-version-check 不定期检查 PyPI 以确定是否有新版本的 pip 可供下载。使用 --no-index 时隐含此选项。 --no-color 抑制彩色输出。 --use-feature <功能> 启用可能向后不兼容的新功能。 --use-deprecated <功能> 启用将在未来被移除的已弃用功能。 --resume-retries <恢复重试次数> 恢复或重新开始不完整下载的最大尝试次数。(默认:0)如果想看 pip 中某个 命令的帮助,例如 pip list ,可以使用: pip list -h
root@kali:~$ pip list -h Usage: pip list [options] Description: List installed packages, including editables. Packages are listed in a case-insensitive sorted order. List Options: -o, --outdated List outdated packages -u, --uptodate List uptodate packages -e, --editable List editable projects. -l, --local If in a virtualenv that has global access, do not list globally-installed packages. --user Only output packages installed in user-site. --pre Include pre-release and development versions. By default, pip only finds stable versions. --format <list_format> Select the output format among: legacy (default), columns, freeze or json. --not-required List packages that are not dependencies of installed packages. Package Index Options (including deprecated options): -i, --index-url <url> Base URL of Python Package Index (default https://pypi.python.org/simple). This should point to a repository compliant with PEP 503 (the simple repository API) or a local directory laid out in the same format. --extra-index-url <url> Extra URLs of package indexes to use in addition to --index-url. Should follow the same rules as --index-url. --no-index Ignore package index (only looking at --find-links URLs instead). -f, --find-links <url> If a url or path to an html file, then parse for links to archives. If a local path or file:// url that's a directory, then look for archives in the directory listing. --process-dependency-links Enable the processing of dependency links.安装 到 用户环境
当在机器上并没有 root 权限时,可以使用 pip install --user pkg 将包安装在你的用户环境中,该用户环境与全局环境并不冲突,并且多用户之间相互隔离,互不影响。
# 在全局环境中未安装 requests
[root@localhost ~]$ pip list | grep requests
[root@localhost ~]$ su - wangbm# 由于用户环境继承自全局环境,这里也未安装
[wangbm@localhost ~]$ pip list | grep requests
[wangbm@localhost ~]$ pip install --user requests
[wangbm@localhost ~]$ pip list | grep requests
requests (2.22.0)
[wangbm@localhost ~]$# 从 Location 属性可发现 requests 只安装在当前用户环境中
[wangbm@localhost ~]$ pip show requests
---
Metadata-Version: 2.1
Name: requests
Version: 2.22.0
Summary: Python HTTP for Humans.
Home-page: http://python-requests.org
Author: Kenneth Reitz
Author-email: me@kennethreitz.org
Installer: pip
License: Apache 2.0
Location: /home/wangbm/.local/lib/python2.7/site-packages
[wangbm@localhost ~]$ exit
logout# 退出 wangbm 用户,在 root 用户环境中发现 requests 未安装
[root@localhost ~]$ pip list | grep requests
[root@localhost ~]$
pip 常用 命令
pip install requests --no-cache-dir
pip install --upgrade requests --no-cache-dir
pip cache purge # 清空所有 pip 缓存
pip cache info # 查看缓存占用多少空间
pip cache list # 列出所有缓存的包
pip cache remove requests # 删除 requests 的缓存pip --no-cache-dir -i 国内源 install 包名
如果想让所有 pip 命令都不使用缓存,配置环境变量
注:关闭终端后失效,想永久生效需添加到系统环境变量配置文件。
window 系统:set PIP_NO_CACHE_DIR=off
macOS/Linux 系统:export PIP_NO_CACHE_DIR=off
安装源 "临时修改,永久修改"
安装包:pip install xxx
通过豆瓣源临时安装包:pip install -i https://pypi.douban.com/simple xxx
永久修改,示例:pip config set global.index-url https://pypi.tuna.tsinghua.edu.cn/simple
示例:python -m pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --upgrade pip
pypi 清华源:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
清华,仅支持 HTTPS:https://pypi.tuna.tsinghua.edu.cn/simple/
清华大学开源软件镜像站:https://mirrors.tuna.tsinghua.edu.cn/help/pypi/
阿里,HTTP 和 HTTPS 均支持
:http://mirrors.aliyun.com/pypi/simple/
:https://mirrors.aliyun.com/pypi/simple/
豆瓣,HTTP 和 HTTPS 均支持
:http://pypi.doubanio.com/simple/
:https://pypi.doubanio.com/simple/卸载包:pip uninstall xxx
查看包的信息:pip show xxx
检查需要更新的包:pip list --outdated
升级包:pip install --upgrade xxx
冻结当前环境,生成安装的包的列表文件:pip freeze > requirements.txt
通过包的列表文件安装:pip install -r requirements.txt
Linux下修改 ~/.pip/pip.conf (没有就创建,文件夹要加 “.”,表示是隐藏文件夹)。内容如下:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
[install]
trusted-host=mirrors.aliyun.comwindows 下是 C:\Users\用户名\pip\pip.ini 内容同上。
如果想配置多个镜像源平衡负载,可在已经替换 index-url 的情况下通过以下方式继续增加源站:
pip config set global.extra-index-url "<url1> <url2>..."
请自行替换引号内的内容,源地址之间需要有空格。
可用的 pypi 源列表(校园网联合镜像站):https://mirrors.cernet.edu.cn/list/pypi
查看一个包的依赖包
# 查看单个包的详细信息,包括依赖 pip show package_name # 示例 pip show requests # 查看包的详细信息(包括依赖) pip show --verbose package_name使用 pipdeptree 工具,首先安装 pipdeptree:pip install pipdeptree
# 查看所有包的依赖树 pipdeptree # 查看特定包的依赖 pipdeptree -p package_name # 以图表形式显示依赖关系 pipdeptree --graph-output svg > dependencies.svg使用 requirements-tools
# 安装工具 pip install pip-tools # 生成依赖文件 pip-compile requirements.in下面命令可以帮助全面了解 Python 包的依赖关系,便于包管理和解决依赖冲突问题。
- 快速查看: 使用 pip show package_name
- 详细依赖树: 使用 pipdeptree
- 可视化: 使用 pipdeptree --graph-output
正确且优雅的装包
通常情况下,如果同时安装了 python2.x 和 python3.x 就会有两个 pip,一个 pip2、一个pip3。如果 pip 版本过低,需要升级时,正确升级对应 python 解释器的 pip (如果有多个 Python 环境,则需要加上 python解释器的版本号):python3.9 -m pip install --upgrade pip
在 python2 中安装: python -m pip install requests
在 python3.8 中安装:python3.8 -m pip install requests
在 python3.9 中安装:python3.9 -m pip install --upgrade pip request
注意 ( 大坑 ):sudo 和 非 sudo 执行 pip install 有时候安装目录不一样
python3.9 -m pip install --upgrade pip
sudo python3.9 -m pip install --upgrade pip
强制升级所有包
pip list --outdated --format=freeze | grep -v '^\-e' | cut -d = -f 1 | xargs -n1 pip install -U
pip list --outdated --format=freeze:列出所有已安装但版本不是最新的包。grep -v '^\-e':排除可编辑安装的包,这些通常是通过本地路径或VCS链接安装的包。cut -d = -f 1:使用=作为分隔符,仅获取包名。xargs -n1 pip install -U:将每个包名单独传递给pip install -U命令,进行升级。
site-packages、dist-packages
site-packages是 Python 的通用标准目录(virtualenv、Windows、macOS、RHEL )dist-packages是Debian / Ubuntu 特有的第二个目录,专门用来装"发行版打包(apt)管理的 Python 包",以避免和 pip 安装的包互相覆盖。
| site-packages | dist-packages | |
|---|---|---|
| 来源 | Python 官方约定,全平台通用 | Debian policy 引入,仅 Debian 系 |
| 出现平台 | Windows / macOS / RHEL / Fedora / 所有 venv | Ubuntu、Debian、Linux Mint 等 |
| 用途 | pip、conda、源码安装的第三方包 | apt 安装的python3-xxx系统包(与系统 Python 深度绑定) |
| 是否在 sys.path | 是 | 是(Debian 侧) |
| 权限 | venv 内可写;系统级需 sudo | 系统包管理器管理,普通用户不写 |
| 典型路径 | .../lib/python3.12/site-packages |
|
各自归属(Debian/Ubuntu 体系,重点),以python3.11举例:
/usr/lib/python3.11/dist-packages:apt /dpkg 管理的系统包(apt install python3-xxx) 是 Debian 打包、适配系统、打过补丁的版本,属于操作系统的一部分。/usr/local/lib/python3.11/dist-packages:root 执行pip install --break-system-packages安装的包 不受 apt/dpkg 管控,管理员手动装的第三方包。~/.local/lib/python3.11/site-packages:pip install --user用户级安装 这里保留了标准名字 site-packages,Debian 没有改这个 scheme
关键机制:Debian 为什么这么设计 ?Debian 需要同时支持两套包来源:
- apt(
apt install python3-numpy)→ 装进/usr/lib/python3/dist-packages - pip(
pip install numpy)→ 装进/usr/local/lib/python3.11/dist-packages(Debian 打补丁改了默认 scheme)
两者物理隔离,apt 升级系统包时不会把 pip 装的版本覆盖掉,反之亦然。
在这个目录下,新建一个 usercustomize.py 文件,注意名字必须是这个,换成其他的可就识别不到啦。usercustomize.py 的内容如
msg = r""" _ooOoo_ o8888888o __________________________________ 88" . "88 | 爬虫工程师平安 后端工程师平安 | (| -_- |) | 数据分析师平安 自动化运维平安 | O\ = /O <__________________________________| ____/`---'\____ . ' \\| |// `. / \\||| : |||// \ / _||||| -:- |||||- \ | | \\\ - /// | | | \_| ''\---/'' | | \ .-\__ `-` ___/-. / ___`. .' /--.--\ `. . __ ."" '< `.___\_<|>_/___.' >'"". | | : `- \`.;`\ _ /`;.`/ - ` : | | \ \ `-. \_ __\ /__ _/ .-` / / ======`-.____`-.___\_____/___.-`____.-'====== `=---=' ............................................. 佛祖保佑 永无BUG """ print(msg)查看 site-package 所在目录
在 Python 交互式 Shell 中,输入以下代码以获取 site-packages 路径:
import site
print(site.getsitepackages())
from distutils.sysconfig import get_python_lib
print(get_python_lib())
查看 Python 解释器路径
import sys
print(sys.executable)
查看当前 lib 路径
>>> import sys
>>> print(sys.path)>>> import sys
>>> from pprint import pprint
>>> pprint(sys.path)
执行命令:python -c "print('\n'.join(__import__('sys').path))"
执行命令:python -m site
查看 Python 环境信息:python -m sysconfig
快速自测命令
# 查看所有site路径
python3 -m site
# 看sys.path顺序
python3 -c 'import sys; print("\n".join(sys.path))'
# 查看当前默认安装scheme
python3 -c 'import sysconfig; print(sysconfig.get_paths())'
pipx
- 原理:每一个工具单独创建一个隔离 venv,自动把命令加到 PATH
- 例子:
pipx install pdm、pipx install ruff、pipx install uv pipx run xxx:临时跑一次,不持久安装(一次性)- 对比 uvx:功能几乎等价;pipx 是专门做这件事的独立工具,uvx 是 uv 内置子集
虽然 python 自带的 pip 工具提供了丰富的安装与管理功能,同时在 virtualenv 的帮助下并不是太担心 Python 的版本升级会对开发环境产生太大的影响。但是,我们通过 pip 安装的 Python 实用工具,在版本升级的过程中并不能幸免。除非我们单独设置独立的,专门用于安装这些工具的虚拟环境。但是,每次安装都需要切换到虚拟环境,未免显得过于繁琐。难道就不能更给力一些嘛~~答案当然是肯定的。
pipx就是为了解决这样的困扰而诞生的。pipx 可以在隔离环境中安装和运行Python应用程序。主要优势:可以将每个工具安装在一个隔离的虚拟环境中,同时又可以全局调用这些工具,既解决了版本冲突的问题,又保持了系统的整洁。
核心概念
- 虚拟环境:pipx 会为每个安装的工具创建一个独立的虚拟环境。
- 全局可用:尽管工具被安装在独立的虚拟环境中,但 pipx 会创建一个全局可访问的命令链接,使得你可以像平常一样使用这些工具。
pipx 的工作原理可以简化为以下几个步骤:
- 创建一个新的虚拟环境。
- 在这个虚拟环境中安装指定的命令行工具。
- 将工具的可执行文件链接到全局环境,使其可全局调用。
这样做的好处是,每个工具都在其独立的环境中运行,不会干扰其他工具和项目的依赖。
安装:https://github.com/pypa/pipx
一个绝佳的包管理器 pipx:https://blog.csdn.net/pythondh1/article/details/139227698
uv (推荐)
UV 是由 Astral 公司(Rust工具 Ruff 的开发者)推出的高性能 Python 包管理工具,基于 Rust 编写,旨在替代传统的 pip 和 pip-tools。其核心优势在于极快的速度(比pip快10-100倍)、轻量级设计(仅几十MB)以及现代化的依赖管理(支持 pyproject.toml 和 uv.lock 文件)。UV 集成了虚拟环境管理、Python 版本控制、依赖解析等功能,目标是成为类似 Rust Cargo 的全能工具,简化Python 开发流程。
在Windows上安装 UV 的3种方法
- 通过PIP安装(推荐):pip install uv
- PowerShell脚本安装:irm https://astral.sh/uv/install.ps1 | iex
- 使用Pipx(适合全局工具管理):pipx install uv
uv 入门教程 -- Python 包与环境管理工具:https://www.runoob.com/python3/uv-tutorial.html
uv 中文文档:https://mp.csdn.net/mp_blog/creation/editor/53445982
- 兼容 pip:
uv pip install -r requirements.txt无缝迁移老项目 - 项目模式:
uv init→ pyproject.toml + uv.lock,uv sync一键对齐环境 - Python 版本管理:
uv python install 3.12、uv python pin 3.12,替代 pyenv - 工具模式:
uvx ruff= pipx run,uv tool install ruff - 支持 workspace,适合 monorepo
- 短板:生态很新,极少数冷门 build 后端兼容踩坑;锁文件是 uv 自有格式
pdm
pdm 是一个现代 Python 包和依赖项管理器,支持最新的 PEP 标准。但它不仅仅是一个包管理器。它在各个方面提升了您的开发工作流程。最显着的好处是它以类似的方式安装和管理软件包,根本不需要创建虚拟环境,灵活而强大的插件系统。PDM 需要 python 3.8 或更高版本。
pypi :https://pypi.org/project/pdm/
安装:pip install pdm
更新 PDM 版本:pdm self update
pdm 是 PEP 标准优先,python 官方社区风格的项目管理器,对标 poetry
- 核心特点:严格遵循 PEP621、PEP517,不搞自定义特殊格式
- 亮点:支持
__pypackages__(不用虚拟环境直接跑,PEP582)、依赖分组灵活、导出 requirements.txt 方便、可插拔解析器 - 适合:要标准兼容、库开发、不想被工具绑定、需要灵活导出给 pip / 旧 CI
- 短板:没有内置 Python 版本管理,速度弱于 uv;没有内置全局 CLI 工具安装(装 pdm 本身可以用 pipx)
官网文档
- Introduction 介绍
- New Project 新建项目
- Manage Dependencies 管理依赖
- Build and Publish 构建、发布
- Configure the Project 配置项目
- PDM Scripts pdm 脚本
- Lifecycle and Hooks 生命周期和hook
- Advanced Usage 高级用法
- Working with Virtual Environments 使用虚拟环境
- Working with PEP 582
- Create Project From a Template 从模板创建项目
初始化 PDM
执行pdm init就会开始初始化,初始化的时候,会让你选择项目的一些信息
- 是否要上传 PyPI
- 依赖的 Python 版本
- License 类型
- 作者信息
- 邮箱信息
完成之后,PDM 会将你的选择以 toml 格式写入 pyproject.toml 配置文件中。
其他方案迁移到 pdm
pdm 足够好用,也足够开放,如果你当前使用的是其他的包管理器,比如 pipenv ,poetry,或者还在用最原始的 requirements.txt ,你也可以很方便的迁移到 pdm 中来:
- 使用 pdm import -f {file} 无需初始化,直接转换
- 执行 pdm init 或者 pdm install 的时候,会自动识别你当前的依赖情况并转换
pdm 迁移到其他方案
pyproject.toml 和 pdm.lock是 pdm 的两个核心文件。
- 将 pyproject.toml 转成 setup.py:pdm export -f setuppy -o setup.py
- 将 pdm.lock 转成 requirements.txt:pdm export -o requirements.txt
PDM 用法
pdm 有非常多的命令,使用-h可以看到帮助菜单
安装包:pdm add requests
查看包的详情:pdm show
查看包:pdm list --graph
pdm list 还有两个选项:
- --freeze:以 requirements.txt 的格式列出已安装的包
- --json:以 json 的格式列出已安装的包,但必须与 --graph 同时使用
删除包:pdb remove requests
项目配置:pdm config
想要修改的话,只要加 key 和 value 做为参数即可,以修改 pypi 镜像代理为例
现在改成 阿里源,只需要执行如下命令
pdm config 配置 查阅:https://pdm.fming.dev/configuration/
运行命令
在 pdm 的环境中执行命令或者项目,可以使用 run 命令,若是执行项目时,有诸多参数,可以在 pyproject.toml 配置命令别名。
查看环境
使用info命令,可以查看当前项目的环境信息
更新包
更新所有包:pdm update
更新某个包:pdm update <pkg>
--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
更新所有的 dev 依赖:pdm update -d# -d 指定 dev 依赖
更新 dev 依赖下某个分组的某个包:pdm update -dG test pytest
同样地,也可以指定 --prod 或者 --production 升级非 dev (即生产)的包。
切换 py
在初始化 pdm 项目时,就已经选定了当前的 Python 版本和可用的 Python 版本范围,后面如果想更改,可以使用 use 命令,但版本要受之前设定的版本范围约束。
假设允许范围是 python 3.9+,当前使用的是 python 3.10,可以直接切换过去。
命令:pdm use python3.9
命令别名
在 pyproject.toml 添加[tool.pdm.scripts]可以设置快捷命令别名,若项目的执行有非常多的参数,这种设定别名的方法将很有用。
[tool.pdm.scripts]有两种形式
# 第一种
[tool.pdm.scripts]
start = "python main.py"# 第一种
[tool.pdm.scripts]
start = {cmd = "python main.py"}
但若想在参数中加注释,就必须得使用第二种方法,例如这样
[tool.pdm.scripts]
start = {cmd = [
"flask",
"run",
# Important comment here about always using port 54321
"-p", "54321"
]}
除了 cmd 之外,还有两个参数。
一个是 shell 参数,从输出来看你应该和看出和 cmd 的区别,和subprocess.Popen()withshell=True差不多一个意思
个是 env_file 参数,可以指定配置环境变量的文件
[tool.pdm.scripts]
start.cmd = "flask run -p 54321"
start.env_file = ".env"
如果想要把这个环境变量的文件不仅限于某个命令,而是 pdm run 全局,可以这样配置
[tool.pdm.scripts]
_.env_file = ".env"
加--list或者-l可以查看所有设置的快捷别名
对于每一个快捷命令,都可以设置 pre 和 post 命令:
- pre 命令:在每次快捷命令执行前会执行
- post 命令:在每次快捷命令执行后会执行
[tool.pdm.scripts]
pre_compress = "{{ Run BEFORE the `compress` script }}"
compress = "tar czvf compressed.tar.gz data/"
post_compress = "{{ Run AFTER the `compress` script }}"