0.1-Python 运行环境(完整树状图)


Python 运行环境(完整树状图)

0. 基础运行(你已经写的)

  • 版本区别(只用 Python 3)
  • 交互式与脚本运行
  • 默认 UTF-8 编码

1. 解释器与执行模型

  • CPython(主流)
  • 其他实现(PyPy、Jython、IronPython)—— 可略
  • .py 编译成 .pyc
  • __pycache__ 目录

2. 模块与包搜索路径

  • sys.path 组成
    • 当前脚本目录
    • PYTHONPATH 环境变量
    • 标准库目录
    • site-packages 目录
  • 虚拟环境下 sys.path 的变化(优先指向 .venv/lib/site-packages

3. 环境隔离(核心——你之前痛苦的来源)

  • 为什么需要隔离:依赖地狱、孤儿依赖、版本冲突
  • 隔离原理:复制解释器 + 修改 sys.path + 独立 site-packages
  • 工具实现
    • venv(官方,轻量)
      • 目录结构(Windows:Lib/site-packages + Scripts;Linux:lib/python3.x/site-packages + bin
      • 激活机制:修改环境变量 PATH / VIRTUAL_ENV
    • conda(跨语言,重)
      • 环境目录 envs/
      • 管理非 Python 二进制(CUDA、R、MSYS2)
      • default / conda-forge
    • uv(新一代,快)
      • 基于 pyproject.toml
      • 内置虚拟环境,自动激活
      • 生成 uv.lock 锁定版本
    • poetry / pipenv(可选,类似)

4. 包管理

  • Pip
    • pip install 来源(PyPI、本地、git)
    • requirements.txt(扁平列表,有缺陷)
    • 孤儿依赖问题:pip uninstall 不删除依赖树
  • Condaconda install 可跨语言、解二进制依赖
  • UVuv add / uv remove 同步 pyproject.toml 和锁文件

5. 项目配置标准(避免依赖地狱的关键)

  • pyproject.toml(PEP 518 / 621)
    • 声明 dependencies
    • 声明可选依赖 [project.optional-dependencies]
    • 声明构建后端(setuptools / hatchling / flit
  • setup.py / setup.cfg(旧,正被替代)
  • requirements.txt(仅环境锁定,不是项目声明)

6. 工作流程(从零到运行)

  • 创建环境(uv venv / python -m venv .venv / conda create -n name
  • 激活环境(source .venv/bin/activate / .venv\Scripts\activate / conda activate name
  • 安装依赖(uv sync / pip install -r requirements.txt / conda env create -f environment.yml
  • 运行入口脚本(python main.py)—— 此时 sys.path 指向当前环境的 site-packages
  • 退出环境(deactivate / conda deactivate

7. 常见坑与解决

  • pip 安装到系统 Python 而不是虚拟环境:检查 which pip / where pip
  • conda 混用 pip 导致包不一致:优先使用 conda,conda 没有再用 pip,并存可能破坏环境
  • python 命令指向错误:激活环境后 python 应指向环境内的解释器
  • pyproject.toml 不被 pip 识别:需要新版 pip(21.3+)或使用 uv / poetry
  • 孤儿依赖:用 pip-toolspip-syncuv remove 自动清理

0个评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
下载 APP