Введение
Я хочу создать зависимость из одного частного проекта 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?