0

我希望使用 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
4

2 回答 2

0

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

pip-sync --python-executable venv/bin/python requirements.txt requirements-dev.txt
于 2021-09-22T20:04:48.110 回答
0

这是 pip-tools 的一个已知问题

您必须在项目的虚拟环境中安装 pip-tools(而不是使用 pipx 全局安装),或者如果使用 pipx 安装,请使用以下解决方法来“模拟”pip-sync:

# Remove all dependencies
pip freeze | xargs pip uninstall -y

# Reinstall the dependencies
pip install -r requirements.txt
pip install -r requirements-dev.txt

注意:当 pip-tools 与 pipx 一起安装时,pip-compile 可以正常工作。

于 2021-09-03T02:14:54.320 回答