У меня есть временный обходной путь:
Я пропустил использование файла конфигурации и вместо этого выполнил следующий код:
- script: |
python -m twine upload --skip-existing --verbose -p $(pypi-api-token) -u __token__ --repository $(pypi-project-name) --repository-url https://upload.pypi.org/legacy/ dist/*.whl
displayName: 'Publish to PyPi through Twine'
И там я заметил немного больше ( и лучше) регистрация исключений, которая указала мне на две вещи:
- Токен, который я использовал для моего файла конфигурации, был задан для области проекта с именем, отличным от проекта, который я указал в своем служебном подключении
- URL-адрес хранилища действительно должен заканчиваться буксируемым впереди sla sh, потому что в противном случае вы получите исключение RedirectDetected.
На основании приведенных выше результатов я обновил свой фрагмент yaml к следующему:
- script: |
python -m twine upload --skip-existing --verbose --repository $(pypi-project-name) --config-file $(PYPIRC_PATH) dist/*.whl
displayName: 'Publish to PyPi through Twine'
Но при выполнении этого я теперь получаю следующее сообщение об исключении в сборке:
Generating script.
Script contents:
python -m twine upload --skip-existing --verbose --repository arcus-azureml --config-file /home/vsts/work/_temp/twineAuthenticate/2QGKVH/.pypirc dist/*.whl
========================== Starting Command Output ===========================
/bin/bash --noprofile --norc /home/vsts/work/_temp/7605dac9-5fa9-4856-94af-e938018278a5.sh
Uploading distributions to https://upload.pypi.org/legacy/
Uploading arcus_azureml-0.0.2-py3-none-any.whl
0%| | 0.00/5.80k [00:00<?, ?B/s]
100%|██████████| 5.80k/5.80k [00:00<00:00, 52.4kB/s]HTTPError: 403 Client Error: Invalid or non-existent authentication information. See https://pypi.org/help/#invalid-auth for details for url: https://upload.pypi.org/legacy/
Content received from server:
<html>
<head>
<title>403 Invalid or non-existent authentication information. See https://pypi.org/help/#invalid-auth for details</title>
</head>
<body>
<h1>403 Invalid or non-existent authentication information. See https://pypi.org/help/#invalid-auth for details</h1>
Access was denied to this resource.<br/><br/>
Invalid or non-existent authentication information. See https://pypi.org/help/#invalid-auth for details
Я также вывел содержимое файла pypir c с помощью команды CAT содержимое файла выглядит следующим образом:
[distutils]
index-servers=arcus-azureml
[arcus-azureml]
repository=https://upload.pypi.org/legacy/
username=build
password=***
Обновленное решение
Итак, исправление для размещения 403 состояло в том, чтобы изменить мой Service Con Отказ от использования имени пользователя и пароля в качестве метода аутентификации вместо токена аутентификации со следующими настройками:
- Имя пользователя:
__token__
- Пароль: фактический токен API в качестве пароля
После выполнения этого все работало так, как я хотел.