Я пишу приложение на Python. Требуется определенная версия Python и некоторые сторонние зависимости, доступные в PyPI. Это также зависит от частной библиотеки Python, которую я имею в частном репозитории Git. Я хотел бы зависеть от конкретного тега Git. Мне нужно иметь возможность раскручивать эту среду как на локальном компьютере (где у меня есть SSH-доступ к репозиторию git), так и на CI-сервере (где у меня HTTPS-доступ к репозиторию git с использованием имени пользователя и пароля). Я изо всех сил стараюсь настроить свой Pip-файл так, чтобы он работал в обоих случаях.
Я попытался указать зависимость URL-адреса с помощью URL-адреса SSH, а затем на компьютере CI, к которому у меня есть только доступ HTTPS, попытался сначала установить библиотеку через https непосредственно в виртуальную среду. Проблема в том, что весь URL (включая протокол) хранится в Pipfile.lock (и весь URL проверяется pip при сравнении существующей установки с новой).
pipenv устанавливает зависимость от ssh:
$ pipenv install -e git+ssh://git@git.domain.com/my-private-lib@v0.1#egg=my-private-lib
конечно, если я попытаюсь просто выполнить синхронизацию на компьютере CI, произойдет сбой:
$ git clone my-project
$ cd my-project
$ pipenv sync
# Warning: Your dependencies could not be resolved.
пытается установить использование https перед запуском pipenv:
$ git clone my-project
$ cd my-project
$ virtualenv venv
$ source venv/bin/activate
$ pip install my-private-repo @ git+https://my_user:my_token@git.domain.com/my-private-lib@v0.1
$ deactivate
$ pipenv sync
Но это все равно скажет мне, что он не может достичь ssh: //git@git.domain...
Я ценю, что цель pipenv - указать конкретные зависимости с конкретными источниками. В моем случае источник немного отличается между двумя машинами. Есть ли способ обойти это? Возможно, способ отключить точную проверку URL и просто проверить хэш git?