如何使用pip安装包使其不被pip freeze写入requirements.txt?
使用pip实现开发依赖不被
pip freeze捕获的方案 pip本身没有像Poetry的--dev那样原生的开发依赖隔离参数,但可以通过以下几种方式模拟实现需求:
1. 指定独立安装目录
将开发依赖安装到Python默认site-packages以外的目录,这样pip freeze不会扫描到这些包:
pip install --install-option="--install-lib=$HOME/dev_deps" pytest black flake8
使用这些工具时,需要将该目录加入PYTHONPATH环境变量,或者直接调用工具的绝对路径(比如$HOME/dev_deps/bin/pytest)。
2. 用虚拟环境分离环境
创建两个独立的虚拟环境:
- 生产环境:仅安装业务运行必需的依赖,执行
pip freeze > requirements.txt导出生产依赖 - 开发环境:安装生产依赖+所有开发工具,日常开发使用这个环境
这种方式逻辑清晰,是最推荐的方案,完全避免开发依赖混入生产依赖列表。
3. 过滤pip freeze的输出
如果开发依赖和生产依赖在同一个环境,可以通过命令过滤掉不需要的包:
- 直接过滤指定包:
pip freeze | grep -v "pytest\|black\|flake8" > requirements.txt
- 维护开发依赖列表(如
dev-requirements.txt),用差集过滤:
comm -23 <(pip freeze | sort) <(sort dev-requirements.txt) > requirements.txt
这种方式需要手动维护开发依赖列表,适合依赖结构简单的场景。
4. 无依赖安装到自定义目录
如果不想让开发依赖的子依赖也被捕获,可结合--no-deps参数:
pip install --no-deps --install-option="--install-lib=$HOME/dev_deps" pytest
同样需要通过PYTHONPATH或绝对路径调用工具。
内容的提问来源于stack exchange,提问作者Gwang-Jin Kim
相关产品推荐
相关产品推荐

