惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

V
Visual Studio Blog
爱范儿
爱范儿
让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
雷峰网
雷峰网
V
V2EX
博客园_首页
Engineering at Meta
Engineering at Meta
博客园 - 聂微东
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
Apple Machine Learning Research
Apple Machine Learning Research
GbyAI
GbyAI
H
Help Net Security
A
About on SuperTechFans
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
cs.AI updates on arXiv.org
cs.AI updates on arXiv.org
Blog — PlanetScale
Blog — PlanetScale
W
WeLiveSecurity
云风的 BLOG
云风的 BLOG
D
Docker
Security Archives - TechRepublic
Security Archives - TechRepublic
Help Net Security
Help Net Security
N
News and Events Feed by Topic
Simon Willison's Weblog
Simon Willison's Weblog
G
Google Developers Blog
A
Arctic Wolf
T
The Blog of Author Tim Ferriss
博客园 - 叶小钗
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
Google DeepMind News
Google DeepMind News
博客园 - 三生石上(FineUI控件)
aimingoo的专栏
aimingoo的专栏
Hacker News: Ask HN
Hacker News: Ask HN
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
博客园 - 司徒正美
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
P
Privacy International News Feed
T
Troy Hunt's Blog
T
Tenable Blog
Exploit-DB.com RSS Feed
Exploit-DB.com RSS Feed
Recent Commits to openclaw:main
Recent Commits to openclaw:main
Recorded Future
Recorded Future
F
Fortinet All Blogs
D
DataBreaches.Net
B
Blog
T
Threat Research - Cisco Blogs
MyScale Blog
MyScale Blog
Hacker News - Newest:
Hacker News - Newest: "LLM"
The GitHub Blog
The GitHub Blog
Security Latest
Security Latest
M
MIT News - Artificial intelligence

少数派

派早报:Google 发布 Fitbit Air 等 - 少数派 「新人报到」確認需求,再開始 - 少数派 从 SOLO 独立开发者社区,我看到了越来越多开发者开始做自己的产品 - 少数派 我怎么管理那些"不常做,但总会忘"的生活事项 - 少数派 人形机器人量产元年,数据才是具身智能的“生死线” - 少数派 BuhoLaunchpad 高度还原 Mac 启动台:开发历程与思考 - 少数派 五年陪伴依然不舍,DIY 换壳后让罗技 MX Master 3 继续服役 - 少数派 新玩意 240|少数派的编辑们最近买了啥? - 少数派 一日一技|为什么你应该关闭 iOS 的键盘声音 - 少数派 我做了个插件和 Skills,一键提取任何网站的设计规范 Design.md - 少数派 住在三四线城市的你,该开始录播客了 - 少数派 甘南秘境,大白高国 - 少数派 AI的审美:谁让把我变成川内倫子 - 少数派 返工怎能不烦恼,打工人片单总有一部是你的「嘴替」 - 少数派 为了让「上厕所」更健康,我做了一个小工具 - 少数派 AI + Skill,能够让生成的文章去除 AI 味吗? - 少数派 新玩意|韶音OpenDots ONE 耳夹式耳机 - 少数派 《美满》| 在每一个春天的晚上相爱(362) - 少数派 新玩意|优篮子 PS01 MagSnap 磁吸支架 - 少数派 自我整合手记 | 我开始早睡了:用稳定规则,为自由托底 - 少数派 用龙虾(OpenClaw)两个多月,我最深的12个体会 - 少数派 听歌时间到,12 张你可能错过的 2025 华语乐坛好专辑 - 少数派 承诺能追吗 - 少数派 macOS 26启动台没了? 我做了个不一样的App启动器 - Keboard - 少数派 《四海为家的人》| INTJ对话INTJ(361) - 少数派 你发过的那些黑历史,是时候一次清干净了 - 少数派 新玩意:安安静静玩,越玩越专注:计客密码机 - 少数派 iPad 用户首次体验 Android 平板:vivo Pad6 Pro - 少数派 数据逻辑强 - 少数派 极北行+ | 一路向北,探访日本至北之地 | 001 - 少数派 万字剖析:千问App深度体验报告(2026) - 少数派 在2026年,如何真正防止别人抄袭你的作品 - 少数派 怎么用 50 块搭个 AI 语音助手?我踩了 3 天坑 - 少数派 YeeroAI:让 AI 对话真正成为知识管理的一部分 - 少数派 爬泰山 - 少数派 「旅图显影」 App 更新:这次,我们补上了一点「手感」 - 少数派 假期出门太折磨?我的 23 条经验帮你规划惬意旅行 - 少数派 工作流会变吗 - 少数派 Claude Opus 4.6 怎么用最省钱?我测了 5 种方案 - 少数派 GPT Image 2 让图文并茂不再稀罕 - 少数派 用户侧出发——什么是AI,我要不要学习? - 少数派 找片、转存、整理、播放一条龙!让你的付费网盘值回票价 - 少数派 欢迎试用!日课一问2.0插件 - 少数派 自己做的MDeditor,原本想购买 Typora 试了两次支付不成功,干脆自己做一个 - 少数派 vibe coding了一个 3MB 的小工具,让 ~/Downloads 彻底告别混乱 - 少数派 因为受不了 Mac 的风扇策略,我做了一个风扇控制工具 - 少数派 别只怪模型 - 少数派 Warp 终端的 AI 功能怎么用?我测了一周的体验 - 少数派 AI 写代码老是出 bug?这 5 个配置我后悔没早知道 - 少数派 「新玩意」苹果出相机可能就这样:Sigma BF + 45mm F2.8 DG Contemporary - 少数派 一个面向2030年的AI操作系统是什么样子的:浅谈cola这款有灵魂的Agent - 少数派 别只看写代码 - 少数派 每天解决10个问题,还是一口气攻坚解决400个? - 少数派 AI 交易机器人怎么搭?我用 Claude 跑了一周实盘 - 少数派 Maptoposter Online:把你爱的城市画成艺术海报 - 少数派 Function Calling 怎么用?我测了 3 个模型发现差距真大 - 少数派 Legend Talk:我做了个 AI 圆桌,让 160 位思想家围着你的问题转 - 少数派 如何找到自己的蓝方?在小县城寻找压力测试 - 少数派 语音输入与软件接口|2026年聊AI时,我们都聊些什么(上) - 少数派 混动已经卖爆,纯电又来补刀——钛7闪充版简直“不讲武德” - 少数派 本月玩什么|朋友收藏、识质存在、沙罗周期 - 少数派 为什么要每天坚持输出? - 少数派 Claude API 挂了好几个小时,你的项目有备用方案吗? - 少数派 Function Calling 没你想的复杂——我用它做了个有点用的工具 - 少数派 登录系统立即播放视频或者图片音乐的软件 - 少数派 我为什么创建 FlipHTML5 下载工具 - 少数派 残局没电?多品牌外设电量统一管理软件EasyBluetooth已支持RTSS游戏内显示以及AIDA64 - 少数派 前往通义路的路 - 少数派 太好看了,媲美Sun的个人导航页,NAS部署星云门户 - 少数派 乌黑嘴唇“一键检测”上线了 - 少数派 派早报:Claude AI 接入多个创意软件生态、FILCO 生产方接手品牌等 - 少数派 【更新】BearCLI、Claude 连接器与 MCP 服务器 - 少数派 记了上千条流水,还是看不懂财务?我做了一个让 AI 读懂账本的工作台 - 少数派 MINI R56 升级原厂 Sport 模式 - 少数派 新玩意 | 一棵柠檬树(仿真版) - 少数派 Momenta的“物理AI”野望,需迈过“含摩量”这道关 - 少数派 网页直接投屏控制手机!NAS一键部署PandaScrcpy,流畅丝滑可远程。 - 少数派 众测|邀你一同探索随身 AI 硬件入口 YoooClaw C·ONE - 少数派 2050大会:分享时间是真诚 参会记 - 少数派 iPad 赋能电影创作:国内首部宣纸手绘长片《燃比娃》的幕后故事 - 少数派 AI的审美:我用 8 个大模型给 100 张旅行照片打分 - 少数派 普通人如何破圈?去参加一个本地协会 - 少数派 把极空间的图标全换了,主题DIY全攻略打造你的专属NAS桌面 - 少数派 电子便签墙,帮你实现便签自由 - 少数派 我如何用三个 CLI 工具取代文档创建需求 - 少数派 原来真的有人可以玩一辈子 - 少数派 社区速递 139 | 派友热议三月买了啥、复古单反尼康 Df 体验 - 少数派 06 作品的赏析与评价 - 少数派 TDS REVIEW|索尼 WF-1000XM6 降噪真无线耳机体验 - 少数派 35.98万起售的第二代腾势D9,我看重的不是堆料,而是不凑合 - 少数派 鼠须管 Squirrel 皮肤配置指北 - 少数派 从watch ultra2换到redmi watch6 - 少数派 派早报:阿里巴巴发布视频生成模型 HappyHorse 1.0 等 - 少数派 别迷信1M - 少数派 家人们天塌了!网盘“大封杀”,多个渠道多条路,NAS部署PanHub - 少数派 AI与人勾心斗角!NAS一键部署AI狼人杀,假日休闲必备。 - 少数派 电商必备!Comfyui工作流批量生图插件,一次生成12张!支持Nano banana pro模型 - 少数派 Comfyui工作流配置Gpt-image-2模型教程,0.03/张 - 少数派 OpenClaw第三方APi怎么配置?可使用Gpt-image-2模型 - 少数派 会员社区话题精选 Ep. 103 - 少数派
『折腾指北』Python 开发环境管理 - 少数派
2023-09-01 · via 少数派
  • 题图由 Stable Diffusion 生成。
  • 本文旨在提供一个虚拟环境管理方式参考,所提供的虚拟环境管理方式经过作者测试,证实有效。
  • 网上这么多 Python 虚拟环境管理的文章或者教程,本文有何存在的必要:第一个原因是,网上提供的教程很多只提供了单一的虚拟环境管理工具,作者由于喜欢折腾,尝试过不同的工具,可以提供一些比较意见供参考。第二个原因是作者折腾过不同的系统,提供的经验适用于 Windows 10/11, Ubuntu 和 Windows Subsystem for Linux (WSL 2).
  • 本文不是很友好的新手教程,读者需要有一定的基础,文中使用的一些工具,如 Windows PowerShell 和 Bash,需要读者有一定的了解。
  • 本文按如下脉络进行,首先介绍为什么需要进行虚拟环境管理,然后介绍了作者使用过的几种虚拟环境管理实例,最后提供了一些延申参考。
  • 由于作者非计算机科班,文章内容只是自己的经验,所以不可避免带有作者的狭隘偏见。

引言:为什么需要进行虚拟环境管理

Python 开发环境管理分为两部分,一个是 Python 版本管理,一个是虚拟环境管理。

很多时候受限于我们的项目依赖,在开发不同的项目时需要用到不同的 Python 版本,例如 TensorFlow 2.10 就只能支持 3.7-3.10 的 Python 版本,但是最新版的 TensorFlow 就支持最新的 Python 3.11. 作者由于同时使用 TensorFlow 和 PyTorch 两个深度学习框架,就在电脑上安装了三个 Python 版本。

如果我们不使用虚拟环境管理的话,我们所有的包都会安装在系统全局 Python (Global Python, 也就是系统默认的 Python 版本) 的目录下,这会导致两个问题:

  • 第一个是由于在同一个目录下只能安装某一个包的一个版本,如果有两个项目对同一个依赖包有不同的版本需求,就会导致依赖冲突,给开发带来问题。
  • 第二个是,哪怕没有依赖冲突的问题,所有的依赖包安装在同一个目录下,会导致导出的依赖文件过于冗余,这在进行项目开源的时候是非常忌讳的(当然这个问题也存在简单的解决方法)。

基于上述两个原因,Python 开发环境管理的最佳实践是为不同的项目建立不同的虚拟环境。为了满足项目依赖对于 Python 版本的要求,我们在建立虚拟环境的时候,就需要指定 Python 版本,具体指定 Python 版本的方法会在下面的不同实践中具体介绍。

虚拟环境管理最佳实践(以 virtualenv 为例)

利用 Python 自带的 venv 管理虚拟环境

利用 Python 自带的 venv 管理虚拟环境有两个主要的问题:

  • 创建虚拟环境的时候无法指定 Python 的版本。
  • 使用 venv 的时候需要指定路径,比较麻烦。

基于上述两个原因,我很快就弃用了 venv。由于作者使用的时间太短,关于 venv 的介绍和详细使用,可以参考少数派站内的两篇文章。

关于 virtualenv,作者在查资料的时候发现二者同源,是 venv 的超集,所以对它也完全没有尝试。

利用 Miniconda/Anaconda 同时管理 Python 版本和虚拟环境

Miniconda 和 Anaconda 都打包了 Conda 这一包管理器,二者的区别在于,Miniconda 里面只包含了 Conda、Python 和一些必备的包,是最小的 Conda 安装环境;而 Anaconda 则提供了很多额外的数据科学或者机器学习的依赖包,例如安装完成之后就可以使用 Python 的IDE Spyder,导致其安装包非常臃肿。

由于 Anaconda 中的很多工具包我们都用不上,所以建议直接 Miniconda,遇到需要的依赖的时候直接安装即可。

由于 Windows 系统没有自带 Python 安装,所以如果直接安装 Miniconda / Anaconda,系统的默认 Python 版本就会是 Miniconda / Anaconda 的 Python 版本。

Windows

  • 下载并安装 Miniconda / Anaconda,只需要按照安装提示完成安装即可,安装过程中需要注意的是添加到系统环境变量中的这一步,建议将其添加到系统环境变量(Anaconda 官方安装教程)。
  • 创建虚拟环境
conda create -n venv_name python=3.11 # 创建虚拟环境并指定 Python 版本
conda activate venv_name # 激活虚拟环境
conda deactivate # 离开虚拟环境

Ubuntu/WSL

由于 Ubuntu/WSL 在 Terminal 里操作非常方便,流程和 Windows 中相同,只是以命令行的形式进行,故而提供完整的命令行参考。

sudo apt update && sudo apt upgrade
sudo apt install wget 
wget https://repo.anaconda.com/miniconda/Miniconda3-py311_23.5.2-0-Linux-x86_64.sh # 下载 Miniconda 安装文件
sh ./Miniconda3-py311_23.5.2-0-Linux-x86_64.sh # 安装 Miniconda,需要同意用户协议

conda create -n venv_name python=3.11 # 创建虚拟环境并指定 Python 版本
conda activate venv_name # 激活虚拟环境

利用 Pyenv 管理 Python 版本,Pipenv 管理虚拟环境

Windows

  • 通过 Windows PowerShell 安装 Pyenv,然后重启电脑
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

pyenv --version # 查看 Pyenv 的版本
  • 利用 Pyenv 安装指定版本的 Python,设置默认版本 Python (Global Python)
pyenv install -l # 查看可以安装的 Python 列表
pyenv install 3.9.13
pyenv install 3.11.1
pyenv versions # 查看电脑中已安装 Python 版本

pyenv global 3.11.1 # 设置默认版本 Python
pyenv version # 查看默认版本 Python
  • 设置完 Global Python 后,需要将默认版本 Python 添加到系统环境变量中,否则在使用 Pipenv 时会报错:
C:\Users\*****\AppData\Roaming\Python\Python311\Scripts

# 如果不添加到环境变量,使用 Pipenv 时会报此错误
pipenv : 无法将“pipenv”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。
请检查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
  • 安装 Pipenv
pip install pipenv
  • Pipenv 创建虚拟环境
cd project_dir # 切换到项目文件夹
pipenv install --python 'C:\Users\*****\.pyenv\pyenv-win\versions\3.9.13\python39.exe’ # 创建虚拟环境,此时可以指定 Python 版本
pipenv shell # 启动虚拟环境
pipenv install package # 安装需要的包
exit # 离开虚拟环境

这里需要注意的是,虽然创建虚拟环境是在项目文件夹,但是不同项目的虚拟环境都在同一个目录下管理,不像  venv 会在项目文件夹下。

  • 常用命令
pipenv install package # 安装
pipenv uninstall package # 卸载
pipenv graph # 查看按照包的依赖关系
pipenv --venv # 查看虚拟环境执行文件路径 
pipenv --rm # 移除虚拟环境

Ubuntu/WSL

在 Ubuntu/WSL 中使用 Pyenv 和 Pipenv 的流程还是和 Windows 下相同,所以还是提供完整的命令行参考。

  • 首先安装 Pyenv
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.bashrc
exec "$SHELL"
  • 利用 Pyenv 安装指定版本的 Python,设置默认版本 Python (Global Python)
# Installing libraries that need for installing Python
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev
# Installing Python
pyenv install 3.9.13
pyenv install 3.11.1
pyenv versions # 查看电脑中已安装 Python 版本
pyenv global 3.11.1 # 设置默认版本 Python
pyenv version # 查看默认版本 Python
  • 安装 Pipenv
pip install pipenv # 使用 pip3 安装 pipenv
export PATH="/home/user/.local/bin:$PATH" # 添加路径到 PATH
echo "${PATH//:/$'\n'}" # show path one directory per line 
  • 利用 Pipenv 创建虚拟环境
cd project_dir
pipenv install --python 3.9 # 不用指定 Python 路径
pipenv shell # 启动虚拟环境
pipenv install package # 安装需要的包
exit # 离开虚拟环境

到这里可以总结一下,利用 Miniconda/Anaconda 管理开发环境和利用 Pyenv 和 Pipenv 管理开发环境的一个小小的区别:利用 Miniconda/Anaconda 建立虚拟环境的时候,我们指定的 Python 是在此时安装或者确认的,也就是一步到位;利用 Pipenv 建立虚拟环境的时候,我们是需要在已经安装了指定 Python 版本的基础上指定本地 Python 版本,基于此版本的 Python 来建立的虚拟环境,也就是分两步走

延申:IDE中使用虚拟环境

  • VS Code 中使用虚拟环境

Using Python Environments in Visual Studio Code

  • PyCharm 中使用虚拟环境

Configure a virtual environment | PyCharm Documentation (jetbrains.com)

  • 在 Neovim 中使用虚拟环境是作者计划中的下一篇文章。