视频加载失败

Python 基础入门与环境配置:venv 虚拟环境、pip 使用教程与 requirements 详解

10559 字
53 分钟
Python 基础入门与环境配置:venv 虚拟环境、pip 使用教程与 requirements 详解
Python 基础入门与环境配置:venv 虚拟环境、pip 使用教程与 requirements 详解

对于每一位涉足自动化脚本、数据分析或后端开发的工程师而言,正确搭建 Python 运行时与依赖管理体系,是写出高可用生产代码的第一道分水岭。许多初学者甚至具有一定经验的开发者,往往在刚刚接触 Python 时忽视了环境隔离的重要性,习惯于在操作系统全局环境中直接通过 pip install 随意安装依赖。随着开发周期的推移,不同历史项目对第三方库版本的互斥需求不可避免地爆发,最终陷入难以自拔的“依赖地狱”(Dependency Hell),甚至不慎损坏操作系统底层依赖 Python 运行的核心系统组件。

Python 环境配置的复杂度,本质上源于其作为动态解释型语言的生态分发机制:既有跨平台的纯 Python 脚本,又有高度依赖宿主机 C/C++ 底层编译工具链的二进制扩展模块;既有操作系统全局共享的库目录,又有基于工作目录隔离的虚拟运行沙箱。只有深刻理解操作系统的环境变量寻址逻辑、虚拟环境的文件系统存根映射机制,以及依赖包管理器的解析算法,才能在面对跨平台部署、版本冲突和依赖构建中断时做到游刃有余。

本文由『脚本搜搜』技术团队一线工程实践总结,抛弃泛泛而谈的浅层命令罗列,从底层运行原理出发,系统化拆解 Python 解释器安装、venv 虚拟环境隔离、pip 生产级镜像调度以及 requirements.txt 依赖锁定规范,为开发者构建一套坚如磐石的现代化 Python 工程基石。


一、Python 解释器安装与操作系统底层环境变量(PATH)解析机制#

在任何操作系统上运行 Python 代码,第一步都是让操作系统内核能够准确找到并执行 Python 解释器(CPython)的二进制可执行程序。虽然各大主流操作系统都提供了便捷的安装程序,但在底层执行机制上存在诸多关键细节。

1. CPython 运行时架构与各平台安装规范#

CPython 是 Python 语言的官方参考实现,由 C 语言编写而成。安装 CPython 实际上是将 Python 核心动态链接库、标准库脚本集合、内置扩展模块二进制文件以及配套的可执行引导程序解压到本地文件系统的指定目录:

  1. Windows 平台:官方提供基于 MSI 的标准安装包。在安装引导界面的首屏,有一个至关重要的复选框:“Add python.exe to PATH”(将 python.exe 添加至系统环境变量)。初学者若漏选此项,在打开 CMD 或 PowerShell 后输入 python,系统将无法通过命令定位到可执行文件,甚至在 Windows 10/11 上会直接弹出微软应用商店(Microsoft Store)的下载引导占位符。
  2. Linux 平台(Ubuntu/Debian):现代 Linux 发行版普遍预装了系统级 Python 3。但请特别注意:系统自带的 Python 通常缺失标准库开发头文件与包管理器。在部署生产环境时,必须通过系统的包管理器补齐核心组件: sudo apt update && sudo apt install -y python3 python3-pip python3-venv python3-dev 其中 python3-dev 包含编译 C 扩展所需的头文件(如 Python.h),缺失该包会导致后续编译安装带有 C 扩展的类库(如 psutilujsoncryptography)时直接报错中断。
  3. macOS 平台:虽然 macOS 系统内置了由苹果维护的 Python 运行时(供系统框架内部调用),但强烈建议开发者通过 Homebrew 安装独立且纯净的开源版本:brew install python。Homebrew 会将解释器安装在 /opt/homebrew/bin/python3(Apple Silicon 芯片)或 /usr/local/bin/python3(Intel 芯片),与系统原生环境彻底物理隔离。

2. 操作系统环境变量 PATH 寻址机制底层原理#

当你在命令行终端输入 python 并按下回车键时,操作系统的命令解释器(如 Windows 的 cmd.exe / pwsh.exe,或 Linux 的 bash / zsh)并不会遍历全盘去寻找这个文件,而是严格按照环境变量 PATH 中预先定义的目录列表,从前到后逐一检索:

  1. 系统首先检查当前命令是否为 Shell 内置命令(Built-in Command)或别名(Alias);
  2. 随后读取系统与用户级别的 PATH 环境变量。PATH 本质上是一串以特定分隔符(Windows 为分号 ;,Unix/Linux 为冒号 :)连接的绝对目录路径字符串;
  3. 系统按照从左到右的严格物理顺序,依次进入各个目录扫描是否存在名为 python.exe(Windows)或 python(Linux/macOS 且具备执行权限)的可执行文件;
  4. 首发命中原则:一旦在前面的某个目录中首次匹配到同名程序,操作系统将立即终止后续目录的扫描,直接加载并执行该程序。

这一机制解释了为什么在一台电脑上安装了多个 Python 版本或 Anaconda 时,终端中运行的总是某个特定版本:排在 PATH 变量最靠前位置的路径拥有绝对的执行优先权。

3. 多版本 Python 共存与引导管理策略#

在实际开发场景中,老旧遗留项目可能需要 Python 3.8,而前沿的 AI 框架与自动化工具则要求 Python 3.12 或更高版本。实现多版本平稳共存的核心方案包括:

  1. Windows 原生 Python 启动器(py.exe:Windows 官方安装包默认会在 C:\Windows 目录下注入轻量级的 py.exe 引导存根。由于 C:\Windows 始终位于系统 PATH 中,用户无需纠结环境变量顺序,可直接在命令行通过参数显式调度不同版本的解释器:
    • py -3.8 -m venv .venv38(调用 3.8 版本创建虚拟环境)
    • py -3.12 main.py(以 3.12 版本运行代码)
  2. Linux 系统的 update-alternatives 机制:通过创建全局符号链接池,支持管理员以交互命令随时切换系统默认调用的解释器版本。
  3. 跨平台版本管理利器 pyenvpyenv 通过在系统 PATH 最前端插入一组垫片目录(Shims),动态拦截所有 pythonpip 命令,根据当前目录下的 .python-version 声明文件,自动无缝切换底层使用的解释器版本,是高级开发人员的终极选择。

4. Windows 11 应用执行别名陷阱与注册表底层持久化#

许多 Windows 开发者面临一个极其怪异的现象:明明在官网下载并成功安装了 Python,也在安装向导中勾选了添加到 PATH,但打开终端输入 python,屏幕依然跳转至微软应用商店(Microsoft Store)的 Python 详情页。

这一现象的底层罪魁祸首是 Windows 10/11 引入的 应用执行别名(App Execution Aliases) 机制:

  1. 0 字节存根优先级霸占:Windows 在用户级目录 %LOCALAPPDATA%\Microsoft\WindowsApps 下放置了一组名为 python.exepython3.exe 的 0 字节快捷引导存根。由于 WindowsApps 目录往往在系统初始化时被默认置于用户 PATH 变量的较前位置,系统根据首发命中原则,优先调用了该存根;
  2. 根治方案一:关闭应用执行别名:打开 Windows 设置 ➔ 应用 ➔ 高级应用设置 ➔ 应用执行别名,在列表中找到“应用安装程序 (python.exe)”与“应用安装程序 (python3.exe)”,将其右侧开关彻底切换为“关”;
  3. 根治方案二:注册表环境变量物理核验:用户级环境变量持久化存储于 Windows 注册表 HKEY_CURRENT_USER\Environment 键下,系统级则位于 HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Environment。通过在 PowerShell 中运行 [Environment]::GetEnvironmentVariable("PATH", "User"),可以直接校验真实的注册表物理值,避免图形界面未保存带来的虚假配置。

二、虚拟环境(venv)的底层机理与隔离边界#

在现代软件工程中,“永远不要向全局 Python 环境安装任何业务依赖” 是一条不可逾越的红线。理解并熟练运用虚拟环境,是保障项目可维护性与长期稳定的核心技能。

1. 全局安装的灾难本质与版本死锁#

Python 解释器在运行时,会通过 sys.path 列表指定模块的检索顺序。其中最核心的第三方模块存放地就是全局的 site-packages 目录。

假设开发者在全局环境中开发了一个电商报表脚本 A,依赖于旧版数据分析库 pandas==1.3.5;数月之后,该开发者又着手构建一个全新的大模型 Agent 智能体项目 B,需要最新版的 pandas==2.2.0pydantic==2.6.0。如果直接在全局执行 pip install pandas --upgrade,原先旧项目的代码将因 API 弃用与破坏性变更直接崩溃;反之若不升级,新项目则无法启动。这种由于依赖树交织锁死导致整个系统瘫痪的现象,就是典型的版本死锁。

2. venv 虚拟环境的本质:存根映射与 pyvenv.cfg#

从 Python 3.3 起内置的标准库模块 venv,彻底终结了这种混乱。许多开发者误以为创建虚拟环境会将整个数十兆的 Python 解释器完整拷贝一份,实际上这是一种误解。

venv 的实现极其轻巧精妙。执行 python -m venv .venv 创建环境时,磁盘上仅仅生成了几个关键目录和文件:

  1. pyvenv.cfg 核心配置文件:位于虚拟环境根目录下,记录了底层宿主 Python 解释器的真实绝对物理路径(home = C:\Python312)、当前虚拟环境的版本号,以及一个关键标志 include-system-site-packages = false。该标志明确声明当前虚拟环境是否隔离宿主系统的全局包。
  2. 二进制存根目录(Scripts 或 bin):在该目录下生成的 python.exepython 并非真正的解释器实体,在 Windows 下它是一个极小的引导存根(Stub),在 Linux/macOS 下则是一个指向宿主解释器的软符号链接(Symbolic Link)。
  3. 专属的 site-packages:位于虚拟环境的 Lib\site-packages(Windows)或 lib/python3.x/site-packages(Linux/macOS)。所有在该环境中安装的第三方库都会被严格限制在此文件夹中,绝不外溢。

当该目录下的 python 存根被调用启动时,解释器会首先在自身父级目录中寻找 pyvenv.cfg。一旦检测到该配置,Python 会自动将自己的 sys.prefixsys.exec_prefix 重定向至虚拟环境目录,并将专属的 site-packages 优先追加到 sys.path 模块搜索路径的头部,同时彻底切断对全局系统库的索引。

3. 跨平台激活脚本与环境变量重写机制#

要在终端中便捷地使用虚拟环境,通常需要执行环境自带的激活脚本。激活脚本的底层核心原理,就是临时修改当前终端会话的 PATH 环境变量

Terminal window
# Linux / macOS (Bash / Zsh) 激活与退出
source .venv/bin/activate
which python # 输出必然指向当前项目的 .venv/bin/python
deactivate # 退出虚拟环境,PATH 变量自动恢复原状
# Windows PowerShell 激活与退出
.venv\Scripts\Activate.ps1
Get-Command python # 查看当前生效的 python 绝对路径
deactivate

当执行激活脚本后,终端提示符(Prompt)前端通常会出现 (.venv) 标识,这是脚本为了提示用户而修改了命令行提示符。更关键的是,脚本将 .venv/bin.venv\Scripts 强行插入到了环境变量 PATH 的最前端。此时在终端直接敲击 pythonpip,系统会优先调用虚拟环境内部的存根程序。

4. PEP 668 保护机制与强制隔离时代#

在现代 Linux 发行版(如 Ubuntu 23.04+、Debian 12+)以及部分容器镜像中,如果你试图在没有激活虚拟环境的情况下直接执行全局 pip install,系统会直接报错并拒绝执行: error: externally-managed-environment

这是 Python 官方实施的 PEP 668 保护协议。它在系统级 Python 目录注入了一个 EXTERNALLY-MANAGED 标记文件,旨在明确划清“操作系统级依赖”与“用户业务依赖”的界限。它强行倒逼所有开发者和运维人员:必须为每一个独立应用创建专属的虚拟环境,严禁污染宿主系统。


三、主流环境与依赖管理方案横向技术对比#

除了 Python 自带的原生 venv 之外,开源社区在过去十余年中演化出了多种不同的环境与依赖管理工具。选型不当往往会导致团队协作混乱或持续集成构建极其缓慢。

1. 多维度核心工具特性对比表#

以下汇总了当前工业界五大主流 Python 环境与包管理工具的关键技术维度对比:

工具名称核心定位与技术底座依赖解析速度跨语言二进制管理能力是否原生自带依赖锁定文件支持典型最佳适用场景
venvPython 官方内置轻量沙箱依赖 pip仅限 Python 库是 (Python 3.3+)需配合 requirements.txt标准独立轻量脚本、小型微服务、Docker 生产容器镜像
virtualenv第三方增强虚拟环境工具依赖 pip仅限 Python 库需配合 requirements.txt需要支持极老版本 Python 或特定虚拟环境扩展钩子的工程
Conda (Miniconda)跨语言全栈包与环境管理较慢 (libmambapy 可加速)强大 (C/C++、CUDA、R 等)conda-lock / environment.yml深度学习、科学计算、涉及复杂底层 C/CUDA 动态库编译的项目
Poetry现代全生命周期包管理工具中等 (纯 Python 解析)仅限 Python 库poetry.lock (确定性极强)规范化开源类库发布、中大型企业商业级纯 Python 业务系统
uv基于 Rust 重构的新一代极致工具极快 (比 pip 快 10~100 倍)仅限 Python 库uv.lock / requirements.txt高频 CI/CD 自动化流水线、海量微服务构建、追求秒级构建团队

对比结论与选型指南:

  • 对于通用轻量级自动化运维脚本与云原生微服务容器,原生的 venv 依然是兼容性最好、依赖最少、最值得优先掌握的基础标准
  • 在涉及 PyTorch、TensorFlow、OpenCV 以及底层 CUDA 驱动联调的场景下,Miniconda 凭借出色的跨语言二进制包预编译分发能力具有不可替代的优势;
  • 对于追求极致构建效率、在持续集成(CI/CD)中饱受依赖下载解析缓慢折磨的团队,由 Astral 团队使用 Rust 编写的 uv 正在成为 2026 年最具颠覆性的现代化基础设施。

四、pip 核心工作流与高阶包管理工程化实战#

pip(Pip Installs Packages)是 Python 官方推荐的依赖包管理工具。绝大多数开发者对 pip 的使用仅停留在 pip install xxx 的初级阶段,但在面对复杂的企业级网络与依赖交付时,必须深入掌握其底层打包格式与高阶诊断指令。

1. Wheel 预编译轮子包与源码包(sdist)的本质差异#

当你在命令行执行 pip install <package> 时,pip 会首先向 PyPI 索引仓库查询该包的元数据。此时,仓库中通常提供两种截然不同的分发格式:

  1. 源码分发包(Source Distribution, sdist,通常为 .tar.gz.zip:包含了原始的 Python 源代码、pyproject.tomlsetup.py 构建脚本。如果该类库包含 C/C++ 或 Rust 编写的底层底层底层扩展,客户端机器在安装时必须预先具备匹配的本地编译工具链(如 GCC、Clang、MSVC)。pip 会在本地临时目录中触发耗时极长的底层编译过程。如果缺少编译头文件,安装过程将直接报错溃败。
  2. 预编译二进制轮子包(Wheel,扩展名为 .whl:这是一种已经针对特定操作系统内核、CPU 架构(如 x86_64、ARM64)以及 Python 解释器 ABI(Application Binary Interface,如 cp311、cp312)预先编译好的归档文件(本质为特殊构造的 ZIP 压缩包)。pip 下载 Wheel 包后,无需调用任何本地编译器,只需直接解压文件并将其放置到 site-packages 目录,秒级即可完成安装。

因此,优先选择并安装匹配本地环境的 Wheel 格式,是保障依赖安装快速且 100% 成功的核心秘诀。

2. 生产高频 pip 高阶管理指令实操#

掌握以下核心指令能够帮助开发者从容应对日常包管理疑难:

Terminal window
# 1. 检查已安装库的过期状态,输出当前版本与最新可用版本
pip list --outdated
# 2. 深入探查某个具体已安装库的详细元数据、作者、许可证及文件物理落盘清单
pip show -f requests
# 3. 运行全局依赖完整性一致性扫描,检测是否存在版本冲突或缺失的子依赖
pip check
# 4. 彻底清空本地 pip 缓存目录(用于排查因网络中断导致的下载损坏损坏包)
pip cache purge
# 5. 查看当前 pip 缓存的物理占用分布与总文件体积
pip cache info

3. 企业内网离线环境依赖打包与交付规范#

在金融、军工或高度保密的企业级内网中,生产服务器通常处于完全物理断网的“离线孤岛”状态。此时无法在线拉取 PyPI 仓库,必须通过两阶段离线打包完成部署交付:

Terminal window
# 阶段一:在具有外网访问权限的同构环境(操作系统与 Python 版本完全一致)中批量预下载
# 将所有依赖项的二进制 Wheel 包及子依赖统一下载至 local_wheels 目录
pip download -r requirements.txt -d ./local_wheels
# 阶段二:将代码与 local_wheels 压缩包整体拷贝至内网离线生产服务器
# 使用 --no-index 彻底切断外部联网请求,--find-links 指向本地离线包目录进行秒级离线安装
pip install --no-index --find-links=./local_wheels -r requirements.txt

4. pip 现代依赖解析器(Resolvelib)回溯死锁与诊断策略#

自 pip 20.3 版本起,官方正式启用了全新的 2020 依赖解析器(基于 resolvelib 算法)。在此之前,旧版 pip 采用简单线性的“先到先得”安装策略,经常在安装完包 A 之后,又盲目安装包 B 覆盖掉包 A 所依赖的低版本组件,导致环境在安装完成后悄无声息地处于损坏状态。

新版解析器从数学上确保了整棵依赖树的严格一致性,但在面对版本约束复杂的庞大工程时,也带来了新的副作用——无限依赖回溯(Backtracking)

  1. 回溯机制工作原理:当 pip 发现用户声明的包 A 要求 library >= 2.0,而包 B 要求 library < 2.0 时,新解析器不会直接报错放弃,而是开始在 PyPI 索引库中倒序下载包 A 和包 B 历史上发布过的所有几十个旧版本元数据,逐一尝试是否存在某种历史版本组合能够同时满足约束;
  2. 回溯假死现象:如果依赖树庞大且存在根本性版本互斥,pip 会在终端持续输出 INFO: pip is looking at multiple versions of ... to determine which version is compatible,在跨国网络下频繁请求海量旧版本元数据,导致安装过程假死数十分钟甚至数小时;
  3. 工业级诊断与跳脱方案
    • 使用 pip install --dry-run <package> 仅执行纯粹的依赖求解计算,不执行真正的文件下载,秒级验证依赖树是否能够自洽解出;
    • 显式锁定冲突库的确定版本(例如在命令行直接指定 pip install "library==1.9.5" packageA packageB),收窄解析器的搜索空间,直接切断无意义的历史版本回溯分支。

五、国内 PyPI 镜像源深度横向测评与工业级配置#

在中国大陆的网络拓扑环境下,由于国际出口公网链路带宽瓶颈、跨国骨干网高丢包率以及偶发的网络阻断,直接连接位于海外的 PyPI 官方官方服务器(files.pythonhosted.orgpypi.org)经常遭遇极其严重的握手超时(ReadTimeoutError)甚至连接重置。合理选择并配置国内权威镜像源,是每一位开发者的必修课。

1. 国内四大主流开源软件镜像站技术实测对比#

以下基于国内三大运营商(中国电信、中国联通、中国移动)多节点链路探测与持续同步测试结果,对主流镜像站进行全方位评测:

镜像站名称主办机构同步更新频率骨干网带宽稳定性IPv6 协议支持综合评级
清华大学开源镜像站 (TUNA)清华大学信息化技术中心约每 5 分钟增量同步极高 (多线 BGP 接入)完整支持★★★★★ (首选推荐)
阿里云开源镜像站阿里巴巴开源镜像平台约每 10~15 分钟同步极高 (全球 CDN 节点加速)完整支持★★★★★ (企业首选)
腾讯云开源镜像站腾讯云开发者社区约每 15 分钟同步极高 (全国 CDN 加速)完整支持★★★★☆
中国科学技术大学 (USTC)中科大 Linux 用户协会约每 10 分钟同步优良 (教育网/电信骨干)完整支持★★★★☆

横向分析结论:清华大学 TUNA 镜像站在同步即时性与学术生态包支持上最为全面,是个人开发与实验室的首选;阿里云镜像站依托庞大的商业云 CDN 覆盖,在面对晚高峰大并发下载时抖动最小,极适合企业自动化 CI/CD 构建集群。

2. 生产级 pip 全局配置工程化落地方案#

严禁在生产脚本中通过反复硬编码 -i https://... 临时指定镜像源。最规范的做法是在系统中建立标准配置文件。

配置文件路径规范:

  • Linux / macOS~/.config/pip/pip.conf(或 ~/.pip/pip.conf
  • Windows%APPDATA%\pip\pip.ini(实际路径通常为 C:\Users\<用户名>\AppData\Roaming\pip\pip.ini

配置内容必须涵盖主镜像源、备用容灾源、受信主机声明与合理的超时设置:

[global]
# 主下载镜像源:清华大学开源镜像站
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
# 备用附加镜像源:阿里云镜像站,当主源偶发性丢包时自动回退检索
extra-index-url = https://mirrors.aliyun.com/pypi/simple/
# 信任域名白名单:显式告知 pip 信任该 HTTPS 证书,杜绝自签名安全校验阻断
trusted-host =
pypi.tuna.tsinghua.edu.cn
mirrors.aliyun.com
# 网络超时阈值延长至 120 秒,从容应对复杂依赖拉取期间的链路偶发抖动
timeout = 120
# 禁用版本定期自动联网检查,提升本地命令行交互响应速度
disable-pip-version-check = true

六、requirements.txt 语法全解与现代锁文件体系#

在团队协作与生产交付中,requirements.txt 是传递依赖关系的通用事实标准。然而,许多工程师对该文件的理解仅限于记录“库名称”,这种粗放的管理模式是导致生产环境与测试环境行为不一致的罪魁祸首。

1. PEP 440 依赖版本约束操作符完全指南#

根据 Python 官方规范 PEP 440,依赖版本声明支持极其丰富的语义约束表达:

  1. 绝对严格锁定(==requests == 2.31.0 指示 pip 必须且仅能安装完全相等的具体版本。这是生产发布的最稳妥策略。
  2. 最小版本限制(>=<=pandas >= 2.0.0, < 3.0.0 允许在保证主版本兼容的前提下,自动升级次版本或修复补丁。
  3. 兼容性版本锁定(~=urllib3 ~= 2.1.0 等价于 >= 2.1.0, == 2.1.*。它允许安装最新的安全补丁版本(如 2.1.1、2.1.2),但坚决拒绝引入可能包含破坏性更新的 2.2.0。
  4. 排除特定已知缺陷版本(!=fastapi >= 0.100.0, != 0.103.1 显式规避官方某个被曝出存在严重安全漏洞或回归 Bug 的特定版本。

2. 环境标记(Environment Markers)高级动态约束实战#

在跨平台工程中,某些类库仅能在特定操作系统或特定 Python 版本下运行。例如,Windows 下需要专属的底层事件循环库,而 Linux 下则需要性能监控库。通过使用由 PEP 508 定义的环境标记(Environment Markers),可以在单份 requirements.txt 中实现跨平台自适应声明:

# 基础核心业务库,全平台通用
pydantic >= 2.6.0
httpx ~= 0.27.0
# 仅在 Windows 操作系统下才触发安装 pywin32,在 Linux 或 macOS 下自动静默跳过
pywin32 >= 306 ; sys_platform == "win32"
# 仅在 Linux 服务器环境下安装高性能异步库 uvloop
uvloop >= 0.19.0 ; sys_platform == "linux"
# 仅在 Python 解释器版本低于 3.11 时引入回退补丁库
tomli >= 2.0.1 ; python_version < "3.11"

3. pip freeze 的经典隐患与 pip-tools 确定性锁文件进阶#

许多开发者习惯在终端使用 pip freeze > requirements.txt 导出环境依赖。这种操作存在两大难以规避的缺陷:

  1. 扁平化污染pip freeze 会将当前虚拟环境中所有直接依赖与次级间接依赖(Sub-dependencies)无差别全部打平倒出。开发者根本无法分辨哪些是自己主动引入的核心业务库,哪些仅仅是底层框架自动附带的临时支撑库,后续进行依赖升级时犹如拆弹。
  2. 本地临时绝对路径外溢:如果开发环境中通过 pip install -e .(可编辑模式)安装了本地私有包,pip freeze 会导出诸如 -e file:///home/user/my_pkg 这种包含本地绝对物理路径的不可移植声明,在他人电脑或生产服务器上执行时必定报错失败。

现代工程的最佳实践是采用 两层依赖声明体系

  • requirements.in(人类可读的顶层声明):只书写真正用到的直接核心业务包及其合理的版本区间;
  • 通过 pip-tools 自动编译生成确定性锁文件
    Terminal window
    # 安装依赖锁定编译工具
    pip install pip-tools
    # 由 requirements.in 自动解析全部依赖树并生成带哈希校验的 requirements.txt
    pip-compile --generate-hashes requirements.in
    生成的最终文件不仅锁定了每个次级依赖的精确版本,还嵌入了 SHA-256 内容安全指纹,彻底防御中间人攻击与供应链依赖投毒。

4. Git 版本库直接引用与企业私有依赖托管#

在企业内部敏捷迭代中,许多公共工具组件尚未或不适合发布到公网 PyPI 镜像站。requirements.txt 原生支持直接引用 Git 仓库 URL,并支持精确绑定代码提交哈希(Commit SHA)以确保绝对安全可重现:

# 引用公网 GitHub 仓库的特定发布 Tag(语义化版本)
git+https://github.com/psf/requests.git@v2.31.0#egg=requests
# 引用企业内部私有 GitLab 仓库的特定分支,配合 SSH 密钥免密拉取
git+ssh://git@gitlab.internal.corp/infra/common-tools.git@feature/v2-auth#egg=common-tools
# 生产级强锁定:直接绑定不可篡改的 40 位 Commit Hash 指纹,抵御分支被强制推送覆盖
git+https://github.com/myorg/payment-sdk.git@d3b07384d113edec49eaa6238ad5ff00#egg=payment-sdk

七、环境初始化与依赖安装排查全链路流程图#

在面对多变的开发机与服务器部署时,建立清晰的排错心智模型能够大幅缩短故障定位时间。下图展示了从系统检测到依赖闭环验证的全链路决策树:

命令找不到或弹出应用商店

正常返回 Python 3.x

Windows 报 ExecutionPolicy 限制

成功激活终端显示 .venv

报错 Connection Timeout / Reset

报错 C++ 14.0 required

报错 externally-managed-environment

依赖下载并解压成功

发现版本互斥冲突

校验通过 0 冲突

新环境初始化

检测终端中的 python 版本

检查 PATH 环境变量 / 修复安装时勾选 Add to PATH

执行 python -m venv .venv 创建虚拟环境

执行激活脚本

执行 Set-ExecutionPolicy RemoteSigned

配置 ~/.config/pip/pip.conf 写入国内镜像源

执行 pip install -r requirements.txt

检查本地代理端口 / 验证镜像源可用性

安装 Visual C++ Build Tools 或寻找 pre-built Wheel

确认当前是否已处于虚拟环境中运行

执行 pip check 校验依赖树完整性

调整 requirements.in 约束并重新编译锁定

环境就绪,可平稳启动业务应用

命令找不到或弹出应用商店

正常返回 Python 3.x

Windows 报 ExecutionPolicy 限制

成功激活终端显示 .venv

报错 Connection Timeout / Reset

报错 C++ 14.0 required

报错 externally-managed-environment

依赖下载并解压成功

发现版本互斥冲突

校验通过 0 冲突

新环境初始化

检测终端中的 python 版本

检查 PATH 环境变量 / 修复安装时勾选 Add to PATH

执行 python -m venv .venv 创建虚拟环境

执行激活脚本

执行 Set-ExecutionPolicy RemoteSigned

配置 ~/.config/pip/pip.conf 写入国内镜像源

执行 pip install -r requirements.txt

检查本地代理端口 / 验证镜像源可用性

安装 Visual C++ Build Tools 或寻找 pre-built Wheel

确认当前是否已处于虚拟环境中运行

执行 pip check 校验依赖树完整性

调整 requirements.in 约束并重新编译锁定

环境就绪,可平稳启动业务应用


八、典型环境故障排查实战案例(3 大真实疑难复盘)#

技术不仅体现在平稳运行的代码中,更体现在面对突发环境崩溃时的精准打击能力。以下复盘三起发生在真实生产与交付一线的典型环境事故。

案例一:Windows 下安装科学计算包遭遇 Microsoft Visual C++ 14.0 is required#

事故现象:某初级算法工程师在全新安装的 Windows 11 开发机上,激活虚拟环境后执行 pip install wordcloud 或老版本 scipy 时,控制台在打印了数十行编译日志后骤然爆红,抛出致命错误: error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools"

排查路径与关键证据

  1. 第一步检查包类型:查看 pip 下载输出日志,发现 pip 从镜像站下载的是 .tar.gz 格式的源码分发包(sdist),而非 .whl 二进制包。
  2. 第二步检查本地编译器:在 PowerShell 中执行 cl.exe,系统提示找不到命令,证明本地未安装微软 MSVC 编译器套件。
  3. 关键证据确认:检查当前环境使用的 Python 版本,发现工程师安装了刚刚发布不久的最新版 Python 3.13。而该第三方库的开源维护者尚未为 Python 3.13 构建并上传对应的预编译 Wheel 轮子包,pip 被迫降级尝试使用本地 C 编译器构建源码扩展,从而撞上工具链缺失的铁壁。

修复方案与执行步骤

  • 方案 A(极速免编译解法):降级使用生态成熟的主流 Python 版本(如 Python 3.11 或 3.12),重新创建虚拟环境,pip 即可直接命中官方预编译好的二进制 Wheel 包,1 秒内直接解压就绪。
  • 方案 B(彻底安装构建环境):访问微软官方网站,下载并安装 Visual Studio C++ Build Tools,在安装组件中勾选“使用 C++ 的桌面开发”及最新版的 MSVC v143 编译器工具集与 Windows 11 SDK。安装完成后重启终端,再次执行安装即可顺利在本地完成 C 扩展的编译。

案例二:终端激活虚拟环境后运行脚本依然隐式加载全局老旧依赖#

事故现象:某开发者在 VS Code 终端中执行了 .venv\Scripts\Activate.ps1,终端提示符前端已正确显示 (.venv)。随后运行 python main.py,脚本却抛出异常,提示某个第三方库缺少某新属性方法。打印调试信息发现,程序加载的依赖竟然是半年之前在系统全局环境中安装的老版本库。

排查路径与关键证据

  1. 第一步排查 Python 物理路径:在代码首行加入打印语句: import sys; print(sys.executable); print(sys.path)
  2. 关键证据确认:输出结果令人震惊——sys.executable 打印的竟然是 C:\Users\User\AppData\Local\Programs\Python\Python39\python.exe(全局解释器),而根本不是项目根目录下的 .venv\Scripts\python.exe
  3. 深挖根因:排查开发者的 PowerShell 环境变量发现,其系统级环境变量中存在一个历史遗留变量 PYTHONHOME,该变量被强行硬编码指向了全局 Python 3.9 目录。当 Python 解释器存根启动时,一旦检测到外部定义了 PYTHONHOME,它会无条件忽略 pyvenv.cfg 的重定向指令,强制从 PYTHONHOME 指定的全局目录加载标准库与全局 site-packages。

修复方案与执行步骤

  1. 立即在 Windows 系统高级系统设置中,彻底删除全局环境变量 PYTHONHOMEPYTHONPATH
  2. 关闭所有已打开的终端窗口并重启 VS Code;
  3. 在 VS Code 中使用快捷键 Ctrl + Shift + P,输入并执行 Python: Select Interpreter,显式绑定当前项目目录下的 ./.venv/Scripts/python.exe
  4. 重新执行代码,sys.executable 恢复精准指向虚拟环境,依赖加载恢复正常。

案例三:Ubuntu 自动化部署脚本遭遇 externally-managed-environment 阻断#

事故现象:运维团队在将自动化部署 Shell 脚本迁移到基于 Ubuntu 24.04 的全新云服务器时,脚本在执行到 sudo pip3 install -r requirements.txt 步骤时直接中断退出,错误信息明确声明当前系统为外部管理环境,拒绝任何包安装。

排查路径与关键证据

  1. 第一步理解机制:排查确认 Ubuntu 24.04 严格启用了 PEP 668 保护标准。系统全局的 /usr/lib/python3.x/EXTERNALLY-MANAGED 文件激活了该阻断逻辑。
  2. 第二步分析业务场景:该云服务器为专门运行该自动化任务的无状态应用服务器,任务需要作为 systemd 系统服务开机常驻运行。

修复方案与执行步骤: 严禁使用 --break-system-packages 破坏系统防护,规范的工程化生产改造方案如下:

  1. 编写基础设施自动化脚本,在应用专用部署目录 /opt/my_automation 下创建标准独立虚拟环境:
    Terminal window
    # 安装 venv 核心支持
    apt-get update && apt-get install -y python3-venv python3-pip
    # 在业务专属目录创建隔离虚拟环境
    python3 -m venv /opt/my_automation/.venv
    # 使用虚拟环境专用的 pip 二进制直接安装依赖,无需执行 source 激活
    /opt/my_automation/.venv/bin/pip install --upgrade pip
    /opt/my_automation/.venv/bin/pip install -r /opt/my_automation/requirements.txt
  2. 在编写 systemd 服务配置文件(/etc/systemd/system/my_app.service)时,将 ExecStart 启动命令精确指向虚拟环境内部的解释器:
    [Unit]
    Description=My Python Automation Service
    After=network.target
    [Service]
    Type=simple
    User=www-data
    WorkingDirectory=/opt/my_automation
    # 核心:直接调用虚拟环境内的 Python 二进制,完全无需激活环节
    ExecStart=/opt/my_automation/.venv/bin/python main.py
    Restart=always
    [Install]
    WantedBy=multi-user.target

复盘结论:通过将服务启动路径绑定为虚拟环境解释器的绝对路径,彻底实现了无登录、无会话、高可用的生产常驻运行,完美兼容现代 Linux 发行版的安全防护规范。


九、常见问题解答(FAQ)#

Q1:直接删除 .venv 虚拟环境文件夹对操作系统有影响吗?如何干净卸载虚拟环境?#

完全没有任何负面影响。.venv 虚拟环境是一个完全自包含的独立目录,它的存在与操作系统注册表、系统核心文件没有任何深层耦合。如果你不需要该环境、环境依赖被破坏,或者希望从头重构,只需在终端中关闭所有占用该环境的进程,然后直接在文件管理器中删除该文件夹,或者在命令行执行 rm -rf .venv(Linux/macOS)与 Remove-Item -Recurse -Force .venv(Windows PowerShell)。重新创建只需重新运行 python -m venv .venv 即可,秒级恢复初始纯净状态。

Q2:在 Windows PowerShell 中激活虚拟环境时提示“无法加载文件 Activate.ps1,因为在此系统上禁止运行脚本”该怎么解决?#

这是 Windows 系统默认的安全策略限制(ExecutionPolicy 默认为 Restricted),旨在防止恶意脚本在未经许可的情况下在后台静默运行。开发者只需为当前用户或当前终端进程适度放宽权限即可:

Terminal window
# 仅针对当前 PowerShell 会话临时放宽权限(无需管理员权限,最安全推荐)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope Process
# 或者针对当前登录用户永久放宽策略(需打开常规 PowerShell)
Set-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser

设置完成后,再次执行 .venv\Scripts\Activate.ps1 即可顺利激活。

Q3:执行 pip freeze 导出的 requirements.txt 拿到同事的电脑上安装总是报错,最常见的原因是什么?#

最普遍的核心诱因有两个:

  1. 导出包含了特定操作系统的私有二进制库:例如在 Windows 上导出的依赖中包含了 pywin32,当同事在 macOS 或 Linux 上执行 pip install -r requirements.txt 时,系统在 PyPI 上根本找不到对应非 Windows 平台的包,导致中断报错。必须使用本文第六章介绍的“环境标记”(Environment Markers)进行平台隔离。
  2. 底层 Python 大版本不匹配:若你在 Python 3.12 下导出的特定包版本尚未适配同事电脑上的 Python 3.9,或者部分 C 扩展包在旧版解释器下找不到预编译 Wheel,也会触发本地编译失败。跨机器协作前,团队必须统一基准解释器的大版本(如统一锁定为 Python 3.11.x)。

Q4:pip list 与 pip freeze 到底有什么区别?什么时候该用哪一个?#

两者的底层定位和输出格式存在本质差异:

  • pip list:主要面向人类开发者交互查看。它以整齐对齐的表格形式输出当前环境中安装的所有类库名称及其版本号,并支持通过 --outdated 参数直观查看哪些库存在新版本。
  • pip freeze:专为机器自动化解析而设计。它严格输出符合 PEP 440 规范的键值对形式(如 requests==2.31.0),并且在默认情况下会自动过滤掉用于包管理自身的内部工具库(例如 pipsetuptoolswheel),其输出结果专用于重定向保存为 requirements.txt

Q5:为什么有时候运行 pip install 时终端会打印红色或黄色警告:“WARNING: Running pip as the ‘root’ user”?#

当你在 Linux 系统中使用 sudo pip install 或者在 Docker 容器内以 root 用户身份直接运行 pip 时,会触发此安全警告。警告的核心原因在于:以 root 权限执行 pip 时,下载的第三方包如果在 setup.py 中包含恶意的构建代码,该代码将直接以 Linux 最高系统特权执行,极易植入后门;此外,root 权限写入的文件可能会覆盖系统级 Python 的基础模块,引发系统稳定性崩溃。在生产环境中,强烈建议创建普通权限运维用户(如 appuser),并在独立虚拟环境中执行依赖安装。

Q6:Python 解释器从 3.11 升级到 3.12 后,原有项目的 .venv 虚拟环境可以直接继续使用吗?#

不能直接使用。.venv 目录下的 pyvenv.cfg 配置文件硬编码了宿主 Python 3.11 的底层二进制物理路径,其内部的 site-packages 中存放的许多 C/C++ 扩展包也是针对 Python 3.11 的特定 ABI 编译的。一旦底层的 Python 升级,旧虚拟环境通常会因符号链接失效或 ABI 不兼容直接报底层错误。正确的升级重构流程是:

  1. 确保旧环境的依赖声明文件(requirements.in 或精简的 requirements.txt)完备;
  2. 彻底删除旧的 .venv 目录;
  3. 使用新升级的 Python 3.12 解释器重新执行 python3.12 -m venv .venv
  4. 激活新虚拟环境后重新执行 pip install -r requirements.txt 完成在新解释器下的纯净构建。

十、总结与现代化 Python 工程开发六大黄金准则#

建立规范、整洁且高可用的环境管理体系,是专业软件工程师区别于初学者业余爱好的重要标志。为了确保自动化项目在开发、测试与生产部署全流程中实现真正的“可重现性”与“零故障交付”,请在团队开发中坚决践行以下六大工程准则

  1. 坚持物理沙箱隔离:任何工程无论规模大小,初始化第一件事必须创建独立的 .venv 虚拟环境,坚决捍卫宿主全局环境的纯净性。
  2. 规范版本约束语义:摒弃无版本号裸写包名的不良习惯;在生产交付中对关键业务库使用严格锁定(==)或兼容锁定(~=),并利用环境标记(Environment Markers)规避跨平台移植陷阱。
  3. 固化镜像源基础设施:在用户或系统层级标准化部署 pip.conf / pip.ini 配置文件,采用高可用双镜像源轮询与 120 秒超时容灾策略,彻底消除网络不稳定诱因。
  4. 两层依赖解耦管理:区分“直接核心业务依赖”与“次级传递间接依赖”,优先推荐采用 requirements.in 结合 pip-tools 自动编译生成具备哈希校验防篡改的最终锁文件。
  5. 严守生产安全红线:禁止在容器或生产服务器上以 root 身份盲目向系统全局写入依赖;坚决不绕过 PEP 668 保护屏障,不随意添加未经审计的第三方私有源。
  6. 无登录常驻启动标准:在配置系统服务(systemd 或 Windows 计划任务)时,启动命令直接绑定虚拟环境内的解释器绝对路径,彻底消除脱机环境下的 PATH 寻址异常。

扩展阅读与知识库内链#

为了进一步深化 Python 自动化进阶能力与网络攻坚技能,建议配合研读本站核心技术专栏:

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或打赏支持!

打赏
Python 基础入门与环境配置:venv 虚拟环境、pip 使用教程与 requirements 详解
https://jiaobensou.com/posts/python-environment-pip-and-virtualenv-guide/
作者
脚本搜搜
发布于
2026-03-07
许可协议
CC BY-NC-SA 4.0
相关文章智能推荐
1
Python 常用自动化脚本与核心实战:从 Excel/PDF 批量处理到 pip/requests 网络超时排障
Python深度解析 Python 工业级自动化脚本开发与网络故障排查。涵盖文件高效遍历哈希去重、Excel/PDF 批量流式处理与内存防爆、requests 细粒度超时与连接池重试机制,底层攻坚 pip install 握手超时、SSL 证书校验阻断与 SOCKS5 代理穿透。
2
Python 调用 OpenAI / Claude / Gemini API 实战:从批量处理到 AI Agent 与 LangChain 搭建
AI编程2026 深度实战指南:使用 Python 对接 OpenAI、Claude 与 Gemini 官方 API。深入剖析 SDK 架构与异步并发、SSE 流式响应、Pydantic 结构化输出、Function Calling 工具调用,并基于 LangChain 与 LangGraph 构建具备自主决策能力的生产级 AI Agent。
3
Windows 开发者环境全套配置:WSL2、PowerShell、Docker Desktop 与 Git 整合
开发环境2026 打造现代 Windows 11 顶级全栈开发工作站权威指南。深度剖析 WSL2 底层 Hyper-V 架构、Ubuntu 24.04 LTS 初始化、.wslconfig 镜像网络与自动稀疏 VHDX 优化、Windows Terminal 与 PowerShell 7+ 美化、Docker Desktop WSL2 引擎深度协同、Git CRLF 跨平台换行符治理以及 VS Code Remote-WSL 架构实战。
4
macOS 开发者环境终极搭建:Homebrew、Zsh、Xcode 与开发包管理配置
开发环境2026 打造现代 Mac 顶级全栈开发工作站权威指南。深度剖析 Apple Silicon (M1-M4) ARM64 架构与 Rosetta 2 动态转译、Xcode 命令行工具极简安装、Homebrew 架构原理与清华镜像源加速、Zsh 启动链与 Starship 零延迟提示符、iTerm2 深度调优、多语言运行时隔离、Brewfile 基础设施即代码以及 defaults 系统隐藏参数调优。
5
2026 开发者网络环境配置完整指南:Windows/macOS/Linux 代理与环境终极整合
开发环境全站旗舰核心指南!全景式剖析 Windows (PowerShell/WSL2 镜像网络)、macOS (Homebrew/Zsh) 与 Linux 终端代理底层机理,彻底解决 Git、Docker、npm、pip、Go、Cursor 全套开发环境网络出海与本地内网私有源无冲突协同。
随机文章随机推荐
Profile Image of the Author
脚本搜搜
专注开发者常用实用脚本大全、自动化实战与网络问题解决方案。
🔥 站长主力力荐
站长日常自用【光速云】企业级 IEPL 内网专线:晚高峰超低延迟,稳定解锁 Claude 3.7 / Cursor / ChatGPT,年付折算仅 7.5元/月起,专属 8 折优惠码:AMM
分类
标签
最新动态
翻墙专线 · 商业合作
优质精选
1光速云站长主推
券: AMMIEPL 专线
券: flycat888IEPL 专线
券: flat888IEPL 专线
券: nmw888企业级内网专线
券: wuyou666IEPL 专线
券: YUZHOU553IEPL 专线
查看完整 18 家机场实测观测台
站点统计
文章
49
分类
10
标签
189
总字数
419,407
运行时长
0
最后活动
0 天前
站点信息
构建平台
Cloudflare Pages
博客版本
Firefly v6.16.8
文章许可
CC BY-NC-SA 4.0
1
一、Python 解释器安装与操作系统底层环境变量(PATH)解析机制
1. CPython 运行时架构与各平台安装规范
2. 操作系统环境变量 PATH 寻址机制底层原理
3. 多版本 Python 共存与引导管理策略
4. Windows 11 应用执行别名陷阱与注册表底层持久化
2
二、虚拟环境(venv)的底层机理与隔离边界
1. 全局安装的灾难本质与版本死锁
2. venv 虚拟环境的本质:存根映射与 pyvenv.cfg
3. 跨平台激活脚本与环境变量重写机制
4. PEP 668 保护机制与强制隔离时代
3
三、主流环境与依赖管理方案横向技术对比
1. 多维度核心工具特性对比表
4
四、pip 核心工作流与高阶包管理工程化实战
1. Wheel 预编译轮子包与源码包(sdist)的本质差异
2. 生产高频 pip 高阶管理指令实操
3. 企业内网离线环境依赖打包与交付规范
4. pip 现代依赖解析器(Resolvelib)回溯死锁与诊断策略
5
五、国内 PyPI 镜像源深度横向测评与工业级配置
1. 国内四大主流开源软件镜像站技术实测对比
2. 生产级 pip 全局配置工程化落地方案
6
六、requirements.txt 语法全解与现代锁文件体系
1. PEP 440 依赖版本约束操作符完全指南
2. 环境标记(Environment Markers)高级动态约束实战
3. pip freeze 的经典隐患与 pip-tools 确定性锁文件进阶
4. Git 版本库直接引用与企业私有依赖托管
7
七、环境初始化与依赖安装排查全链路流程图
8
八、典型环境故障排查实战案例(3 大真实疑难复盘)
案例一:Windows 下安装科学计算包遭遇 Microsoft Visual C++ 14.0 is required
案例二:终端激活虚拟环境后运行脚本依然隐式加载全局老旧依赖
案例三:Ubuntu 自动化部署脚本遭遇 externally-managed-environment 阻断
9
九、常见问题解答(FAQ)
Q1:直接删除 .venv 虚拟环境文件夹对操作系统有影响吗?如何干净卸载虚拟环境?
Q2:在 Windows PowerShell 中激活虚拟环境时提示“无法加载文件 Activate.ps1,因为在此系统上禁止运行脚本”该怎么解决?
Q3:执行 pip freeze 导出的 requirements.txt 拿到同事的电脑上安装总是报错,最常见的原因是什么?
Q4:pip list 与 pip freeze 到底有什么区别?什么时候该用哪一个?
Q5:为什么有时候运行 pip install 时终端会打印红色或黄色警告:“WARNING: Running pip as the ‘root’ user”?
Q6:Python 解释器从 3.11 升级到 3.12 后,原有项目的 .venv 虚拟环境可以直接继续使用吗?
10
十、总结与现代化 Python 工程开发六大黄金准则
扩展阅读与知识库内链
文章目录
1
一、Python 解释器安装与操作系统底层环境变量(PATH)解析机制
1. CPython 运行时架构与各平台安装规范
2. 操作系统环境变量 PATH 寻址机制底层原理
3. 多版本 Python 共存与引导管理策略
4. Windows 11 应用执行别名陷阱与注册表底层持久化
2
二、虚拟环境(venv)的底层机理与隔离边界
1. 全局安装的灾难本质与版本死锁
2. venv 虚拟环境的本质:存根映射与 pyvenv.cfg
3. 跨平台激活脚本与环境变量重写机制
4. PEP 668 保护机制与强制隔离时代
3
三、主流环境与依赖管理方案横向技术对比
1. 多维度核心工具特性对比表
4
四、pip 核心工作流与高阶包管理工程化实战
1. Wheel 预编译轮子包与源码包(sdist)的本质差异
2. 生产高频 pip 高阶管理指令实操
3. 企业内网离线环境依赖打包与交付规范
4. pip 现代依赖解析器(Resolvelib)回溯死锁与诊断策略
5
五、国内 PyPI 镜像源深度横向测评与工业级配置
1. 国内四大主流开源软件镜像站技术实测对比
2. 生产级 pip 全局配置工程化落地方案
6
六、requirements.txt 语法全解与现代锁文件体系
1. PEP 440 依赖版本约束操作符完全指南
2. 环境标记(Environment Markers)高级动态约束实战
3. pip freeze 的经典隐患与 pip-tools 确定性锁文件进阶
4. Git 版本库直接引用与企业私有依赖托管
7
七、环境初始化与依赖安装排查全链路流程图
8
八、典型环境故障排查实战案例(3 大真实疑难复盘)
案例一:Windows 下安装科学计算包遭遇 Microsoft Visual C++ 14.0 is required
案例二:终端激活虚拟环境后运行脚本依然隐式加载全局老旧依赖
案例三:Ubuntu 自动化部署脚本遭遇 externally-managed-environment 阻断
9
九、常见问题解答(FAQ)
Q1:直接删除 .venv 虚拟环境文件夹对操作系统有影响吗?如何干净卸载虚拟环境?
Q2:在 Windows PowerShell 中激活虚拟环境时提示“无法加载文件 Activate.ps1,因为在此系统上禁止运行脚本”该怎么解决?
Q3:执行 pip freeze 导出的 requirements.txt 拿到同事的电脑上安装总是报错,最常见的原因是什么?
Q4:pip list 与 pip freeze 到底有什么区别?什么时候该用哪一个?
Q5:为什么有时候运行 pip install 时终端会打印红色或黄色警告:“WARNING: Running pip as the ‘root’ user”?
Q6:Python 解释器从 3.11 升级到 3.12 后,原有项目的 .venv 虚拟环境可以直接继续使用吗?
10
十、总结与现代化 Python 工程开发六大黄金准则
扩展阅读与知识库内链