Skip to main content

Python

info

Python 版本:3.12

系统:Windows11 + WSL2(Ubuntu24.04)

编辑器:VSCode/Cursor

环境管理没有银弹

结论在前

Python环境管理工具经历了从简单到复杂,再到智能化的演进过程。每个工具都有其独特的优势和适用场景:

工具对比总览

工具优点缺点适用场景学习成本性能
pip + venv• 官方标准,稳定可靠
• 轻量级,占用空间小
• 学习成本低
• 依赖冲突处理能力弱
• 需要手动管理requirements.txt
• 不支持多Python版本管理
• Python初学者
• 简单项目开发
• 生产环境部署
一般
Anaconda• 预装大量科学计算包
• 支持多Python版本
• GUI界面友好
• 管理CUDA等外部依赖
• 体积庞大(几GB)
• 创建环境较慢
• 商业使用需付费
• 依赖解析不够智能
• 机器学习/数据科学
• 科研项目
• 需要图形界面的用户
中等
Docker• 完全隔离的环境
• 一次构建,到处运行
• 解决所有环境问题
• 支持微服务架构
• 资源占用大
• 100M代码变1G镜像
• 不适合低配置设备
• 增加了部署复杂度
• 生产环境部署
• 微服务架构
• 团队协作开发
• CI/CD流水线
中等
UV• 速度极快(10-100倍提升)
• 一体化工具箱
• 智能依赖解析
• 现代化项目管理
• 相对较新,生态待完善
• 社区支持有限
• 某些边缘情况可能不稳定
• 现代Python开发
• 频繁创建项目
• 注重开发效率
• 个人和小团队项目
中等极快

选择建议

  • 初学者推荐: pip + venv → 简单可靠,官方标准
  • 数据科学: Anaconda → 预装科学计算包,省时省力
  • 企业级部署: Docker → 环境一致性保证,运维友好
  • 现代化开发: UV → 高效快速,未来趋势

记住,没有银弹,选择最适合你当前需求和技术栈的工具才是最好的选择。随着项目复杂度的增加,你可能需要组合使用多种工具来解决不同场景下的问题。

pip 与 venv :陪伴新手成长的标准库

最早我学习Python是在网页上,主打随时随地学习编程,它提供了一个Python 3.7固定的环境,我只需要在线编写代码,点击运行就可以看到结果。它支持标准库外和pandasnumpy等常见的计算机科学库,我在这个网页上完成了Python的基础学习。

它的缺点是不支持自定义下载第三方模块,例如requests,于是在学习爬虫的时候我开始学习创建本地环境。

info

在生活中,人们使用汉语、英语、法语、德语、日语等不同的语言跟不同国家的人进行交流。在使用计算机时,人们不能直接使用英语等人类的语言和计算机交流,而是使用编程语言(Programming Language)将人们的想法编写成程序,再通过执行程序控制计算机去解决各种问题。我们将这个编程语言与计算机之间的"翻译员"称为编程环境,简称"环境"。

Python环境主要由2部分组成:解释器和模块库?。环境管理的重点就是如何管理这些依赖,如何保证不同的模块库之间的兼容性,如何保证不同的模块库之间的可复用性。。

在 Windows 下安装 Python 是一件非常简单的事情,Python 官网下载网址提供了windows安装的可执行文件,安装过程全部勾选,一路点击下一步就可以了。

info

如果我们安装了中文语言包,那么我们的系统就可以识别与显示中文。 如果我们安装了 Python 语言包,那么我们的系统就可以识别与运行 Python 程序。

安装模块也只需要使用pip下载安装包就可以了,如果遇到网络报错那就更换镜像源?,如果没有网络那就提前下载离线wheel,使用U盘安装。

info

在部分系统预装版如Ubuntu、MacOS 中,python名为 python3pippip3,Python 安装完成后,pip 也会自动安装完成。

但是随着我学习的内容越来越复杂,我安装的包出现了依赖项冲突。公司的项目中用到的一个包需要requests小于某个版本,而我正在学习的一个新框架需要requests大于某个版本。

于是我使用venv专门为我学习的新框架创建了一个虚拟环境,这样就避免了依赖项冲突。一切看起来很好。

当时我买的机械革命电脑系统经常蓝屏,于是我决定换一台新电脑,我使用pip freeze > requirements.txt导出所有包,然后把requirements.txt拷贝到新电脑上,切换到 requirements.txt 文件所在的目录下执行pip install -r requirements.txt安装所有包。

理论上我这个操作应该可以直接顺畅的安装,但是居然报错了?这就是pip最被诟病的依赖项冲突问题。

info

依赖项冲突是指同一个包的不同版本要求不兼容,导致无法同时满足所有依赖的情况。

这是因为pip freeze按字母顺序排列包,不考虑依赖关系。例如,包A依赖包B的1.0版本,但在安装时可能先安装了包B的2.0版本,导致依赖冲突。解决方案是根据报错手动把有冲突的包注释掉,单独安装。这并不智能。

Anaconda :与机器学习互相成就

AnacondaMinicondaconda是什么?

  • 最核心的是conda,它是一个包和环境管理器,可以创建和管理虚拟环境。它是开源免费的。
  • Miniconda = conda + Python
  • Anaconda = Miniconda + 1500+预装包 + GUI界面 + 账户登录配置云同步

我用的是完整版的Anaconda,它既预装了大量机器学习包免去重复安装,也可以创建不同版本的 Python 解释器环境?,还可以管理 CUDA 这样的外部包。而且在Linux环境下安装和管理多个原生Python不算方便,有了conda之后就方便很多了。

可以说Anaconda推动了机器学习的发展,机器学习也让Anaconda广为人知。

conda 创建环境真的很慢,而且体积很大,并且处理依赖冲突的时候也并不算智能。但是让一些公司真正放弃Anaconda的原因是商业付费,而且售后不足。

Docker:以空间换时间

Docker 是一个开源的容器化平台,它允许开发者将应用程序及其所有依赖打包成一个独立的容器,然后在任何有docker的地方运行。是开发者的终极梦想。

上面这句话应该会招来硬件工程师的反馈,因为docker会占据相当的内存空间和硬盘空间。通常内存小于2G的设备或边缘设备,例如树莓派、一些轻量服务器,是不适合安装docker的。另外docker原理是把系统环境和项目一起打包成一个镜像,然后运行时再解包,这会占用更多空间,我们的不含模型的代码一般都在100M以内,如果使用docker,那么100M的代码会变成1G的镜像。

docker是很典型的用空间换时间,它让开发者在任何地方都可以运行代码,而且不用担心环境问题。你可以节省1个运维工程师,只需要给你的电脑升级一下配置?

如果你的容器很多,可以使用docker-compose和K8s,可以说中大型公司软件开发,容器化是主流。

UV:整合多个工具的工具箱

dockerconda解决了开发和部署问题,但是依赖项冲突问题依然需要一个更加聪明的解决方案,不能总是手动解决冲突。而且对于总是去陌生客户场地出差的人来说,总是需要先吃顿饭来等待dockerconda安装。有没有一个更加轻快的解决方案?

有需求就有市场,PoetrypipxPixiuv等工具开始了他们的探索,总体方向是:更快、更集成、更智能。

你可以选择任意一个工具箱或者都不选择,如果要选的话,我个人比较推荐uv,它吸取了各家之长,目前看来是最好用的工具箱。?

因为对于专业的开发者来说,绝大部分时间我们都是在创建项目、发布项目、查看别人的项目并在本地复现,这些操作比较频繁。每周 uv 能为你节省 1 ~ 5 个小时,要知道我每周才工作 35 ~ 40 个小时!

下面是uv的常用命令示例,按项目构建顺序整理,可以参考。

# 安装uv
curl -LsSf https://astral.sh/uv/install.sh | sh

# 一键安装多个python版本,支持多个来源
uv python install 3.10 3.11 3.12

# 锁定Python版本(设置默认的Python版本)
uv python pin 3.12

# 初始化项目时可以指定 Python 版本,自动添加README.md、.git与.gitignore文件
uv init example --python 3.12

# 进入项目
cd example

# 查看当前项目使用的Python版本
uv python find

# 添加包时会自动创建venv环境,同时更新项目依赖文件pyproject.toml,无需python -m venv,无需反复pip freeze
uv add ruff

# 自动检查代码格式
uv run ruff check

# 根据pyproject.toml安装项目依赖
uv sync

# 快速打包和发布项目
uv build
uv publish

# 锁定关键项目依赖。锁文件的机制也许是源自npm,它让依赖冲突问题有了更智能的解决方案
uv lock

# 快速运行脚本,无需切换到虚拟环境
uv run xx.py

# 初始化一个 FastAPI 项目
uv init --app

# 快速启动项目
uv run fastapi dev

UV 命令完整参考表

基于uv官方文档的 UV 代表性命令参考表(不含完整参数)

Python版本管理
命令功能描述
uv python install安装Python版本
uv python list查看可用的Python版本
uv python find查找已安装的Python版本
uv python pin将当前项目固定到特定Python版本
uv python uninstall卸载Python版本
脚本执行
命令功能描述
uv run运行脚本
uv add --script为脚本添加依赖
uv remove --script从脚本中移除依赖
项目管理
命令功能描述
uv init创建新的Python项目
uv add向项目添加依赖
uv remove从项目中移除依赖
uv sync同步项目依赖到环境
uv lock为项目依赖创建锁定文件
uv run在项目环境中运行命令
uv tree查看项目的依赖树
uv build将项目构建为分发包
uv publish将项目发布到包索引
工具管理
命令功能描述
uvx / uv tool run在临时环境中运行工具
uv tool install全局安装工具
uv tool uninstall卸载工具
uv tool list列出已安装的工具
uv tool update-shell更新shell以包含工具可执行文件
pip与venv接口兼容
命令功能描述
uv venv创建新的虚拟环境
uv pip install将包安装到当前环境
uv pip show显示已安装包的详细信息
uv pip freeze列出已安装的包及其版本
uv pip check检查当前环境是否有兼容的包
uv pip list列出已安装的包
uv pip uninstall卸载包
uv pip tree查看环境的依赖树
依赖锁定
命令功能描述
uv pip compile将需求编译到锁定文件
uv pip sync将环境与锁定文件同步
实用工具
命令功能描述
uv cache clean移除缓存条目
uv cache prune移除过期的缓存条目
uv cache dir显示uv缓存目录路径
uv tool dir显示uv工具目录路径
uv python dir显示uv已安装Python版本路径
uv self update将uv更新到最新版本

编辑器

Vscdoe 官网下载网址

  • VSCode(Visual Studio Code)是一款通用跨平台的编辑器

它不会运行程序,它需要安装相应的语言包才能运行程序。它可以编辑任何语言的程序,支持几乎所有主流的开发语言的语法高亮、智能代码补全等。安装过程全部勾选。

  • 注意与 Visual Studio 区别

推荐扩展

使用 VSCode 或 Cursor,安装以下扩展:

扩展名称功能描述
Remote - SSH通过SSH连接远程服务器,在本地编辑远程文件
Python提供Python语言基础支持,包括语法高亮、代码补全和格式化
Pylance高性能Python语言服务器,提供类型检查和智能提示
Python Debugger支持Python代码的断点调试、变量监控和单步执行
Black Formatter自动格式化Python代码,保持一致的代码风格
Jupyter提供Jupyter Notebook支持,支持在VSCode中编辑和运行Jupyter Notebook
Error Lens直接在代码行内展示错误和警告信息,无需悬停鼠标
Office Viewer在VSCode中直接预览Word、Excel等Office文档
Markmap以思维导图的形式展示markdown结构
Markdown All in One提供Markdown编辑、预览、导出等功能
SQLite Viewer提供SQLite数据库的可视化界面,支持数据浏览和查询
Hex Editor提供十六进制编辑器,支持编辑二进制文件
Live Server提供本地开发服务器,支持实时预览和自动刷新网页
Git History提供Git历史记录的可视化界面,支持查看文件的修改历史
Gitmoji在VSCode中使用Gitmoji,支持在提交时使用Gitmoji
Docker管理Docker容器,支持创建、运行和调试容器化应用
CMake Tools提供CMake项目支持,简化C/C++跨平台构建配置

工作区的概念

工作区是你项目文件的集合,可以包含一个或多个文件夹。

操作类型功能快捷键/操作方式
打开工作区打开文件夹Ctrl + K, Ctrl + O文件 > 打开文件夹
打开工作区文件Ctrl + K, Ctrl + W 或双击 .code-workspace 文件
管理工作区添加文件夹到工作区文件 > 将文件夹添加到工作区
保存工作区文件 > 将工作区另存为 (生成 .code-workspace 文件)
移除文件夹右键文件夹 > 从工作区中删除文件夹
工作区设置独立设置每个工作区可以有独立的设置 (.vscode/settings.json)
扩展和主题可以为不同项目配置不同的扩展和主题

编辑器操作

操作类型功能快捷键
视图控制放大Ctrl + +Ctrl + 滚轮上
缩小Ctrl + -Ctrl + 滚轮下
重置缩放Ctrl + 0
快速导航跳转到指定行Ctrl + G (输入行号)
跳转到文件开头Ctrl + Home
跳转到文件结尾Ctrl + End
跳转到匹配的括号Ctrl + Shift + \
分屏操作垂直分屏Ctrl + \
关闭当前编辑器Ctrl + W
切换编辑器组Ctrl + 1/2/3
在组间移动文件Ctrl + Alt + ←/→
文件操作新建文件Ctrl + N
保存文件Ctrl + S
保存所有文件Ctrl + K, S
关闭文件Ctrl + W
重新打开已关闭的文件Ctrl + Shift + T

命令框

命令框是编辑器最强大的功能之一,按 Ctrl + P 打开。

搜索模式详解

前缀功能快捷键使用示例
无前缀文件搜索Ctrl + Papp.py *.js
>命令搜索Ctrl + Shift + P>Python: Run File
@当前文件符号Ctrl + Shift + O@function_name
#工作区符号Ctrl + T#ClassName
:跳转行号Ctrl + G:25
?帮助信息?shortcuts

实用技巧

技巧说明操作方式
模糊搜索文件搜索支持模糊匹配输入 apy 可以找到 app.py
模式切换从命令模式切换到文件搜索Backspace 删除 > 符号
最近文件查看最近打开的文件和文件夹Ctrl + R
符号搜索在大文件中快速定位函数、类、变量使用 @# 前缀搜索

搜索和替换

操作类型功能快捷键
基本搜索当前文件搜索Ctrl + F
全局搜索Ctrl + Shift + F
查找下一个F3Enter
查找上一个Shift + F3
替换操作当前文件替换Ctrl + H
全局替换Ctrl + Shift + H
替换当前匹配Ctrl + Shift + 1
替换所有匹配Ctrl + Alt + Enter
高级选项区分大小写点击 Aa 按钮或 Alt + C
全词匹配点击 Ab 按钮或 Alt + W
正则表达式点击 .* 按钮或 Alt + R

正则表达式示例

\d+           ## 匹配数字
[a-zA-Z]+ ## 匹配字母
\w+\s*=\s* ## 匹配变量赋值
function\s+(\w+) ## 匹配函数定义

搜索技巧

技巧说明示例
排除文件夹在搜索框中添加排除规则!node_modules
指定文件类型只搜索特定类型文件*.py 只搜索Python文件
使用占位符替换时引用正则分组$1 $2 引用正则分组

调试功能

操作类型功能快捷键/操作方式
断点操作设置/取消断点点击行号左侧或 F9
条件断点右键行号 > 添加条件断点
日志断点右键行号 > 添加记录点
禁用断点右键断点 > 禁用断点
调试控制开始调试F5
开始执行(不附加调试器)Ctrl + F5
停止调试Shift + F5
重启调试Ctrl + Shift + F5
继续执行F5
单步跳过F10
单步跳入F11
单步跳出Shift + F11
调试面板变量查看当前作用域的变量值
监视添加表达式进行实时监控
调用堆栈查看函数调用链
断点管理所有断点

调试控制台

调试暂停时,可以在控制台中执行以下操作:

操作说明示例
查看变量值直接输入变量名my_variable
执行表达式运行计算表达式len(my_list)
修改变量动态修改变量值my_var = new_value
调用函数执行函数调用my_function()

多光标编辑

多光标功能大幅提升编辑效率。

操作类型功能快捷键
创建多光标按住Alt点击在任意位置添加光标
选择下一个相同单词Ctrl + D
选择所有相同单词Ctrl + Shift + L
在选中区域每行末尾添加光标Alt + Shift + I
列选择模式矩形选择Shift + Alt + 鼠标拖拽
向下/上扩展列选择Ctrl + Shift + Alt + ↓/↑
向左/右扩展列选择Ctrl + Shift + Alt + ←/→
多光标技巧撤销最后一个光标Ctrl + U
跳过当前选择Ctrl + K, Ctrl + D
选择所有匹配项Ctrl + Shift + L

实用场景

## 同时修改多个变量名
old_name = 1
old_name = 2 ## Ctrl+D选择所有old_name,直接输入new_name
old_name = 3

代码格式化

操作类型功能快捷键
注释操作切换行注释Ctrl + /
切换块注释Shift + Alt + A
批量注释选中行选中多行后 Ctrl + /
缩进操作增加缩进TabCtrl + ]
减少缩进Shift + TabCtrl + [
自动调整缩进Ctrl + Shift + I
代码格式化格式化整个文档Shift + Alt + F
格式化选中代码Ctrl + K, Ctrl + F
保存时自动格式化设置中启用 Format On Save
代码折叠折叠当前块Ctrl + Shift + [
展开当前块Ctrl + Shift + ]
折叠所有Ctrl + K, Ctrl + 0
展开所有Ctrl + K, Ctrl + J

禅模式

禅模式提供无干扰的编程环境,适合专注编码。

操作类型功能操作方式
进入禅模式快捷键Ctrl + K, Z
菜单查看 > 外观 > 禅模式
退出禅模式按键按两次 Esc
快捷键再次按 Ctrl + K, Z

禅模式特点

特点说明
隐藏UI元素隐藏所有UI元素(侧边栏、状态栏、面板)
全屏显示全屏显示代码编辑器
居中布局居中显示代码内容
可自定义可自定义禅模式设置

禅模式设置

在设置中搜索 zen 可以配置:

设置项功能
zenMode.centerLayout是否居中布局
zenMode.fullScreen是否全屏显示
zenMode.hideLineNumbers是否隐藏行号
zenMode.hideTabs是否隐藏标签页

其他实用功能

操作类型功能快捷键/操作方式
快速操作复制行Shift + Alt + ↓/↑
移动行Alt + ↓/↑
删除行Ctrl + Shift + K
在上方插入行Ctrl + Shift + Enter
在下方插入行Ctrl + Enter
选择操作选择整行Ctrl + L
扩展选择Shift + Alt + →
收缩选择Shift + Alt + ←
选择到行尾Shift + End
选择到行首Shift + Home
面板管理切换侧边栏Ctrl + B
切换面板Ctrl + J
切换终端Ctrl + ~
切换输出面板Ctrl + Shift + U
文件浏览器新建文件点击文件夹右侧的 + 图标
新建文件夹Ctrl + Shift + 新建文件夹
重命名F2 或右键选择重命名
删除Delete 键或右键删除

小贴士

功能说明操作方式
自定义快捷键修改或添加快捷键文件 > 首选项 > 键盘快捷方式
设置同步同步设置、扩展、快捷键登录账户后自动同步
工作区推荐扩展为项目配置推荐扩展.vscode/extensions.json 中配置
代码片段创建自定义代码片段Ctrl + Shift + P 搜索 snippet
颜色主题快速切换主题Ctrl + K, Ctrl + T
字体大小调整字体大小Ctrl + +/- 临时调整,settings.json 中修改 editor.fontSize 永久设置

终端补全

终端中出现自动补全提示时,可以通过以下方式接受补全:右箭头键 (→) 或 Tab键

个性化设置

设置项说明操作方式
主题颜色选择喜欢的主题颜色设置中点击主题颜色,推荐 深色+
保存时自动格式化保存文件时自动格式化代码设置中搜索 format on save,勾选即可

运行代码

测试:在 Vscode 中新建一个 xxx.py 文件,输入以下内容:

print("hello world")
运行方式操作方法说明
方式1点击右上角的三角形运行按钮GUI界面运行
方式2在终端输入 python xxx.py直接运行
方式3在终端输入 python -m xxx.py把模块当作脚本来启动

可以看到输出结果为 hello world

两种运行方式的区别

运行方式说明__name__ 的值
python xxx.py直接运行'__main__'
python -m xxx.py把模块当作脚本来启动'__main__'