Ссылки на установку ссылок
Я использую python version 2.7
и pip version is 1.5.6
.
Я хочу установить дополнительные библиотеки из url как репозиторий git на setup.py.
Я помещал дополнения в параметр install_requires
в setup.py
. Это значит, что для моей библиотеки требуются дополнительные библиотеки, и они также должны быть установлены.
...
install_requires=[
"Django",
....
],
...
Но URL-адреса, подобные git repos, недопустимы в строке install_requires
в setup.py
. Предположим, что я хочу установить библиотеку из github. Я искал эту проблему, и нашел что-то такое, что я могу разместить в библиотеке таким образом, чтобы в dependency_links
в setup.py
. Но это все еще не работает. Вот мое определение ссылок зависимостей;
dependency_links=[
"https://github.com/.../tarball/master/#egg=1.0.0",
"https://github.com/.../tarball/master#egg=0.9.3",
],
Ссылки действительны. Я могу загрузить их из интернет-браузера с этими URL-адресами. Эти дополнительные библиотеки по-прежнему не установлены с моей настройкой. Я также попробовал параметр --process-dependency-links
, чтобы заставить pip. Но результат такой же. Я не ошибаюсь при копировании.
После установки я не вижу библиотеки в pip freeze
в результате dependency_links
.
Как я могу сделать их загруженными с помощью моей установки setup.py
?
Отредактировано:
Вот мой полный setup.py
from setuptools import setup
try:
long_description = open('README.md').read()
except IOError:
long_description = ''
setup(
name='esef-sso',
version='1.0.0.0',
description='',
url='https://github.com/egemsoft/esef-sso.git',
keywords=["django", "egemsoft", "sso", "esefsso"],
install_requires=[
"Django",
"webservices",
"requests",
"esef-auth==1.0.0.0",
"django-simple-sso==0.9.3"
],
dependency_links=[
"https://github.com/egemsoft/esef-auth/tarball/master/#egg=1.0.0.0",
"https://github.com/egemsoft/django-simple-sso/tarball/master#egg=0.9.3",
],
packages=[
'esef_sso_client',
'esef_sso_client.models',
'esef_sso_server',
'esef_sso_server.models',
],
include_package_data=True,
zip_safe=False,
platforms=['any'],
)
Отредактировано 2:
Вот журнал протоколов:
Downloading/unpacking esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Getting page https://pypi.python.org/simple/esef-auth/
Could not fetch URL https://pypi.python.org/simple/esef-auth/: 404 Client Error: Not Found
Will skip URL https://pypi.python.org/simple/esef-auth/ when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Getting page https://pypi.python.org/simple/
URLs to search for versions for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0):
* https://pypi.python.org/simple/esef-auth/1.0.0.0
* https://pypi.python.org/simple/esef-auth/
Getting page https://pypi.python.org/simple/esef-auth/1.0.0.0
Could not fetch URL https://pypi.python.org/simple/esef-auth/1.0.0.0: 404 Client Error: Not Found
Will skip URL https://pypi.python.org/simple/esef-auth/1.0.0.0 when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Getting page https://pypi.python.org/simple/esef-auth/
Could not fetch URL https://pypi.python.org/simple/esef-auth/: 404 Client Error: Not Found
Will skip URL https://pypi.python.org/simple/esef-auth/ when looking for download links for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Could not find any downloads that satisfy the requirement esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Cleaning up...
Removing temporary dir /Users/ahmetdal/.virtualenvs/esef-sso-example/build...
No distributions at all found for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Exception information:
Traceback (most recent call last):
File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
status = self.run(options, args)
File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/commands/install.py", line 278, in run
requirement_set.prepare_files(finder, force_root_egg_info=self.bundle, bundle=self.bundle)
File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/req.py", line 1177, in prepare_files
url = finder.find_requirement(req_to_install, upgrade=self.upgrade)
File "/Users/ahmetdal/.virtualenvs/esef-sso-example/lib/python2.7/site-packages/pip/index.py", line 277, in find_requirement
raise DistributionNotFound('No distributions at all found for %s' % req)
DistributionNotFound: No distributions at all found for esef-auth==1.0.0.0 (from esef-sso==1.0.0.0)
Кажется, он не использует источники в dependency_links
.
Ответы
Ответ 1
Вам нужно также убедиться, что вы включили зависимость в свой install_requires
.
Здесь пример setup.py
#!/usr/bin/env python
from setuptools import setup
setup(
name='foo',
version='0.0.1',
install_requires=[
'balog==0.0.7'
],
dependency_links=[
'https://github.com/balanced/balog/tarball/master#egg=balog-0.0.7'
]
)
Здесь проблема с вашим примером setup.py
:
Вам не хватает имени яйца в настройках зависимых ссылок.
У вас есть
https://github.com/egemsoft/esef-auth/tarball/master/#egg=1.0.0.0
Вам нужно
https://github.com/egemsoft/esef-auth/tarball/master/#egg=esef-auth-1.0.0.0
Ответ 2
Снова отключить поддержку зависимых_links. последняя версия pip, которая поддерживает dependency_links, - это 1.3.1, чтобы установить его
pip install pip==1.3.1
ваши ссылки зависимостей должны работать в этой точке. Обратите внимание, что dependency_links всегда были последним средством для pip, т.е. если пакет с таким же именем существует на pypi, он будет выбран по вашему.
Обратите внимание, https://github.com/pypa/pip/pull/1955, похоже, начинает разрешать dependency_links, пип сохранил его, но вам может потребоваться использовать некоторые ключи командной строки для использования более новая версия протокола.
РЕДАКТИРОВАТЬ. По состоянию на pip 7... они переосмысливают ссылки и позволяют им, даже если они не удалили уведомление об устаревании, из обсуждений, которые они, кажется, здесь, чтобы остаться. С pip >= 7 вот как вы можете установить вещи
pip install -e . --process-dependency-links --allow-all-external
Или добавьте следующее в pip.conf, например. /etc/pip.conf
[install]
process-dependency-links = yes
allow-all-external = yes
trusted-host =
bitbucket.org
github.com
EDIT
Трюк, который я узнал, - это увеличить номер версии до действительно высокого уровня, чтобы убедиться, что пип не предпочитает версию ссылки без зависимостей (если это то, что вы хотите). В приведенном выше примере сделайте ссылку зависимостей следующим образом:
"https://github.com/egemsoft/django-simple-sso/tarball/master#egg=999.0.0",
Кроме того, убедитесь, что версия похожа на пример или является версией даты, любое другое управление версиями заставит pip подумать о своей dev-версии и не будет ее устанавливать.
Ответ 3
Я столкнулся с подобной ситуацией, когда я хочу использовать стройную как одну из моих зависимостей пакета. Однако у Shapely есть предостережение о том, что если вы используете Windows, вы должны использовать файл .whl с http://www.lfd.uci.edu/~gohlke/pythonlibs/. В противном случае вам нужно установить компилятор C, чего я не хочу. Я хочу, чтобы пользователь просто использовал pip install mypackage
вместо того, чтобы устанавливать кучу других вещей.
И если у вас есть типичная настройка с dependency_links
setup(
name = 'streettraffic',
packages = find_packages(), # this must be the same as the name above
version = '0.1',
description = 'A random test lib',
author = 'Costa Huang',
author_email = '[email protected]',
install_requires=['Shapely==1.5.17'],
dependency_links = ['http://www.lfd.uci.edu/~gohlke/pythonlibs/ru4fxw3r/Shapely-1.5.17-cp36-cp36m-win_amd64.whl']
)
и запустите pip install.
Он просто выберет корректный Pypi и вызовет проблемы при установке Windows. После нескольких часов исследований я обнаружил, что эта ссылка заставляет setuptools использовать зависимые_ссылки для установки mysqlclient и в основном использовать from setuptools.command.install import install as _install
для ручной установки shapely.
from setuptools.command.install import install as _install
from setuptools import setup, find_packages
import pip
class install(_install):
def run(self):
_install.do_egg_install(self)
# just go ahead and do it
pip.main(['install', 'http://localhost:81/Shapely-1.5.17-cp36-cp36m-win_amd64.whl'])
setup(
name = 'mypackage',
packages = find_packages(), # this must be the same as the name above
version = '0.1',
description = 'A random test lib',
author = 'Costa Huang',
author_email = '[email protected]',
cmdclass={'install': install}
)
И сценарий работает хорошо. Надеюсь, поможет.
Ответ 4
Опция --process-dependency-links
для включения dependency_links
была удалена в Pip 19.0.
Вместо этого вы можете использовать URL-адрес PEP 508, чтобы указать свою зависимость, которая поддерживается начиная с пипа 18.1. Вот пример выдержки из setup.py
:
install_requires=[
"numpy",
"package1 @ git+https://github.com/user1/package1",
"package2 @ git+https://github.com/user2/[email protected]",
],
Обратите внимание, что Pip не поддерживает установку пакетов с такими зависимостями от PyPI, и в будущем вы не сможете загружать их в PyPI (см. Запись новостей для Pip 18.1).