В Basic Auth URL некоторые символы логина или пароля имеют служебное значение и должны быть percent-encoded до передачи pip. Иначе адрес разбирается неверно.

Кодируйте только credential

Преобразуйте специальные байты внутри username и password, сохранив разделители схемы, hostname и пути, затем проверьте результат без вывода полного секрета.

Не вставляйте пароль вручную

Готовый URL легко остается в history, process list или traceback, поэтому создавайте значение из secret store внутри короткоживущего job и включайте маскирование логов для стандартного вывода и сообщений об ошибках.

python -m pip install --index-url https://USER:ENCODED_SECRET@packages.example/simple package_name

Предпочитайте канал без секрета в URL

Для постоянной настройки используйте netrc или keyring, а percent-encoding оставьте совместимым запасным вариантом для системы, которая поддерживает только Basic Auth.

Percent-encoding исправляет синтаксис URL, но не шифрует пароль, поэтому TLS и защита журнала остаются обязательными на каждом runner.

Файл без URL описывает netrc для pip. Правила дает официальная документация.