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
- 目录结构(Windows:
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不删除依赖树
- Conda:
conda install可跨语言、解二进制依赖 - UV:
uv 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-tools的pip-sync或uv remove自动清理
评论
问答助学
相关内容
0个评论
全部评论
点击登录,快来和大家讨论吧~
表情
图片
暂无评论
