news 2026/10/24 1:00:58

python 包管理工具:pip、pipx、uv、pdm

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python 包管理工具:pip、pipx、uv、pdm

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
pipxCLI 工具隔离安装器❌✅(每个工具单独 env)❌pipx install ruff/pipx run xxx
uv (推荐)全能高速一体化管理器✅uv.lock✅ 内置 uv venv✅uv python installuv init/uv add/uv sync/uvx
pdmPEP 兼容项目管理器✅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.com

windows 下是 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-packagesdist-packages
来源Python 官方约定,全平台通用Debian policy 引入,仅 Debian 系
出现平台Windows / macOS / RHEL / Fedora / 所有 venvUbuntu、Debian、Linux Mint 等
用途pip、conda、源码安装的第三方包apt 安装的python3-xxx系统包(与系统 Python 深度绑定)
是否在 sys.path是是(Debian 侧)
权限venv 内可写;系统级需 sudo系统包管理器管理,普通用户不写
典型路径.../lib/python3.12/site-packages

/usr/lib/python3/dist-packages

/usr/local/lib/python3.11/dist-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

  1. 兼容 pip:uv pip install -r requirements.txt无缝迁移老项目
  2. 项目模式:uv init→ pyproject.toml + uv.lock,uv sync一键对齐环境
  3. Python 版本管理:uv python install 3.12、uv python pin 3.12,替代 pyenv
  4. 工具模式:uvx ruff= pipx run,uv tool install ruff
  5. 支持 workspace,适合 monorepo
  6. 短板:生态很新,极少数冷门 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 }}"

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/10/24 1:00:49

个人博客系统源码实战:前后端分离、核心链路与部署排查

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/10/24 0:18:10

Android学生信息管理系统:SQLite+Java/Kotlin完整课设工程

简介&#xff1a;本资源是一份面向高校Android开发初学者与课程设计学生的完整安卓应用实战项目&#xff0c;聚焦学生信息管理系统的全流程实现&#xff0c;帮助学习者系统掌握Android Studio开发核心技能。压缩包共1426个文件&#xff0c;涵盖338个XML布局与资源文件、280个PN…

作者头像 李华
网站建设 2026/10/24 0:11:26

Spotify押注AI代理:让音乐服务成为智能体首选

当生成式AI从聊天窗口走向能替用户执行任务的智能体&#xff0c;数字服务的入口正在发生迁移。TechCrunch报道&#xff0c;Spotify联合CEO Gustav Sderstrm近日解释了公司当前的AI判断&#xff1a;AI代理的崛起&#xff0c;可能对音乐服务是个好消息。Spotify真正押注的&#x…

作者头像 李华
网站建设 2026/10/24 0:10:28

知识付费+虚拟商城:PHP全开源源码部署与二次开发详解

简介&#xff1a;这是一份2023全新彩虹晴天多功能系统源码&#xff0c;集知识付费、虚拟商城、实物商城与虚拟卡网于一身&#xff0c;面向需要快速搭建商业运营网站的开发者、站长与创业者。作者在修复更新后发布&#xff0c;随包带1800余条初始数据&#xff0c;国内外服务器、…

作者头像 李华
网站建设 2026/10/24 0:09:53

STM32+Proteus智能小车仿真:PWM调速与电机控制实战

简介&#xff1a;这份资源面向嵌入式初学者与电子工程相关专业学生&#xff0c;提供一套基于STM32F103C6与Proteus的智能小车仿真工程&#xff0c;用于在无实物硬件的情况下验证电机控制代码与电路设计。项目通过按键控制两个直流电机的正反转&#xff0c;并借助PWM调节转速&am…

作者头像 李华
网站建设 2026/10/24 0:08:08

C# WinForms计算器源码解析:从事件分发到状态机设计

简介&#xff1a;这份资源是一套基于C#与Windows Forms开发的桌面计算器完整源代码&#xff0c;面向正在学习C#窗体编程的初学者与进阶者&#xff0c;帮助读者通过一个可运行的小型项目理解GUI界面搭建、控件使用与事件驱动编程的核心思路。压缩包共56个文件&#xff0c;约1.21…

作者头像 李华