python 多版本管理(pyenv)

        上篇文章提到了uv 可以进行 pip 包管理和 虚拟环境构建,其实,对于我们来说,还有一个需求,就是多个python环境进行管理,刚好找了下,发现了这个pyenv工具。话不多少,直接开始。

        pyenv(Windows 下为pyenv-win)是Python 版本管理神器,核心解决「多 Python 版本共存、版本冲突、环境不一致」的痛点,让你在一台电脑上无痛切换不同 Python 版本,不用手动改环境变量、卸载重装,是 Python 开发的必备工具。

       

一、pyenv可以干什么事情?

1.1 多版本 Python 共存(最核心)

        手动管理多个 Python 版本时,你需要反复修改环境变量、记住不同版本的安装路径,极易混乱;而 pyenv 能:

  • 一键安装 Python 2.7/3.6/3.10/3.12 等任意版本(包括 Anaconda、Miniconda、PyPy 等衍生版本);
  • 所有版本隔离存储在~/.pyenv目录(Windows:%USERPROFILE%\.pyenv),互不干扰;
  • 无需卸载现有 Python,系统自带的 Python 也不会被修改 / 覆盖。

1.2. 灵活切换版本(3 种维度,按需选择)

切换维度作用范围适用场景
全局版本整个系统(所有目录)设置系统默认 Python 版本(比如日常开发用 3.10)
局部版本当前目录 + 子目录项目专属版本(比如给 A 项目设 3.9,B 项目设 3.11)
临时版本仅当前终端会话临时测试某个版本(比如快速验证代码在 3.8 下是否兼容)

1.3. 隔离不同版本的依赖包

不同 Python 版本的pip包是完全隔离的,不会出现「装了 3.10 的 Django,3.9 里也能看到」的混乱:

  • 比如 Python 3.8 装Django 4.0,Python 3.10 装Django 5.0,两者互不影响;
  • 解决「升级一个版本的包,导致另一个项目报错」的问题。

1. 4. 无痛安装 / 卸载 Python 版本

不用手动去 Python 官网下载安装包、手动配置路径、担心卸载残留:

  • 安装:一行命令pyenv install 3.10.11,自动下载、安装、配置;
  • 卸载:一行命令pyenv uninstall 3.10.11,彻底删除该版本及对应依赖,无残留;
  • 安装慢?手动下载安装包到缓存目录,pyenv 会自动识别,不用改命令。

二、pyenv安装

windows系统

powershell -ExecutionPolicy Bypass -Command "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"

✨ 如果你已经下载了install-pyenv-win.ps1到 Downloads 目录,直接执行:

cd C:\Users\juxuan\Downloads powershell -ExecutionPolicy Bypass -File .\install-pyenv-win.ps1

✨ 脚本会自动:

  • 将 pyenv-win 安装到 %USERPROFILE%\.pyenv\pyenv-win(即C:\Users\juxuan\.pyenv\pyenv-win);
  • 配置环境变量(PYENV_ROOTPATH添加binshims路径)。

如果你不能翻墙,脚本下载失败,我这里也有脚本内容,直接保存为install-pyenv-win.ps1。

<# .SYNOPSIS Installs pyenv-win .DESCRIPTION Installs pyenv-win to $HOME\.pyenv If pyenv-win is already installed, try to update to the latest version. .PARAMETER Uninstall Uninstall pyenv-win. Note that this uninstalls any Python versions that were installed with pyenv-win. .INPUTS None. .OUTPUTS None. .EXAMPLE PS> install-pyenv-win.ps1 .LINK Online version: https://pyenv-win.github.io/pyenv-win/ #> param ( [Switch] $Uninstall = $False ) $PyEnvDir = "${env:USERPROFILE}\.pyenv" $PyEnvWinDir = "${PyEnvDir}\pyenv-win" $BinPath = "${PyEnvWinDir}\bin" $ShimsPath = "${PyEnvWinDir}\shims" Function Remove-PyEnvVars() { $PathParts = [System.Environment]::GetEnvironmentVariable('PATH', "User") -Split ";" $NewPathParts = $PathParts.Where{ $_ -ne $BinPath }.Where{ $_ -ne $ShimsPath } $NewPath = $NewPathParts -Join ";" [System.Environment]::SetEnvironmentVariable('PATH', $NewPath, "User") [System.Environment]::SetEnvironmentVariable('PYENV', $null, "User") [System.Environment]::SetEnvironmentVariable('PYENV_ROOT', $null, "User") [System.Environment]::SetEnvironmentVariable('PYENV_HOME', $null, "User") } Function Remove-PyEnv() { Write-Host "Removing $PyEnvDir..." If (Test-Path $PyEnvDir) { Remove-Item -Path $PyEnvDir -Recurse } Write-Host "Removing environment variables..." Remove-PyEnvVars } Function Get-CurrentVersion() { $VersionFilePath = "$PyEnvDir\.version" If (Test-Path $VersionFilePath) { $CurrentVersion = Get-Content $VersionFilePath } Else { $CurrentVersion = "" } Return $CurrentVersion } Function Get-LatestVersion() { $LatestVersionFilePath = "$PyEnvDir\latest.version" (New-Object System.Net.WebClient).DownloadFile("https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/.version", $LatestVersionFilePath) $LatestVersion = Get-Content $LatestVersionFilePath Remove-Item -Path $LatestVersionFilePath Return $LatestVersion } Function Main() { If ($Uninstall) { Remove-PyEnv If ($? -eq $True) { Write-Host "pyenv-win successfully uninstalled." } Else { Write-Host "Uninstallation failed." } exit } $BackupDir = "${env:Temp}/pyenv-win-backup" $CurrentVersion = Get-CurrentVersion If ($CurrentVersion) { Write-Host "pyenv-win $CurrentVersion installed." $LatestVersion = Get-LatestVersion If ($CurrentVersion -eq $LatestVersion) { Write-Host "No updates available." exit } Else { Write-Host "New version available: $LatestVersion. Updating..." Write-Host "Backing up existing Python installations..." $FoldersToBackup = "install_cache", "versions", "shims" ForEach ($Dir in $FoldersToBackup) { If (-not (Test-Path $BackupDir)) { New-Item -ItemType Directory -Path $BackupDir } Move-Item -Path "${PyEnvWinDir}/${Dir}" -Destination $BackupDir } Write-Host "Removing $PyEnvDir..." Remove-Item -Path $PyEnvDir -Recurse } } New-Item -Path $PyEnvDir -ItemType Directory $DownloadPath = "$PyEnvDir\pyenv-win.zip" (New-Object System.Net.WebClient).DownloadFile("https://github.com/pyenv-win/pyenv-win/archive/master.zip", $DownloadPath) Start-Process -FilePath "powershell.exe" -ArgumentList @( "-NoProfile", "-Command `"Microsoft.PowerShell.Archive\Expand-Archive -Path \`"$DownloadPath\`" -DestinationPath \`"$PyEnvDir\`"`"" ) -NoNewWindow -Wait Move-Item -Path "$PyEnvDir\pyenv-win-master\*" -Destination "$PyEnvDir" Remove-Item -Path "$PyEnvDir\pyenv-win-master" -Recurse Remove-Item -Path $DownloadPath # Update env vars [System.Environment]::SetEnvironmentVariable('PYENV', "${PyEnvWinDir}\", "User") [System.Environment]::SetEnvironmentVariable('PYENV_ROOT', "${PyEnvWinDir}\", "User") [System.Environment]::SetEnvironmentVariable('PYENV_HOME', "${PyEnvWinDir}\", "User") $PathParts = [System.Environment]::GetEnvironmentVariable('PATH', "User") -Split ";" # Remove existing paths, so we don't add duplicates $NewPathParts = $PathParts.Where{ $_ -ne $BinPath }.Where{ $_ -ne $ShimsPath } $NewPathParts = ($BinPath, $ShimsPath) + $NewPathParts $NewPath = $NewPathParts -Join ";" [System.Environment]::SetEnvironmentVariable('PATH', $NewPath, "User") If (Test-Path $BackupDir) { Write-Host "Restoring Python installations..." Move-Item -Path "$BackupDir/*" -Destination $PyEnvWinDir } If ($? -eq $True) { Write-Host "pyenv-win is successfully installed. You may need to close and reopen your terminal before using it." } Else { Write-Host "pyenv-win was not installed successfully. If this issue persists, please open a ticket: https://github.com/pyenv-win/pyenv-win/issues." } } Main 

三、pyenv使用方法

1. 查看可安装的 Python 版本

列出所有官方可安装的 Python 版本(含 3.x、2.x、anaconda 等):

pyenv install --list # 简写:pyenv install -l

👉 筛选常用版本(比如只看 3.10 开头):

pyenv install -l | findstr "3.10" # Windows # pyenv install -l | grep "3.10" # Linux/macOS
2. 安装指定版本的 Python
# 示例:安装Python 3.10.11 pyenv install 3.10.11
3. 查看已安装的 Python 版本

列出本地所有已安装的 Python 版本(*标记当前生效版本):

pyenv versions
4. 切换 Python 版本(核心)

pyenv支持 3 种维度的版本切换,优先级:临时版本 > 局部版本 > 全局版本

(1)全局版本(系统级,所有目录生效)

设置后整个系统默认使用该版本(重启终端生效):

# 示例:设置全局版本为3.10.11 pyenv global 3.10.11 
(2)局部版本(目录级,仅当前目录 / 子目录生效)

针对项目目录单独设置版本(会在目录下生成.python-version文件,提交到 Git 可同步团队版本):

# 进入项目目录 cd C:\Users\juxuan\my_project # 设置局部版本为3.9.18 pyenv local 3.9.18 

👉 取消局部版本:

pyenv local --unset 
(3)临时版本(终端会话级,仅当前终端生效)

仅在当前终端窗口生效,关闭后恢复:

# 示例:临时使用3.8.19 pyenv shell 3.8.19 

👉 取消临时版本:

pyenv shell --unset
5. 验证版本是否生效

设置版本后,执行以下命令确认:

# 查看Python版本(pyenv接管后的版本) python --version # 查看pip版本(对应当前Python) pip --version
6. 卸载指定版本的 Python
# 示例:卸载3.8.19 pyenv uninstall 3.8.19

四、其他常用命令

命令作用
pyenv rehash重新生成版本映射(安装 / 卸载版本后建议执行,避免命令找不到)
pyenv which python查看当前python命令的实际路径
pyenv root查看 pyenv 的安装根目录(Windows 默认:% USERPROFILE%.pyenv)

Read more

Trae IDE 安装与使用保姆级教程:字节跳动的 AI 编程神器

一、Trae 是什么? Trae(发音 /treɪ/)是字节跳动推出的 AI 原生集成开发环境(AI IDE),于 2025 年 1 月正式发布。与传统的 IDE + AI 插件组合不同,Trae 从底层架构上就将 AI 能力深度集成,实现了真正意义上的"AI 主导开发"。 核心定位 Trae 以 “自主智能体(Agent)” 为核心定位,彻底重构了传统开发流程: * Chat 模式:智能代码补全、问答、解释和优化 * Builder 模式:自然语言一键生成完整项目框架 * SOLO 模式:AI 自主规划并执行开发任务 版本划分 版本定位核心特色适用人群Trae

By Ne0inhk

mac上微信最新v4以上版客户端多开教程,亲测可用

在 macOS 上实现 微信 4.0 及以上版本的多开(双开、三开甚至更多),目前最可靠的方法是: 复制官方微信应用 → 修改 Bundle Identifier → 重新签名 → 启动独立实例。 ⚠️ 重要前提与风险提示: ✅ 必须使用 微信官网下载的 .dmg 安装包(https://weixin.qq.com/mac),App Store 版本无法多开。 ❌ 微信官方禁止多开,存在封号风险(实测 Mac 端风险较低,但建议主号慎用)。 🔁 每次微信更新后,副本会失效,需重新操作或重建。 ✅ 最新通用多开教程(适用于微信 4.0 ~ 4.0.6+) 第一步:确认并准备微信 1. 卸载 App

By Ne0inhk
Flutter 三方库 m_map 的鸿蒙化适配指南 - 实现具备嵌套合并与动态路径查找的增强型 Map 处理、支持端侧复杂配置项的高阶变换实战

Flutter 三方库 m_map 的鸿蒙化适配指南 - 实现具备嵌套合并与动态路径查找的增强型 Map 处理、支持端侧复杂配置项的高阶变换实战

欢迎加入开源鸿蒙跨平台社区:https://openharmonycrossplatform.ZEEKLOG.net Flutter 三方库 m_map 的鸿蒙化适配指南 - 实现具备嵌套合并与动态路径查找的增强型 Map 处理、支持端侧复杂配置项的高阶变换实战 前言 在进行 Flutter for OpenHarmony 的复杂配置管理、动态 UI 属性注入或大型 JSON 报表解析开发时,原生 Dart 的 Map 往往显得过于基础。如何优雅地实现两个深度嵌套 Map 的递归合并?如何通过“点号路径(Dot Notation)”快速访问深层属性?m_map 是一款专为 Map 处理性能与灵活性优化的增强库。本文将探讨如何在鸿蒙端构建极致、敏捷的键值对处理模型。 一、原直观解析 / 概念介绍 1.

By Ne0inhk
【2026 最新】Mac 终端神器 Homebrew 完全指南:从安装、换源加速到核心命令速查(Mac 版)

【2026 最新】Mac 终端神器 Homebrew 完全指南:从安装、换源加速到核心命令速查(Mac 版)

Homebrew 是 macOS(以及 Linux)上一个极其流行的包管理工具。你可以把它形象地理解为一个“命令行应用商店”。 它的核心使命是解决在 macOS 上安装、更新和管理软件的繁琐问题,因此被誉为 “macOS 缺失的包管理器” (The missing package manager for macOS)。 一、前言介绍 为什么需要 Homebrew? 在没有 Homebrew 的时代,在 macOS 上管理开发工具(如 Git, Python, Node.js)通常很麻烦: * 下载麻烦:需要去各个软件官网寻找安装包。 * 依赖复杂:软件依赖的其他库需要手动安装和配置。 * 管理困难:升级和卸载软件容易残留文件,难以追踪。 Homebrew 彻底改变了这一现状,通过简单的命令(如 brew install

By Ne0inhk