Как включить зависимости git в setup.py для установки pip

#python #git #pip #setup.py

#python #git #pip #setup.py

Вопрос:

Мне нужно включить пакеты Python, доступные через общедоступные репозитории Github, вместе с моим пакетом Python (2.7). Мой пакет должен быть установлен с помощью pip using setup.py .

До сих пор это можно было сделать, используя dependency_links в setup.py файле:

 setuptools.setup(
   name="my_package",
   version="1.0",
   install_requires=[
       "other_package==1.2"
   ],
   dependency_links=[
      "https://github.com/user/other_package/tarball/master#egg=other_package-1.2"
   ]    
)
 

Это все еще работает, когда пакет устанавливается с --process-dependency-links флагом, но dependency_links функциональность, похоже, устарела, поскольку:

 pip install git https://github.com/user/my_package@master#egg=my_package-1.0 --process-dependency-links
 

выдает мне следующее предупреждение:

 DEPRECATION: Dependency Links processing has been deprecated and will be removed in a future release.
 

Существует ли альтернативный способ включения git зависимостей в setup.py файл с поддержкой установки pip?

Редактировать (17.10.2016), чтобы прояснить мой вариант использования:

Допустим, я обнаружил ошибку other_package . Я разветвляю соответствующий репозиторий на Github, исправляю ошибку и делаю запрос на извлечение. Мой запрос на извлечение не принимается немедленно (или никогда не будет, потому что пакет больше не поддерживается активно). Я хотел бы распространять my_package вместе с моим fork of other_package и хочу, чтобы пользователи могли устанавливать pip my_package без каких-либо дополнительных знаний о деталях этого требования и без необходимости указывать какие-либо дополнительные флаги при установке. Пользователи my_package также должны иметь возможность включать my_package в качестве требования в свои собственные пользовательские пакеты.

Как этого можно достичь, учитывая совместимость с различными режимами установки (колеса, яйца, разработка, …)?

Комментарии:

1. Кроме того, в управляемой среде вы не всегда можете указать --process-dependency-links , как в стандартном движке приложений Google, но для выполнения требований необходимы внешние частные репозитории.

Ответ №1:

Я столкнулся именно с этой проблемой (обнаружил ошибку в чужом проекте, от которого зависел мой, сделал запрос на извлечение, но у меня не было времени ждать, пока они объединятся).

Я решил это, добавив эту строку в install_requires :

 'my-package @ https://github.com/user/my-package/archive/master.tar.gz'
 

Комментарии:

1. В качестве примечания, с тех пор я узнал, что PyPI не позволит вам публиковать пакет, который имеет URL-адрес в качестве зависимости. Если вам нужно опубликовать на PyPI, другой ответ от Филиппа будет лучше.

Ответ №2:

Лично я бы не стал включать репозитории git в качестве зависимостей. В сценариях, которые вы описываете, я вижу два варианта.

Где пакет не поддерживается

Если пакет не поддерживается, вы можете либо разветвить проект и распространить свою собственную версию, либо вы можете распространять разветвленный код как подмодуль вашего собственного кода (т. Е. Включить внешнюю зависимость непосредственно в ваш распространяемый пакет)

Лично я предпочитаю распространять свою собственную версию.

Где пакет еще не включил ваше исправление ошибки

В этом случае я бы распространял исправленный код как часть вашего пакета до тех пор, пока ошибка не будет исправлена.

Комментарии:

1. @h345k34cr Я понимаю, почему этот ответ может показаться разочаровывающим. К сожалению, из-за устаревания функции я не знаю, что это можно сделать, и у меня сложилось впечатление, что причина, по которой она устарела, заключалась в том, что этого не следовало делать. Таким образом, я предоставил варианты как способ для людей достичь тех же конечных целей, учитывая, что функция больше не работает и что удаление указанной функции является преднамеренным, а не предлагает запутанный обходной путь, который ломает вещи.