刚接触Python时,环境配置往往是第一个拦路虎。我在带新人时发现,90%的"代码跑不起来"问题都源于环境配置不当。不同于其他语言,Python的版本管理、包依赖和虚拟环境这几个概念如果没搞清楚,后期会埋下无数坑。
Python环境配置的核心在于隔离性和可复现性。我推荐使用pyenv管理多版本Python,再配合virtualenv创建项目专属环境。这种组合既能应对不同项目对Python版本的要求,又能避免包冲突。下面以MacOS系统为例(Windows用户只需将brew换成对应包管理器),演示标准配置流程。
首先通过Homebrew安装pyenv和pyenv-virtualenv插件:
bash复制brew update
brew install pyenv pyenv-virtualenv
将以下内容添加到shell配置文件(如~/.zshrc):
bash复制export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init --path)"
eval "$(pyenv virtualenv-init -)"
注意:修改后需要执行
source ~/.zshrc或重启终端生效。如果遇到权限问题,可能需要手动创建~/.pyenv目录并修改所属用户。
查看可安装的Python版本:
bash复制pyenv install --list
安装指定版本(推荐3.8+):
bash复制pyenv install 3.9.6
设置全局默认版本:
bash复制pyenv global 3.9.6
验证安装:
bash复制python --version # 应显示3.9.6
pip --version # 应显示对应pip版本
常见问题:如果遇到SSL相关错误,可能是系统缺少OpenSSL开发库。Mac用户需
brew install openssl,Linux用户需安装libssl-dev。
为项目创建独立环境(建议每个项目单独创建):
bash复制pyenv virtualenv 3.9.6 myproject-env
cd /path/to/project
pyenv local myproject-env # 创建.python-version文件
激活环境后,提示符会显示环境名称:
bash复制(myproject-env) user@host ~/project$
安装包时始终使用-e选项记录精确版本:
bash复制pip install flask==2.0.1
pip freeze > requirements.txt
恢复环境时使用:
bash复制pip install -r requirements.txt
重要技巧:开发时用
pip install -e .可安装当前目录的包(需setup.py),修改代码会实时生效。
VS Code是我的主力工具,推荐安装这些扩展:
配置settings.json:
json复制{
"python.pythonPath": "~/.pyenv/versions/myproject-env/bin/python",
"python.linting.enabled": true,
"python.formatting.provider": "black",
"python.sortImports.args": ["--profile", "black"]
}
创建.vscode/launch.json:
json复制{
"version": "0.2.0",
"configurations": [
{
"name": "Python: Current File",
"type": "python",
"request": "launch",
"program": "${file}",
"console": "integratedTerminal"
}
]
}
创建项目结构:
code复制/myapi
/app
__init__.py
routes.py
tests/
.gitignore
requirements.txt
setup.py
安装依赖:
bash复制pip install flask==2.0.1 flask-sqlalchemy==2.5.1 pytest==6.2.4
app/init.py:
python复制from flask import Flask
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
def create_app():
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
from .routes import bp
app.register_blueprint(bp)
return app
app/routes.py:
python复制from flask import Blueprint, jsonify
from . import db
bp = Blueprint('api', __name__, url_prefix='/api')
@bp.route('/users', methods=['GET'])
def get_users():
return jsonify([{'id': 1, 'name': 'Alice'}])
创建测试用例tests/test_routes.py:
python复制import pytest
from app import create_app
@pytest.fixture
def client():
app = create_app()
with app.test_client() as client:
yield client
def test_get_users(client):
resp = client.get('/api/users')
assert resp.status_code == 200
assert b'Alice' in resp.data
运行测试:
bash复制python -m pytest -v
启动开发服务器:
bash复制export FLASK_APP=app
export FLASK_ENV=development
flask run
使用Gunicorn+Gevent提升并发能力:
bash复制pip install gunicorn==20.1.0 gevent==21.8.0
启动命令:
bash复制gunicorn -w 4 -k gevent -b :5000 "app:create_app()"
创建Dockerfile:
dockerfile复制FROM python:3.9-slim
WORKDIR /app
COPY requirements.txt .
RUN pip install --no-cache-dir -r requirements.txt
COPY . .
CMD ["gunicorn", "-w", "4", "-k", "gevent", "-b", ":5000", "app:create_app()"]
构建并运行:
bash复制docker build -t myapi .
docker run -dp 5000:5000 myapi
症状:ModuleNotFoundError但包已安装
which python确认当前环境pip list查看已安装包症状:SSL证书验证失败
python -m pip install --upgrade pippip config set global.trusted-host pypi.org files.pythonhosted.org使用pipdeptree分析依赖树:
bash复制pip install pipdeptree
pipdeptree --warn silence | grep -P '^\w+'
解决冲突建议:
pip install --upgrade 冲突包名pip install --ignore-installed在代码中插入调试断点:
python复制import pdb; pdb.set_trace() # Python内置调试器
或者使用更强大的ipdb:
bash复制pip install ipdb
python复制import ipdb; ipdb.set_trace()
调试时常用命令:
n(ext):执行下一行c(ontinue):继续运行l(ist):显示当前代码p(rint):打印变量值