首页 > 解决方案 > pip-tools 不会将依赖项安装到激活的 virtualenv

问题描述

我希望使用 pip-tools 将我的需求文件分为开发(requirements-dev.txt)和生产(requirements.txt)。

我已经使用 pipx 安装了 pip-tools,因为我希望它在全球范围内可用但被隔离。但是,这样做会导致我的依赖项由 pip-tools 安装在 pip-tools 本身的虚拟环境中,而不是激活的虚拟环境中。

我不知道这是否是一个因素,但我也在使用 pyenv 来管理我的 python 版本,但全局只安装了一个(非系统)版本。

给定我的环境(即使用 pipx 安装的 pip-tools,由 pyenv 管理的 python),我如何在激活的虚拟环境pip-sync中安装依赖项?

这是我重现这一点的工作流程:

# Install pip-tools globally
pipx install pip-tools

# Create a virtual environment and activate it
python -m venv venv
source venv/bin/activate

# Create prod/dev requirement input files (see below for content)

# Autogenerate requirement files
pip-compile requirements.in
pip-compile requirements-dev.in

# Install all dependencies
pip-sync requirements.txt requirements-dev.txt

# Check what is installed (outputs nothing)
pip freeze

# Check what is installed in pip-tools virtual env
~/.local/pipx/venvs/pip-tools/bin/python -m pip freeze

# output shows flask, pytest, and their dependencies

生产依赖文件

# requirements.in
flask

开发依赖文件

# requirements-dev.in
-c requirements.txt
pytest

标签: pythonvirtualenvpyenvpip-toolspipx

解决方案


--python-executable您可以使用选项(在 6.2.0 中引入)在任何环境中安装软件包:

pip-sync --python-executable venv/bin/python requirements.txt requirements-dev.txt

推荐阅读