2014-09-26 3 views
9

Я использую python version 2.7 и pip version is 1.5.6.pip install dependency links

Я хочу установить дополнительные библиотеки из url как git repo на setup.py.

Я поставил дополнительные функции в install_requires параметр в setup.py. Это означает, что для моей библиотеки требуются дополнительные библиотеки, и они также должны быть установлены.

... 
install_requires=[ 
    "Django", 
    .... 
], 
... 

Но URLs как GIT РЕПО является недопустимой строкой в ​​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.

ответ

7

Вам необходимо убедиться, что вы также включили зависимость в свой 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

+1

Он говорит: 'Не удалось найти загрузки, которые удовлетворяют требованию my-extra-libraray == 1.0.0.0 (из my-installed-library-current == 1.0.0.0)' –

+0

@AhmetDAL у вас есть и ссылки зависимостей и установка требует определенных? можете ли вы опубликовать полный 'setup.py', который вы используете? – mjallday

+0

См. Отредактированную часть моего вопроса. –

14

Pip убрана поддержка для dependency_links некоторое время назад.latest version of pip that supports dependency_links is 1.3.1, чтобы установить его

pip install pip==1.3.1 

ваши ссылки зависимостей должны работать в этой точке. Обратите внимание, что dependency_links всегда были последним средством для pip, т.е. если пакет с таким же именем существует на pypi, он будет выбран по вашему.

Замечание, https://github.com/pypa/pip/pull/1955, похоже, начинает разрешать зависимости, что связано с ним, но вам может понадобиться использовать некоторые ключи командной строки для использования более новой версии пипса.

EDIT: Как и в случае с pip 7 ... они переосмысливают ссылки и позволяют им, даже если они не удалили уведомление об исключении из обсуждений, они, кажется, здесь, чтобы остаться. С пип> = 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", 

Также убедитесь, что версия либо выглядит как пример или дата версия, любой другой версиями сделает ГПГ, думает, что его версию Dev и обыкновение устанавливать его ,

+0

Похоже, это больше не так?Насколько я могу судить, в последнем пикселе поддерживается dependency_links. – yelsayed

+0

Вы по-прежнему видите предупреждение, но dependency_links будут оставаться на некоторое время. Насколько мне известно, вам все равно нужен конфиг, см. Примечание в разделе редактирования ответа. – Pykler

+0

Возможно, вам следует удалить информацию о версии пп 1.3.1, это очень старый –

1

Я столкнулся с аналогичной ситуацией, когда хочу использовать фигуру как одну из моих зависимостей в пакете. Однако, если у вас есть окна, вам нужно использовать файл .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'] 
) 

и запустить python setup.py install, он просто заберет стройные на PyPi и вызвать проблемы по установке Windows. После нескольких часов исследований я нашел эту ссылку Force setuptools to use dependency_links to install mysqlclient и в основном использовал from setuptools.command.install import install as _install для ручной установки.

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} 
) 

И сценарий прекрасно работает. Надеюсь, поможет.