Как добавить зависимость от локально обслуживаемого модуля Python за аутентификацию с помощью setuptools?[SSL: CERTIFICATE_VERIFY_FAILED] - PullRequest
0 голосов
/ 10 июня 2019

Введение

Я хочу создать зависимость из одного частного проекта Python (myproject) от другого частного проекта Python (example). В настоящее время я пытаюсь запустить python setup.py install и заставить setuptools найти библиотеку example и установить ее тоже.

Тестирование

Я опубликовал зависимость от локального экземпляра Artifactory как egg .

Я использую версию 19.1.1.

Я использую macOS 10.13.6.

Построение URL

Согласно примечаниям к выпуску pip была добавлена ​​следующая функция:

Разрешить использование URL-требований PEP 508 в качестве зависимостей.

В качестве меры безопасности pip вызовет исключение при установке пакетов из PyPI, если эти пакеты зависят от пакетов, также не размещенных в PyPI. В будущем PyPI будет напрямую блокировать загрузку пакетов с такими внешними URL-зависимостями. (# 4187)

Я попытался добавить следующее в setup.py родительского проекта:

install_requires=['example'],
dependency_links=['https://artifactory.company.com/api/pypi/pypi-local/simple#egg=example-0.1.0.dev27'],

Запуск

При запуске python setup.py install я получаю следующий вывод:

...
Processing dependencies for myproject==0.0.0
Searching for example
Downloading https://artifactory.company.com/api/pypi/pypi-local/simple#egg=example-0.1.0.dev27
Authenticating as me for https://artifactory.company.com/api/pypi/pypi-local/simple#egg=example-0.1.0.dev27 (from .pypirc)
error: Download error for https://artifactory.company.com/api/pypi/pypi-local/simple#egg=example-0.1.0.dev27: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:726)

Так что меня смущает [SSL: CERTIFICATE_VERIFY_FAILED]. Если я бегу:

curl -v  https://me:<token>@artifactory.company.com/api/pypi/pypi-local/simple#egg=example-0.1.0.dev27

Я получаю следующее:

...
* Cipher selection: ALL:!EXPORT:!EXPORT40:!EXPORT56:!aNULL:!LOW:!RC4:@STRENGTH
* successfully set certificate verify locations:
*   CAfile: /etc/ssl/cert.pem
  CApath: none
* TLSv1.2 (OUT), TLS handshake, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Server hello (2):
* TLSv1.2 (IN), TLS handshake, Certificate (11):
* TLSv1.2 (IN), TLS handshake, Server key exchange (12):
* TLSv1.2 (IN), TLS handshake, Server finished (14):
* TLSv1.2 (OUT), TLS handshake, Client key exchange (16):
* TLSv1.2 (OUT), TLS change cipher, Client hello (1):
* TLSv1.2 (OUT), TLS handshake, Finished (20):
* TLSv1.2 (IN), TLS change cipher, Client hello (1):
* TLSv1.2 (IN), TLS handshake, Finished (20):
* SSL connection using TLSv1.2 / ECDHE-RSA-AES256-GCM-SHA384
...
GET /api/pypi/pypi-local/simple HTTP/1.1
> Host: artifactory.company.com
> Authorization: Basic abcxyz0d
> User-Agent: curl/7.54.0
> Accept: */*
>
> 
< HTTP/1.1 302 Found
...

Похоже, что проверка SSL-сертификации работает за пределами setuptools.

Если я захожу на сайт, указанный в этом выводе (https://artifactory.company.com/api/pypi/pypi-local/simple/#egg=example-0.1.0.dev27), я вижу гиперссылку для example. Если я нажму на гиперссылку, я перейду к списку гиперссылок всех колес и яиц, которые я опубликовал, и будет выглядеть так:

...
example-0.1.0.dev26-py2-none-any.whl
example-0.1.0.dev27-py2-none-any.whl
example-0.1.0.dev27-py2.7.egg
...

И я могу скачать их без проблем.

Вопрос

Как мне создать зависимость из одного частного проекта Python (myproject) от другого частного проекта Python (example) с помощью setuptools?

1 Ответ

0 голосов
/ 10 июня 2019

curl, вероятно, использует другой набор доверенных сертификатов, чем Python.Может быть, ваша компания предварительно устанавливает свои собственные сертификаты в хранилище системного доверия?Если его там нет, вы можете получить сертификат с самого сервера артефактов.

Вот ответ о добавлении сертификатов для использования в pip: https://stackoverflow.com/a/52961564/11451509

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...