Подтвердить что ты не робот

Ссылки на установку ссылок

Я использую 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.

4b9b3361

Ответ 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).