Python Web开发入门(一):虚拟环境与依赖管理,从零搭建纯净开发环境

📅 发布时间:2026/7/3 22:52:37 👁️ 浏览次数:
Python Web开发入门(一):虚拟环境与依赖管理,从零搭建纯净开发环境
作者一个踩了9年坑的Python后端程序员 阅读提示本文适合初中级开发者预计阅读时间10分钟。建议边读边动手操作效果翻倍一、开篇为什么你的Python项目总是“跑不起来”“在我电脑上明明能运行怎么到你这里就报错了”这句话是不是特别耳熟作为一个有9年开发经验的老兵我见过太多这样的场景项目A需要Django 2.2项目B需要Django 3.0全局安装只能有一个版本同事更新了某个包你的本地代码突然就崩了生产环境和开发环境依赖不一致部署时各种幺蛾子新来的小伙伴花了一整天配环境最后还得你亲自出马根本原因没有做好环境隔离Python的包管理有个“先天缺陷”——默认全局安装。不同项目共用同一套环境迟早要出问题。所以我的第一条血泪教训每个Python项目必须有自己的“独立房间”——虚拟环境。二、虚拟环境工具大乱斗我该选哪个市面上的工具让人眼花缭乱我帮你捋一捋工具一句话评价适用场景venvPython内置“官方亲儿子够用就行”新手首选、简单项目、快速原型virtualenv“venv的老大哥兼容性更好”旧版Python2.7、需要更多配置选项pipenv“曾经很火现在有点凉”中大型项目、依赖安全要求高但注意社区活跃度下降poetry“现代项目管理全才”正经Python项目、库开发、需要打包发布conda“数据科学家的瑞士军刀”机器学习、科学计算、需要管理非Python依赖uv“速度狂魔的福音”追求极致安装速度、现代项目PDM“PEP标准的践行者”遵循最新Python打包标准、希望不用虚拟环境我的选择建议基于9年实战绝大多数Web项目venvpip就够用了别让工具复杂性拖慢你需要严格版本控制上poetry依赖解析优秀打包发布一体数据科学/ML老老实实用condaCUDA、非Python依赖它最香团队协作统一工具别混用这是血的教训今天我们就用Python自带的venv因为零安装Python 3.3自带跨平台Windows/Mac/Linux通吃足够Web开发需求学会它其他工具触类旁通三、手把手教程用venv搭建纯净环境第1步创建项目目录# 打开终端创建一个新项目 mkdir my_web_project cd my_web_project第2步创建虚拟环境# 核心命令记住这一个就够了 python -m venv venv命令解释python -m venv调用Python内置的venv模块最后一个venv虚拟环境的目录名可以自定义但建议就叫venv成功标志项目目录下多了一个venv/文件夹。第3步激活虚拟环境⚠️关键步骤Windows系统# 方法1CMD命令提示符 venv\Scripts\activate.bat # 方法2PowerShell推荐 .\venv\Scripts\Activate.ps1Mac/Linux系统source venv/bin/activate激活成功的核心标志终端命令行最前面出现(venv)前缀如果没有看到(venv)说明没激活成功后面所有操作都会装到全局环境第4步验证激活状态# 查看当前Python解释器路径 which python # Mac/Linux where python # Windows # 预期输出路径应该指向你的项目目录下的venv文件夹 # 例如/Users/你的用户名/my_web_project/venv/bin/python第5步安装项目依赖# 激活状态下安装Flask以Flask为例 pip install flask3.0.0 # 安装其他依赖 pip install pandas requests sqlalchemy重要提示安装时尽量指定版本号避免自动升级导致意外问题。第6步生成依赖清单协作/部署必备# 生成requirements.txt只包含当前虚拟环境的包 pip freeze requirements.txt打开生成的requirements.txt你会看到类似内容click8.1.7 Flask3.0.0 itsdangerous2.1.2 Jinja23.1.2 MarkupSafe2.1.3 pandas2.1.4 requests2.31.0 SQLAlchemy2.0.23 werkzeug3.0.1第7步退出虚拟环境deactivate看到(venv)前缀消失说明已退出。四、依赖管理进阶告别“在我电脑能跑”4.1 requirements.txt的最佳实践烂代码示例千万别学requests flask pandas问题不指定版本每次安装可能都是不同版本合格写法requests2.31.0 flask3.0.0 pandas2.1.4优秀写法分层管理requirements.txt生产依赖# 核心依赖 requests2.31.0 flask3.0.0 sqlalchemy2.0.23 # 数据库驱动根据实际选一个 psycopg2-binary2.9.9 # PostgreSQL mysql-connector-python8.1.0 # MySQLrequirements-dev.txt开发依赖# 包含生产依赖 -r requirements.txt # 开发专用工具 pytest7.4.3 black24.1.0 flake86.1.0 mypy1.8.0 pre-commit3.5.0安装时# 生产环境 pip install -r requirements.txt # 开发环境 pip install -r requirements-dev.txt4.2 版本锁定策略问题直接pip freeze会把所有包包括子依赖都锁死升级困难。解决方案使用pip-tools实现智能版本控制。# 安装pip-tools pip install pip-tools # 1. 创建requirements.in声明顶层依赖 # 内容 flask3.0.0 requests2.30.0 pandas2.1.0 # 2. 生成精确版本的requirements.txt pip-compile requirements.in # 3. 安装带哈希校验防篡改 pip install --require-hashes -r requirements.txt好处升级单个包时只改.in文件重新compile自动解决依赖冲突支持平台条件依赖如uvloop; sys_platform ! win32五、9年踩坑实录这些错误你别再犯坑1虚拟环境放错位置错误做法把venv建在项目目录里然后提交到Git。后果Git仓库臃肿一个venv可能几百MB不同操作系统环境不兼容Windows vs Linux团队成员环境混乱正确做法把venv加入.gitignore必须使用项目相对路径python -m venv .venv.venv是隐藏文件夹或者集中管理python -m venv ~/virtualenvs/my_project坑2环境嵌套Conda专属大坑症状激活虚拟环境后python -c import sys; print(sys.path)显示的路径不对。原因从base环境直接conda activate myenv导致环境嵌套。解决方案# 先退出base环境 conda deactivate # 再激活目标环境 conda activate myenv检查运行conda info看shell level是否为1是1就对了。坑3Windows权限问题症状venv\Scripts\activate.ps1无法执行。原因PowerShell执行策略限制。解决方案管理员运行PowerShellSet-ExecutionPolicy -ExecutionPolicy RemoteSigned -Scope CurrentUser坑4IDE不识别虚拟环境症状PyCharm/VSCode找不到项目解释器。解决步骤PyCharmFile → Settings → Project → Python Interpreter → 添加VSCode按CtrlShiftP→ Python: Select Interpreter → 选择venv/bin/python确保在项目根目录打开IDE坑5依赖版本冲突经典案例项目A需要numpy1.20项目B需要numpy1.21。我的解法每个项目独立虚拟环境基础中的基础使用pipdeptree可视化依赖关系对关键依赖如TensorFlow、PyTorch建立版本对照表六、实战从零创建Flask项目6.1 环境搭建# 1. 创建项目 mkdir flask_demo cd flask_demo # 2. 创建虚拟环境 python -m venv venv # 3. 激活 # Windows: .\venv\Scripts\Activate.ps1 # Mac/Linux: source venv/bin/activate # 4. 安装Flask pip install flask3.0.06.2 项目结构flask_demo/ ├── venv/ # 虚拟环境.gitignore忽略 ├── requirements.txt # 依赖清单 ├── app.py # 主程序 ├── templates/ # 模板文件夹 │ └── index.html └── static/ # 静态文件 └── style.css6.3 核心代码app.pyfrom flask import Flask, render_template app Flask(__name__) app.route(/) def hello(): return render_template(index.html, name开发者) if __name__ __main__: app.run(debugTrue)templates/index.html!DOCTYPE html html head title我的第一个Flask应用/title link relstylesheet href{{ url_for(static, filenamestyle.css) }} /head body h1你好{{ name }}/h1 p恭喜你虚拟环境配置成功/p p当前Python路径{{ python_path }}/p /body /htmlrequirements.txtFlask3.0.06.4 运行测试# 激活环境下 python app.py访问 http://127.0.0.1:5000看到欢迎页面即成功。七、常备工具清单依赖分析pipdeptree可视化依赖树环境检查python -m site查看当前环境路径包搜索pip search查找可用包缓存清理pip cache purge清理下载缓存环境复制pip freeze requirements.txtpip install -r requirements.txt八、互动时间问题1你曾经在虚拟环境上踩过最大的坑是什么问题2对于团队项目你推荐哪种依赖管理方案为什么问题3如果你要教一个完全新手会从哪个工具开始欢迎在评论区分享你的经验作者寄语虚拟环境是Python开发的“安全带”可能一辈子用不上但用上一次就能救你的项目。花10分钟学会受益10年。原创声明本文为作者9年实战经验总结转载请注明出处。