Как я могу заставить setuptools установить пакет, который не входит в PyPI? - PullRequest
135 голосов
/ 13 августа 2010

Я только начал работать с setuptools и virtualenv.Для моего пакета требуется последняя версия python-gearman, доступная только на GitHub.Версия python-gearman, находящаяся на PyPI, старая.Источник Github совместим с setuptools, то есть имеет setup.py и т. Д. Есть ли способ заставить setuptools загружать и устанавливать новую версию вместо того, чтобы искать ее в PyPI и устанавливать старую?

FYI,новый питон-редуктор - http://github.com/mtai/python-gearman

Ответы [ 4 ]

152 голосов
/ 14 августа 2010

Ключ должен сказать easy_install, где пакет может быть загружен. В данном конкретном случае ее можно найти по адресу http://github.com/mtai/python-gearman/tarball/master.. Однако эта ссылка сама по себе не будет работать, поскольку easy_install не может сказать, просто посмотрев URL-адрес, что он получит.

Изменив его на http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta, easy_install сможет определить имя пакета и его версию.

Последний шаг - добавить URL-адрес к ссылкам зависимостей вашего пакета, например ::

.
setup(
   ...
   dependency_links = ['http://github.com/mtai/python-gearman/tarball/master#egg=gearman-2.0.0beta']
)

Теперь, когда ВАШ пакет устанавливается, easy_install обнаружит, что есть «gearman 2.0.0beta», доступный для загрузки с этого URL, и с радостью выберет его вместо того, который используется в PyPI, если вы укажете «gearman> = 2.0». .0beta "в ваших зависимостях ..

(Обычно для такого рода действий нужно добавить ссылку на свою страницу PyPI на загружаемый источник; в этом случае, если автор пакета gearman включил ссылку, подобную приведенной выше, вы бы быть уже установленным. Как правило, люди помечают версию для разработки как «myproject-dev», а затем люди используют требование «myproject> = somever, == dev», так что если нет пакета с некоторыми или более высокими значениями, easy_install постараюсь проверить или скачать релиз.)

Вам нужно будет указать --process-dependency-links при использовании pip. Обратите внимание, что обработка ссылок зависимостей устарела и будет удалена в следующем выпуске.

63 голосов
/ 26 мая 2014

Вы можете использовать формат pip install protocol+location[@tag][#egg=Dependency] для установки напрямую из источника с помощью pip.

Гит

pip install git+https://github.com/username/repo.git
pip install git+https://github.com/username/repo.git@MyTag
pip install git+https://github.com/username/repo.git@MyTag#egg=ProjectName

Mercurial

pip install hg+https://hg.myproject.org/MyProject/

1010 * SVN * pip install svn+svn://svn.myproject.org/svn/MyProject Bzr

pip install bzr+http://bzr.myproject.org/MyProject/trunk

Поддерживаются следующие протоколы: [+git, +svn, +hg, +bzr]

Версия

@tag позволяет указать конкретную версию / тег для проверки.

#egg=name позволяет вам указать, что проект является зависимостью для других.

Порядок всегда должен быть @tag#egg=name.

Частные хранилища

Вы также можете установить из частных репозиториев, изменив протокол на SSH (ssh://) и добавив соответствующего пользователя (git@):

git+ssh://git@github.com/username/my_private_repo

Вы также можете установить из частных репозиториев с именем пользователя / паролем.

git+https://<username>:<password>@github.com/<user>/<repo>.git

Github предоставляет возможность создавать персональных токенов OAuth , которые можно циклически

git+https://<oauth token>:x-oauth-basic@github.com/<user>/<repo>.git

requirements.txt

requirements.txt используется для указания зависимостей проекта:

* * Requirements.txt тысяча сорок-девять
package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

Они не устанавливаются автоматически вместе с пакетом и должны быть установлены с помощью команды pip -r requirements.txt.

Включая файлы требований

Файлы требований могут включать другие файлы требований:

Требования к-Docs.txt

sphinx
-r requirements-dev.txt

Требования к-dev.txt

some-dev-tool
-r requirements.txt

requirements.txt

package1
package2==1.0.2
package3>=0.0.4
git+https://github.com/username/repo.git

setup.py

Файлы требований могут устанавливать зависимости, указанные в setup.py, с помощью следующей команды:

-e .

setup.py также можно установить из репозиториев, используя тот же синтаксис, что и выше, но используя значение dependency_links, как указано в в этом ответе .

Ссылки:

https://pip.pypa.io/en/latest/user_guide.html#installing-packages https://pip.pypa.io/en/latest/reference/pip_install.html

13 голосов
/ 21 ноября 2018

Поскольку мне просто нужно было сделать то же самое, я нашел другой способ сделать это, поскольку pip --process-dependency-links планируется удалить в pip 19.0 в соответствии с этим комментарием .

pip 18.1 включает следующую функцию

Разрешить использование URL-требований PEP 508 в качестве зависимостей.

Из описания PEP 508 синтаксис для таких зависимостей URL выглядит следующим образом:

Минимальный поиск на основе URL:

pip @ https://github.com/pypa/pip/archive/1.3.1.zip#sha1=da9234ee9982d4bbb3c72346a6de940a148ea686

Так что в вашем setup.py это будет выглядеть

setup(
   ...
   install_requires = [
   ...
   'python-gearman @ https://github.com/mtai/python-gearman/archive/master.zip'
   ...
   ]
)

Обратите внимание, что ссылка представляет собой архивный файл и может также представлять собой конкретный выпуск или ветвь репозитория, как описано в этом ответе . Также смотрите этот ответ для работы с другими хостами репозитория.

Насколько мне известно, самый простой способ обновить зависимость - использовать pip install -I . при установке пакета из его каталога.

6 голосов
/ 13 августа 2010

Vanilla setuptools не поддерживает загрузку напрямую из репозитория git, но вы можете использовать одну из ссылок на источник с этой страницы, например:

easy_install http://github.com/mtai/python-gearman/tarball/master
...