В 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. Правила дает официальная документация.