#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 Я понимаю, почему этот ответ может показаться разочаровывающим. К сожалению, из-за устаревания функции я не знаю, что это можно сделать, и у меня сложилось впечатление, что причина, по которой она устарела, заключалась в том, что этого не следовало делать. Таким образом, я предоставил варианты как способ для людей достичь тех же конечных целей, учитывая, что функция больше не работает и что удаление указанной функции является преднамеренным, а не предлагает запутанный обходной путь, который ломает вещи.