如何用pip freeze区分Python项目的测试与非测试依赖?
区分Python项目的运行依赖与测试依赖
1. 手动维护核心运行依赖(requirements.txt)
别用pip freeze直接生成这个文件——它会把你环境里所有已安装的包(包括测试工具、间接依赖)一股脑塞进去,完全不符合需求。你得手动列出项目运行必需的直接模块,比如:
requests>=2.28.0 pandas>=1.5.0
只保留代码跑起来必须的,多余的一概不加。
2. 单独维护测试/开发依赖(requirements_dev.txt)
这个文件专门放测试、开发相关的额外工具,还可以复用核心依赖,写法如下:
# 先引入运行依赖,避免重复写 -r requirements.txt # 测试框架 pytest>=7.0.0 # 代码检查工具 flake8>=5.0.0 # 代码格式化工具 black>=22.0.0
用-r requirements.txt能让开发环境一次性装完所有需要的包,不用分开安装两次。
3. 在setup.py中复用这两个文件
写个简单的读取函数,把文件里的依赖列表导入到对应的字段里,示例代码:
from setuptools import setup def read_requirements(file_path): # 读取文件,过滤注释和空行 with open(file_path, 'r') as f: return [line.strip() for line in f if line.strip() and not line.startswith('#')] setup( name="your-project-name", version="0.1.0", # 运行依赖 install_requires=read_requirements("requirements.txt"), # 开发/测试额外依赖 extras_require={ "dev": read_requirements("requirements_dev.txt") } )
实用小技巧
- 本地开发时,用
pip install -e .[dev]就能一键安装可编辑版本的项目+所有开发依赖,省事儿。 - 如果需要给部署环境锁定精确的依赖版本(避免版本兼容问题),可以单独生成
requirements.lock文件,用pip freeze > requirements.lock就行,但这个只用于部署,别替换手动维护的requirements.txt。
内容的提问来源于stack exchange,提问作者Javi Torre
相关产品推荐
相关产品推荐

