本文为个人探索的测试方案,并非成熟的生产级解决方案
0 前言 uv 是目前 Python 生态中最快的包管理器,而 micromamba 是最轻量的 Conda 替代品,本文笔者试图将二者融合
本文仅适用于 Windows,其它系统仅供参考
1 提取包名 用当前能打开的任意一个 Python 运行下面的脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 import osimport subprocessimport jsonimport globimport platformOUTPUT_FILE = "requirements.txt" IGNORE_PKGS = { "pip" , "setuptools" , "wheel" , "distribute" , "wsgiref" , "argparse" , "python-dateutil" } def find_python_interpreters (): """自动寻找系统中所有可能的 Python 解释器路径""" python_paths = set () try : if platform.system() == "Windows" : cmd = "where python" else : cmd = "which -a python3 python" paths = subprocess.check_output(cmd, shell=True , text=True ).strip().split('\n' ) for p in paths: if p and os.path.isfile(p): python_paths.add(p.strip()) except : pass if platform.system() == "Windows" : try : py_out = subprocess.check_output("py --list-paths" , shell=True , text=True ) for line in py_out.splitlines(): if "python.exe" in line: path = line.split()[-1 ] python_paths.add(path) except : pass user_profile = os.environ.get("USERPROFILE" , "" ) search_patterns = [ r"C:\Python*\python.exe" , r"C:\Program Files\Python*\python.exe" , r"C:\Program Files (x86)\Python*\python.exe" , os.path.join(user_profile, r"AppData\Local\Programs\Python\Python*\python.exe" ), os.path.join(user_profile, r"scoop\apps\python\*\python.exe" ), ] for pattern in search_patterns: for p in glob.glob(pattern): python_paths.add(p) return sorted (list (python_paths)) def get_packages_from_python (python_path ): """提取指定 Python 的包列表""" print (f"📦 正在扫描: {python_path} ..." ) try : cmd = [python_path, "-m" , "pip" , "list" , "--format=json" , "--disable-pip-version-check" ] result = subprocess.run(cmd, capture_output=True , text=True ) if result.returncode != 0 : print (f" ⚠️ 无法读取 (可能未安装pip): {python_path} " ) return set () data = json.loads(result.stdout) pkgs = set () for item in data: name = item['name' ] if name.lower() not in IGNORE_PKGS: pkgs.add(name) print (f" ✅ 发现 {len (pkgs)} 个包" ) return pkgs except Exception as e: print (f" ❌ 出错: {e} " ) return set () def main (): interpreters = find_python_interpreters() print (f"\n🔎 找到了 {len (interpreters)} 个 Python 解释器。开始提取依赖...\n" ) all_packages = set () for py_path in interpreters: pkgs = get_packages_from_python(py_path) all_packages.update(pkgs) with open (OUTPUT_FILE, "w" , encoding="utf-8" ) as f: for pkg in sorted (all_packages): f.write(f"{pkg} \n" ) print (f"\n🎉 共合并了 {len (all_packages)} 个唯一的库,清单已保存至当前目录的: {OUTPUT_FILE} " ) if __name__ == "__main__" : main()
当遇到类似 C:\Users\Administrator\AppData\Local\Microsoft\WindowsApps\python.exe 的报错时,通常是 应用执行别名(App Execution Alias) 在起作用。这个功能会在你输入 python 时,如果没有安装 Python,自动弹出微软商店的下载页面。但问题在于这玩意经常会抢占 PATH 优先级,导致你明明装了 Python,终端里输入 python 却还是弹出应用商店。
你可以按照以下步骤禁用这个功能:
按下 🪟
搜索并点击 管理应用执行别名
在打开的列表中,找到 Python 和 Python3 (通常有两个),把它们关掉即可
准备好 requirements.txt 后就可以着手清理了
2 清理 2.1 卸载程序 使用工具把所有形如 Python 2.x.x 和 Python 3.x.x 和 Python Launcher 的应用卸载
2.2 手动清理残留文件 卸载程序通常不会删除安装的库,所以文件夹还会留在那里
根据之前的扫描结果手动删除 Python 安装到的目录
清理用户配置目录 (按 🪟+R 输入路径回车):
输入 %AppData%,删除文件夹 Python
输入 %LocalAppData%,删除文件夹 Programs\Python 和 pip
2.3 净化环境变量 这是最关键的一步,防止你在终端输入命令时指向不存在的目录。
按下 🪟
搜索并点击 编辑系统环境变量
点击 环境变量
检查 用户变量 和 系统变量 这两栏里的 Path 条目
双击 Path ,在列表里寻找并删除所有涉及 Python 的路径,例如:
D:\Python\...
D:\Python\Scripts
一路点击 确定 保存退出
3 安装环境 3.1 创建目录结构 打开 PowerShell,运行以下命令创建基础文件夹:
1 2 3 New-Item -ItemType Directory -Path "D:\Python\uv" -Force New-Item -ItemType Directory -Path "D:\Python\micromamba" -Force New-Item -ItemType Directory -Path "D:\Python\uv_cache" -Force
3.2 配置环境变量 配置环境变量来修改下载的 Python 版本和缓存的所在位置
在 PowerShell 中逐行复制并运行以下命令:
1 2 3 4 5 6 7 8 9 10 11 [System.Environment ]::SetEnvironmentVariable("UV_INSTALL_DIR" , "D:\Python\uv" , "User" ) [System.Environment ]::SetEnvironmentVariable("UV_PYTHON_INSTALL_DIR" , "D:\Python\uv\python" , "User" ) [System.Environment ]::SetEnvironmentVariable("UV_CACHE_DIR" , "D:\Python\uv_cache" , "User" ) [System.Environment ]::SetEnvironmentVariable("MAMBA_ROOT_PREFIX" , "D:\Python\micromamba" , "User" )
运行完上述命令后关闭当前 PowerShell 窗口,重新打开一个新的使设置生效
3.3 安装 uv 重新打开 PowerShell 运行安装脚本:
1 powershell -c "irm https://astral.sh/uv/install.ps1 | iex"
安装完成后,重启终端并执行 uv --version,如果出现了形如 uv x.x.x (xxxxxxxxx xxxx-xx-xx) 的输出就说明安装成功了
3.4 安装 micromamba micromamba 是单个文件,手动下载并初始化
下载与解压:
访问 https://micro.mamba.pm/api/micromamba/win-64/latest 下载最新版,解压缩下载到的压缩包后将 Library\bin 文件夹下的 micromamba.exe 移动到 D:\Python\micromamba\ 内
初始化 Shell: 在 D:\Python\micromamba 目录下逐行运行以下 PowerShell 命令:
1 2 .\micromamba.exe shell init -s powershell .\micromamba shell init -s cmd.exe
3.5 将 micromamba 添加到系统 PATH 运行 PowerShell 命令:
1 [Environment]::SetEnvironmentVariable('Path', ([Environment]::GetEnvironmentVariable('Path','User') -replace ';$','') + ';D:\Python\micromamba', 'User')
将 D:\Python\micromamba 改为 micromamba.exe 所在目录
4 换源 打开 PowerShell (必须是 PowerShell,因为它能设置永久环境变量)
4.1 配置 micromamba 源 将以下命令逐行复制并粘贴到 PowerShell 中运行:
1 2 3 micromamba config append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge / micromamba config append channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/ micromamba config set channel_priority flexible
运行 micromamba config list 查看最终配置
4.2 配置 uv 源 将以下命令复制并粘贴到 PowerShell 中运行:
1 [System.Environment ]::SetEnvironmentVariable("UV_INDEX_URL" , "https://pypi.tuna.tsinghua.edu.cn/simple" , "User" )
然后重启终端使其生效
5 使用 micromamba 创建主环境 5.1 创建环境 创建一个名为 main 的全局环境作为主要的 Python 工作区
在新打开的终端中运行以下命令(这将在 D:\Python\micromamba\envs\ 目录下创建一个名为 main 的新环境)
1 micromamba create -n main python=3.12 -y
5.2 激活环境 在任意目录激活环境:
1 micromamba activate main
6 使用 uv 安装库 在 main 环境激活的状态下用 uv 将之前备份好的库全部安装进去 在已激活的 (main) 环境中,运行以下命令:
1 uv pip install -r requirements.txt