Замораживание Pip неправильно показывает зависимость от git в venv

#python #pip #python-packaging

Вопрос:

Я установил несколько пакетов python из репозитория git в с помощью команды venv :

python -m pip install git ssh://git@git.privateurl.com/repos/my-private-package.git

Теперь, когда я запускаю pip freeze , пакет выглядит как пакет третьей стороны my-private-package=0.2.1 , а не как форма:

my-private-package @ git ssh://git@git.privateurl.com/repos/my-private-package.git

Как я могу заставить его отображаться как последний, чтобы при его создании requirements.txt он легко передавался другим коллегам, которым просто нужно запустить python -m pip install -r requirements.txt ?

Я пробовал разные версии python (3.6, 3.7, 3.8). Я использую последнюю версию pip ( 21.1.2 ), и я пробовал Ubuntu и Mac, но все равно воспроизвожу проблему. Самое странное, что коллега может выполнять одни и те же команды и получать правильные результаты.

Комментарии:

1. Вы пробовали обновить pip перед запуском pip freeze ? — Вероятно, связано: PEP 610 .

2. Вы упомянули, что ваш pip обновлен, я этого не читал.

Ответ №1:

Я не знаю, как/если pip freeze это будет сделано, но вы можете использовать pip-compile (из pip-tools пакета), чтобы превратить requirements.in список с URL-адресом git в список требований, в котором все еще есть URL-адрес git. Приложение pip-sync синхронизирует ваши пакеты virtualenv с пакетами, указанными в списке требований.

Ответ №2:

Возможно, возникла проблема с каталогом, содержащим информацию о яйце в пакете, который вы пытаетесь установить. Попробуйте удалить его, а затем переустановить пакет с помощью pip install -e . Он создаст новый каталог с соответствующей информацией о яйце.