当前位置: 首页 > article >正文

python virtualenv

# Python版本管理工具pyenv一个老码农的实践笔记它是什么说到Python版本管理很多人第一个想到的就是pyenv。这东西说白了就是个Python版本切换器但又不只是个切换器。打个比方你家里有好几把不同尺寸的螺丝刀pyenv就像是那个能让你随便换螺丝刀头的工具箱但它还顺便帮你把螺丝刀都收好、保养好。从技术上讲pyenv是一个shell级别的Python版本管理工具。它通过修改环境变量PATH来实现Python版本的切换不会动你系统里已经安装的Python。它的工作原理挺巧妙的——在你执行python命令时通过shell的路径查找机制拦截掉系统默认的Python转而使用你指定的版本。它能做什么pyenv最核心的价值在于解决那个老生常谈的问题不同项目需要不同Python版本。比如你在维护一个老项目它还在用Python 2.7而新项目已经要用Python 3.12了。用pyenv你可以在同一台机器上同时装好这两个版本随时切换。除了基本的版本切换pyenv还能做几件挺实用的事情自动切换版本。你在项目根目录放一个.python-version文件里面写上版本号。进到这个目录pyenv自动切到对应版本出去了自动切回全局设置。这个特性我每天都用特别省心。安装多个Python版本。用pyenv install命令可以安装从2.1到3.12的几乎所有版本。它会自动处理编译依赖大部分情况下你只要等着就好。配合virtualenv使用。虽然pyenv本身没虚拟环境功能但有pyenv-virtualenv这个插件能让虚拟环境管理和版本管理完美结合。怎么使用安装pyenv其实挺简单的但有几个小坑要注意。我推荐用git clone的方式gitclone https://github.com/pyenv/pyenv.git ~/.pyenv然后要把pyenv加到shell的启动文件里。用bash的话在.bashrc加这几行exportPYENV_ROOT$HOME/.pyenvexportPATH$PYENV_ROOT/bin:$PATHeval$(pyenv init -)这里有个常见的坑eval $(pyenv init -)这行必须放在最后因为它要确保pyenv能接管python命令。基本命令就那么几个# 查看可安装的版本pyenvinstall--list# 安装某个版本pyenvinstall3.12.0# 设置全局版本pyenv global3.12.0# 设置某个目录的版本pyenvlocal3.11.5# 查看已安装的版本pyenv versions说到安装在中国网络环境下pyenv install经常因为下载慢而失败。有个小技巧先用wget或者迅雷把Python源码包下载到~/.pyenv/cache目录然后再安装。或者设置环境变量用国内的镜像源。最佳实践用了这么多年pyenv总结几条经验全局版本别设太高。很多人图新鲜设个Python 3.12当全局版本结果发现好多老工具不兼容。我一般全局设3.10或者3.11既稳定又能用最新的特性。项目版本用文件锁定。在项目的根目录创建.python-version写清楚版本号。最好把这个文件也提交到git仓库这样团队其他人拉代码后进目录就自动切换好了。结合pyenv-virtualenv使用。每个项目建独立的虚拟环境命名规则建议是“项目名-Python版本”比如myproject-3.11.5。这样既清晰又方便管理。定期清理不用版本。pyenv uninstall删掉那些不再维护的老版本。但小心生产环境的项目依赖的版本一定要保留。遇到编译问题别慌。pyenv install失败大多是因为缺少某些系统库。Ubuntu上缺什么就apt-get install什么macOS的话用brew。实在不行Google一下错误信息八成有人遇到过。和同类技术对比Python版本管理这块还有几个选手值得一提。conda。这是Anaconda带的专门为数据科学场景设计。它不光管Python版本还能管理R、Julia这些语言以及一大堆科学计算库。但是conda有点重装个东西能带上一堆依赖。如果你只是写Web应用或者脚本用conda有点杀鸡用牛刀。virtualenv。这是最老牌的虚拟环境工具。但它只管虚拟环境不管Python版本。用它的话你得先自己装好不同版本的Python然后用virtualenv -p指定。相比之下pyenv把版本管理和虚拟环境管理结合得更自然。docker。有人用Docker来隔离Python环境这当然可行而且隔离得更彻底。但代价是每次改代码都得重新build镜像开发调试的体验不如直接在宿主机上操作。Docker更适合部署场景。poetry。这个工具野心比较大它想包揽依赖管理、打包发布、虚拟环境管理所有事情。pyenv加pip的用法在poetry面前显得有点原始。但是poetry的学习曲线比较陡而且有时候会做一些出乎意料的操作。我倾向于在项目管理比较规范的大项目上用poetry自己写的小工具还是用pyenv加pip这种简单组合。# 聊virtualenv之前得先说说Python项目依赖管理的那点破事。你肯定遇到过项目A需要Flask 1.0项目B需要Flask 2.0结果pip一装两个项目互相打架最后所有东西都乱成一锅粥。这就好比你给房间装了十种不同牌子的路由器WiFi信号互相干扰谁都没法好好上网。virtualenv就是来解决这个问题的——它为每个Python项目建一个独立的小隔间每个隔间里装自己的Python解释器和第三方库互不打扰。先说virtualenv到底是什么。它本质上是个脚本工具能在你的系统里克隆一份纯粹的Python环境。这个克隆版不包含任何第三方库只有最基础的Python解释器和标准库。你在这个环境里装的任何包都只影响这个环境系统其他的Python环境碰都不碰一下。你会发现自己的项目目录下会多出一个名为venv或者env的文件夹里面bin子目录下有个python可执行文件这就是它的内核。它能做的其实就是两件事隔离和管理。隔离大家都懂但管理这块容易被忽视。比如你项目A依赖Django 3.2项目B依赖Django 4.0你不需要在系统里装两个版本的Django。你只需要为项目A建一个virtualenv装3.2为项目B建另一个装4.0两个环境井水不犯河水。更妙的是你还可以通过pip freeze把这个环境里所有包的版本号导成一个requirements.txt文件别人拿到这个文件后只要pip install -r requirements.txt就能完全复刻你的环境。这就跟做饭时留下菜谱一样别人照着做味道八九不离十。具体怎么使从Python 3.3开始标准库里已经自带了venv模块不用再pip install virtualenv了。我习惯直接在项目根目录下执行python3 -m venv .venv这个命令会在当前目录生成一个叫.venv的文件夹很多人喜欢叫venv或者env我选dot开头因为Linux下默认隐藏看着清爽。然后激活它在Mac或Linux上跑source .venv/bin/activate在Windows上跑.venv\Scripts\activate。激活后终端前面会多个(.venv)前缀这时候你执行python或者pip用的都是这个环境里的解释器。干完活想退出直接敲deactivate就行。有一个很容易掉进去的小坑千万别把这个.venv文件夹提交到Git仓库里去。.gitignore里加上它只用一行省得同事拉下你一整个环境的缓存文件动辄几十MB的垃圾。聊到最佳实践有个习惯我养成了很多年不管项目多小哪怕只有几百行代码只要我想在里面装任何第三方库第一时间就先建virtualenv。这个习惯救过我不少次。有一次接了个老项目里面用的还是Python 2.7和Django 1.11如果当时我图省事直接在系统环境里装东西那后面升级或者维护新项目时肯定会因为包版本冲突搞得焦头烂额。还有建议把你每个项目用的virtualenv命名统一比如都用.venv这样你的编辑器比如VS Code或PyCharm能自动识别并切换到正确的Python解释器。如果你写项目A编辑器却自动关联了项目B的virtualenvimport时会报找不到模块——这种诡异问题遇过一次就知道多折腾了。说到同类技术不得不提conda。conda不仅管Python还能管数据科学常用的C库比如numpy底层用的那些。简单类比的话virtualenv就是个专攻Python的装修队只动你Python环境这块conda像个全能家政公司厨房厕所全包了但体量也大。如果你的项目纯Pythonvirtualenv更轻量、更专注。有些人还喜欢用pipenv它把virtualenv和pip包管理揉在一起思路挺好但实际用起来总感觉多了一堆Pipfile.lock文件要维护加减包时也容易踩坑。还有一个叫poetry的做得更现代化用pyproject.toml替代了requirements.txt对于有强迫症的爱整洁的程序员来说算一种享受但学习曲线比virtualenv陡。我个人的经验是如果只是个写几个脚本或者一个web应用的小团队virtualenv完全够用不出怪事、不出新概念。如果团队里数据科学项目多或者要部署到不同操作系统上可以听听conda的建议。说到底virtualenv就是Python工具箱里特别不起眼、但缺了它会寸步难行的小扳手。它不像框架那么炫也不像调试工具那么复杂但有了它你的项目才能在一个干净的天地里自由生长否则只会陷入依赖地狱什么都写不安稳。说到底选哪个工具看你具体需求。如果只是需要偶尔在不同Python版本间切换pyenv就够用了。如果要处理复杂的科学计算环境conda更合适。要是团队项目需要严格的依赖锁定poetry值得一试。工具嘛够用就好不用追求花里胡哨。

相关文章:

python virtualenv

# Python版本管理工具pyenv:一个老码农的实践笔记 它是什么 说到Python版本管理,很多人第一个想到的就是pyenv。这东西说白了就是个Python版本切换器,但又不只是个切换器。打个比方,你家里有好几把不同尺寸的螺丝刀,py…...

51单片机AD转换实战:手把手教你用XPT2046和PCF8591读取传感器数据(附完整代码)

51单片机AD转换实战:从XPT2046到PCF8591的传感器数据采集全解析 在嵌入式开发领域,模拟信号采集是连接物理世界与数字系统的关键桥梁。对于51单片机开发者而言,掌握XPT2046和PCF8591这两款经典AD转换芯片的应用,就如同获得了一把打…...

告别写代码!用Shader Graph节点5分钟做个动态溶解效果(URP教程)

5分钟用Shader Graph打造动态溶解特效:URP实战指南 在游戏开发中,物体溶解效果是一种极具视觉冲击力的常见特效——从敌人被击败时的灰飞烟灭,到场景元素的魔法消失,这种效果能为游戏体验增添不少亮点。传统Shader编写需要掌握HLS…...

示波器探针原理、类型与选型指南

1. 示波器探针基础概念解析示波器探针是电子测量系统中至关重要的连接环节,它构成了被测电路与示波器之间的桥梁。理解探针的工作原理和特性对于获得准确的测量结果至关重要。1.1 探针的本质功能示波器探针本质上是一个信号传输网络,主要实现三个核心功能…...

VSCode插件GPT Runner深度评测:除了代码补全,它如何帮你管理API Key和优化提示词?

VSCode插件GPT Runner深度评测:除了代码补全,它如何帮你管理API Key和优化提示词? 在AI编程助手日益普及的今天,开发者们早已不满足于基础的代码补全功能。当你在多个项目间切换,面对不同的API Key管理需求&#xff0c…...

从ADOP官网案例出发,拆解CWDM/DWDM在实际网络部署中的配置流程与避坑指南

企业光纤网络升级实战:CWDM与DWDM选型配置全流程解析 当某跨国企业华东区数据中心需要将原有10Gbps骨干网升级至100Gbps时,技术团队面临的第一个抉择是:选择CWDM还是DWDM方案?这个问题没有标准答案,却直接关系到数百万…...

5分钟彻底清理Windows 11:Win11Debloat终极免费优化指南

5分钟彻底清理Windows 11:Win11Debloat终极免费优化指南 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and …...

Burp Suite Intruder Payload配置避坑指南:从字典选择到结果过滤,让你的暴力破解效率翻倍

Burp Suite Intruder Payload配置避坑指南:从字典选择到结果过滤,让你的暴力破解效率翻倍 在Web应用安全测试中,暴力破解和模糊测试是发现弱点的常见手段。但很多中级用户在使用Burp Suite Intruder时,常常陷入"广撒网"…...

ARM IM-PD1接口模块架构与嵌入式开发实战

1. ARM Integrator/IM-PD1接口模块深度解析在嵌入式系统开发领域,接口模块的设计质量直接影响着整个系统的扩展能力和稳定性。作为ARM Integrator开发平台的重要组成部分,IM-PD1接口模块为开发者提供了丰富的外设连接能力。本文将深入剖析这款经典接口模…...

ViT 实战:Patch Embedding + Transformer + CIFAR-10 分类

文章目录 ViT 实战:Patch Embedding + Transformer + CIFAR-10 分类 一、ViT 架构 二、环境 三、模型 3.1 PatchEmbedding 3.2 TransformerEncoder 3.3 ViT 四、数据 (CIFAR-10) 五、训练 六、结果 七、使用预训练权重 八、可视化 九、ViT vs CNN 对比 十、总结 代码链接与详细…...

远程办公新选择:除了腾讯云,ToDesk云电脑如何成为我的主力‘云主机’(含分屏、外设连接技巧)

远程办公生产力革命:ToDesk云电脑的全场景实战指南 站在星巴克角落用平板电脑调试3D建模参数,机场候机时掏出手机继续写代码,家中老旧笔记本突然流畅运行4K视频剪辑——这些看似矛盾的场景,正随着云电脑技术的成熟变得触手可及。不…...

地平线推出双五星合规高集成行泊一体方案;芯擎科技发布5nm车规舱驾融合芯片;魔视智能首发国产芯行泊一体域控

芯擎科技发布5nm车规舱驾融合芯片200TOPS算力支持大模型牛喀网获悉,芯擎科技发布5nm车规级舱驾融合芯片“龍鹰二号”,计划2027年第一季度启动适配。该芯片面向AI舱驾融合场景设计,采用柔性架构,可适配不同层级的中央计算平台&…...

STM32串口高效通信实战:用HAL_UART_Transmit_IT+DMA打造不卡顿的日志输出系统

STM32串口高效通信实战:用HAL_UART_Transmit_ITDMA打造不卡顿的日志输出系统 在实时控制系统开发中,日志输出是调试和状态监控的重要手段。但当系统需要处理电机控制、传感器数据采集等高实时性任务时,传统的阻塞式串口打印往往会成为性能瓶颈…...

如何快速解密网易云音乐NCM格式:ncmdump终极免费指南

如何快速解密网易云音乐NCM格式:ncmdump终极免费指南 【免费下载链接】ncmdump 项目地址: https://gitcode.com/gh_mirrors/ncmd/ncmdump 你是否曾经遇到过这样的困扰?在网易云音乐精心收藏的歌曲,下载到本地后却无法在其他播放器或设…...

保姆级教程:在STM32F407上跑通BACnet-MSTP协议栈(附Yabe上位机调试实录)

从零构建STM32F407的BACnet-MSTP智能设备:协议栈移植与Yabe实战指南 当工业物联网遇上嵌入式系统,BACnet协议栈成为连接两者的关键桥梁。想象一下,你手中的STM32F407开发板突然具备了与楼宇自动化系统对话的能力——通过485总线发送标准化数据…...

CPU ? DRAM(内存总线)的可持续数据传输带宽

1 实用案例 1.1 表格样式生成 本示例用于生成包含富文本样式与单元格背景色的Word表格文档。 模板内容: 渲染代码: # python-docx-template/blob/master/tests/comments.py from docxtpl import DocxTemplate, RichText # data: python-docx-temp…...

Windows系统盘C盘红了别慌!实测Alist v3.42.0挂载百度网盘WebDAV的避坑指南

Windows系统盘C盘爆满急救指南:AlistWebDAV实战扩容方案 C盘飘红是每个Windows用户都可能遇到的噩梦——系统卡顿、软件无法更新、甚至蓝屏崩溃。当清理垃圾文件和转移文档都无济于事时,挂载云存储作为虚拟磁盘成为拯救系统性能的终极方案。本文将基于Al…...

当AI能写95%的代码,程序员还剩什么价值?

➡️曾经:执行力为王 过去,程序员每天60-70%的时间都花在execution上,琢磨如何把业务逻辑用代码实现。那时候,熟练掌握工作所需的编程语言和framework非常重要,每个语言和框架都有差异,需要时间学习适应&a…...

国产芯协同:首传微高速传输牵手芯擎大算力

2026年4月24日,2026北京国际汽车展览会期间,在富瀚微电子董事长杨小奇先生与芯擎科技创始人兼CEO汪凯博士的共同见证下,首传微电子联合创始人兼CEO张晨光先生与芯擎科技COO郑敏先生正式签署全面战略合作协议。双方将围绕A-PHY芯片互联互通、车…...

MySQL 核心进阶:开窗函数、事务、视图、索引与范式

MySQL 核心进阶:开窗函数、事务、视图、索引与范式 在掌握基本的多表查询后,要想真正高效地使用 MySQL,就必须理解数据库的设计规范(范式)、保证数据一致性的事务机制、优化查询性能的索引、简化复杂查询的视图&#x…...

FF14过场动画跳过插件:3分钟快速配置完全指南

FF14过场动画跳过插件:3分钟快速配置完全指南 【免费下载链接】FFXIV_ACT_CutsceneSkip 项目地址: https://gitcode.com/gh_mirrors/ff/FFXIV_ACT_CutsceneSkip 还在为《最终幻想14》副本中重复的过场动画浪费时间吗?FFXIV_ACT_CutsceneSkip插件…...

多表关联大平层转JSON树形结构

比如把这种平层数据转化为下面这种树形结构树 [{"id": 2,"parentId": null,"name": "有声书","type": "category","children": [{"id": 1,"parentId": 2,"name": "…...

自动驾驶/机器人定位必知:ECEF、ENU、UTM坐标系到底该怎么选?一篇讲清应用场景

自动驾驶与机器人定位:ECEF、ENU、UTM坐标系工程选型指南 当你在深夜调试一台自动驾驶车辆的定位模块时,突然发现GPS数据在ENU坐标系下表现良好,但切换到UTM后却出现了微妙的偏移——这种场景对机器人算法工程师来说再熟悉不过。坐标系选择不…...

Sa-Token v.. 发布 ,正式支持 Spring Boot 、新增 Jackson/Snack 插件适配

先回顾:三次握手(建立连接)核心流程(实际版) 为了让挥手流程衔接更顺畅,咱们先快速回顾三次握手的实际核心,避免上下文脱节: 第一步(客户端→服务器)&#xf…...

量子计算流体动力学:原理、挑战与噪声缓解策略

1. 量子计算流体动力学概述量子计算流体动力学(QCFD)是近年来兴起的前沿交叉领域,它试图利用量子计算机的独特优势来解决传统CFD方法面临的"维数灾难"问题。在经典计算机上,直接数值模拟(DNS)需要网格分辨率达到Kolmogo…...

Win11Debloat:3步彻底优化Windows系统性能与隐私设置

Win11Debloat:3步彻底优化Windows系统性能与隐私设置 【免费下载链接】Win11Debloat A simple, lightweight PowerShell script that allows you to remove pre-installed apps, disable telemetry, as well as perform various other changes to declutter and cus…...

Python自动化脚本并发控制实战

想同时处理1000个任务,却担心内存爆炸?想让下载速度翻倍,又怕被服务器封IP?本文详细介绍Python中的并发编程技术——从threading到asyncio,从进程池到协程,让你轻松掌握高并发场景下的Python自动化脚本开发。 什么时候需要并发 并发编程不是银弹,滥用反而会让代码更复…...

每日60秒读懂世界:2026年4月28日|劳动表彰、工业利润、消费回暖、新能源突破与全球局势

🔥个人主页:杨利杰YJlio❄️个人专栏:《Sysinternals实战教程》《Windows PowerShell 实战》《WINDOWS教程》《IOS教程》《微信助手》《锤子助手》 《Python》 《Kali Linux》 《那些年未解决的Windows疑难杂症》🌟 让复杂的事情更…...

NEO-F10N-00B,实现米级精度并提供安全GNSS的无线模块

简介今天我要向大家介绍的是 u-blox 的无线模块——NEO-F10N-00B。它基于 u-blox F10 双频 GNSS 技术,利用 L1/L5 频段并采用专有的双频多径抑制技术,在城市环境中能够提供可靠的米级定位精度。该模块具备卓越的射频抗干扰能力,支持安全启动、…...

Anaconda环境下的忍者像素绘卷高级调参指南

Anaconda环境下的忍者像素绘卷高级调参指南 1. 环境准备与模型部署 在开始调参之前,我们需要确保环境配置正确。Anaconda作为Python环境管理工具,能有效隔离不同项目的依赖关系。 首先通过Anaconda Navigator或命令行创建一个新的Python环境&#xff…...