刚接触Python的新手常犯的一个错误就是直接安装Python后就开始写代码。但很快就会发现,不同项目需要不同版本的包,系统自带的Python容易搞乱,各种依赖冲突让人头疼。我在带团队时见过太多人因为环境问题浪费一整天时间,其实这些问题完全可以通过合理的环境配置提前规避。
Python环境配置本质上是在搭建一个隔离的、可复现的编程工作区。就像木匠需要先整理好工具台,厨师需要备齐调料架一样。好的环境配置能让你:
直接去python.org下载安装是最简单的方式,但存在明显缺陷:
bash复制# 典型问题场景:两个项目需要不同版本的numpy
ProjectA 需要 numpy==1.19.5
ProjectB 需要 numpy==1.21.0
| 工具 | 适用场景 | 优势 | 缺点 |
|---|---|---|---|
| venv | Python 3.3+ 标准方案 | 无需额外安装 | 不能切换Python解释器版本 |
| virtualenv | 兼容Python 2/3 | 功能全面 | 需要单独安装 |
| conda | 数据科学领域 | 支持非Python依赖管理 | 体积较大 |
| pipenv | 简单项目 | 整合了pip和虚拟环境 | 性能较差 |
| poetry | 包开发项目 | 优秀的依赖解析能力 | 学习曲线陡峭 |
提示:新手建议从venv开始,数据科学方向推荐conda,包开发者适合poetry
bash复制# 安装pyenv(Mac用户)
brew install pyenv
# 查看可安装版本
pyenv install --list
# 安装特定版本
pyenv install 3.9.7
# 设置全局版本
pyenv global 3.9.7
Windows用户可以使用pyenv-win,或者直接安装多个Python版本后通过修改PATH切换。
bash复制# 创建项目目录
mkdir my_project && cd my_project
# 使用venv创建虚拟环境(Python 3.3+内置)
python -m venv .venv
# 激活环境(Linux/Mac)
source .venv/bin/activate
# 激活环境(Windows)
.\.venv\Scripts\activate
激活后终端提示符前会出现(.venv)标记,表示已进入虚拟环境。
bash复制# 包含直接依赖和间接依赖(推荐)
pip freeze > requirements.txt
# 仅包含直接依赖(适合包开发)
pip install pipreqs
pipreqs . --force
code复制requirements/
base.txt # 基础依赖
dev.txt # 开发工具
test.txt # 测试相关
prod.txt # 生产环境
VS Code:安装Python扩展后:
Ctrl+,搜索Python: Venv Path.vscode/launch.jsonPyCharm专业版:
bash复制# 代码质量工具
pip install black isort flake8 mypy
# 测试工具
pip install pytest pytest-cov
# 交互式环境
pip install ipython
配置pre-commit钩子(在.git/hooks/pre-commit中添加):
bash复制#!/bin/sh
black .
isort .
flake8
常见错误现象:
code复制.venv\Scripts\activate : 无法加载文件...
解决方案:
powershell复制Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
bash复制python -m venv --clear .venv
典型报错:
code复制Cannot uninstall 'numpy'. It is a distutils installed project...
解决方法:
bash复制pip install --ignore-installed numpy
# 或者
pip install --upgrade --force-reinstall numpy
在Windows开发后部署到Linux常见问题:
pathlib.Path代替字符串拼接# -*- coding: utf-8 -*-bash复制git config --global core.autocrlf input
dockerfile复制FROM python:3.9-slim
# 先安装依赖(利用Docker缓存层)
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
# 再拷贝代码
COPY . .
.dockerignore文件排除开发文件--no-deps避免不必要的依赖bash复制pip install --no-deps your-package
pip list --outdatedbash复制pip install -i https://pypi.tuna.tsinghua.edu.cn/simple some-package
配置完环境后,我习惯在项目根目录放一个setup_env.sh脚本,新成员只需运行:
bash复制chmod +x setup_env.sh
./setup_env.sh
脚本内容包含环境创建、依赖安装、预提交钩子设置等全流程。这种标准化操作能节省团队大量时间。