Как я могу заставить setuptools установить пакет, который не входит в PyPI?
Я только начал работать с setuptools и virtualenv. Для моего пакета требуется последняя версия python-gearman, доступная только на GitHub. Версия python-gearman, находящаяся на PyPI, старая. Исходный код Github совместим с setuptools, то есть имеет setup.py и т. Д. Есть ли способ заставить setuptools загружать и устанавливать новую версию вместо того, чтобы искать ее в PyPI и устанавливать старую?
К вашему сведению, новый питон-снайпер - http://github.com/mtai/python-gearman
4 ответа
Ключ должен сказать easy_install, где пакет может быть загружен. В данном конкретном случае его можно найти по адресу http://github.com/mtai/python-gearman/tarball/master. Однако эта ссылка сама по себе не будет работать, потому что easy_install не может сказать, просто посмотрев на URL, что она получит.
Изменив его на http://github.com/mtai/python-gearman/tarball/master, 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
, Обратите внимание, что обработка ссылок зависимостей устарела и будет удалена в следующем выпуске.
Вы можете использовать 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
ртутный
pip install hg+https://hg.myproject.org/MyProject/
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 https://pip.pypa.io/en/latest/reference/pip_install.html
Поскольку мне просто нужно было сделать то же самое, я нашел другой способ сделать это как pip
"s --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 .
при установке вашего пакета из его каталога.
Ваниль setuptools
не поддерживает загрузку напрямую из репозитория git, но вы можете использовать одну из ссылок на источник загрузки с этой страницы, например:
easy_install http://github.com/mtai/python-gearman/tarball/master