最稳妥的导出方式是过滤掉pip、setuptools、wheel等构建工具:linux/macos用pip freeze --exclude-editable | grep -v "^(pip|setuptools|wheel|pkg-resources)" > requirements.txt,windows用powershell对应命令。

用 pip freeze > requirements.txt 会导出所有包,包括 pip、setuptools 等无关项
在激活的 venv 中直接运行 pip freeze > requirements.txt 是最常见做法,但它会把 pip、setuptools、wheel 这类构建工具也写进去。这些包通常不需要随项目部署,尤其在 Docker 或 CI 环境中可能引发冲突或重复安装。
更稳妥的方式是过滤掉它们:
- 执行
pip freeze --exclude-editable | grep -v "^\(pip\|setuptools\|wheel\|pkg-resources\)" > requirements.txt(Linux/macOS) - Windows 用户可用 PowerShell:
pip freeze --exclude-editable | Select-String -Pattern "^(pip|setuptools|wheel|pkg-resources)" -NotMatch | Out-File -Encoding UTF8 requirements.txt - 如果项目用了
-e .安装本地包,--exclude-editable能避免把源码路径写进文件里(否则别人无法复现)
pipreqs 更适合只导出项目实际 import 的依赖
当你的 venv 里装了很多调试、开发用的包(比如 ipython、black、pytest),但代码里只用了其中几个,pip freeze 就太“宽”了。pipreqs 通过静态分析 Python 文件里的 import 语句来推断真实依赖。
- 先安装:
pip install pipreqs - 在项目根目录运行:
pipreqs . --encoding=utf8 --force(--force覆盖已有requirements.txt) - 注意:它不会识别动态导入(如
importlib.import_module)、条件 import 或字符串拼接的模块名;也不能处理setup.py里声明的依赖 - 若提示 “No such file or directory: 'requirements.txt'”,说明当前目录下没有 Python 文件,检查路径是否正确
导出时要不要加 --all 或 --dev?得看用途
pip freeze 本身没有 --dev 参数,所谓“开发依赖”得靠工具链配合。如果你用 pip-tools,流程就不同:
调用 Cutout.Pro 视觉处理 API 进行背景移除、人像抠图和照片增强,支持文件上传与图片 URL 输入。
- 写
requirements.in,里面放核心依赖(如requests==2.31.0) - 运行
pip-compile --generate-hashes requirements.in,生成带哈希校验的requirements.txt - 开发依赖可另存为
requirements-dev.in,再单独编译 - 这样导出的文件可重现性更强,且能自动解决版本冲突,但需要额外学习成本
别忘了检查 python -m venv 创建的环境是否已激活
导出前最常被忽略的一步:确认终端提示符显示了虚拟环境名,或运行 which python(macOS/Linux)或 where python(Windows)看路径是否指向 venv/bin/python 或 venv\Scripts\python.exe。否则你导出的是系统 Python 的包列表。
另一个隐形坑:venv 激活后若又执行了 sudo pip install,可能把包装到系统 site-packages,导致 pip freeze 结果混杂——永远避免在 venv 里用 sudo pip。
真正干净的导出,始于一个没被污染的激活环境,止于对 requirements.txt 内容的手动抽查:删掉明显不该出现的包,补上 python 版本约束(如 python_version = "3.9")或平台标记(如 pywin32; platform_system == "Windows"),这些细节往往决定别人能不能顺利 pip install -r requirements.txt 成功。
Python免费学习笔记(深入):立即使用
在学习笔记中,你将探索 Python 的核心概念和高级技巧!










