UNKNOWN
Project description
Нахренакозебаян
- Дано:
проект с кучей зависимостей с замороженными версиями прописанных в requirements.txt (pip install -r requirements.txt)
часть зависимостей (особенно опять же собственной разработки) лежат не в pypi, а в git/hg/svn и ставятся через “-e”
- Проблемы:
- “-e” неизбежно потому, что:
не всё можно публиковать в публичный pypi.python.org (внутренние пакеты например)
- непубличный pypi это тоже непросто:
лениво каждый раз заливать пакеты в свой pypi, либо городить сложный continuous integration
надо не забывать обвновлять версю пакета
- “-e” это плохо потому что:
- использование технологии не по назначению (потенциальные подводные камни)
один уже нашёлся — с editable пакетами не работает wheel
pip install -r requirements.txt приходится каждый раз перепроверять все -e зависимости (он мог бы этого не делать, но он тупой — а патчить не хочется)
- Старое решение:
сервис симулирующий pypi, который умеет выдавать пакеты напрямую из git + автоподмена версии пакета в setup.py
сломалось с новым pip, который перестал передавать в pypi версию пакета которую хочет поставить
- Новое решение:
локальная консольная тулза pygift которая парсит requirements.txt и для пакетов, с версией вида -999.dev0+pygift.{VCS_SHA1} генерирует исходник пакета с подменённой версией и в ~/.pygift/index/, откуда его уже может забрать pip используя опцию –find-links
–find-links в упор не видит файлы с “+” в имени версии (хотя это строго PEP!), поэтому ссылки на нужные исходники приходитс передавать поштучно
чтобы не сливать в pypi имена внутренних пакетов pypi запускается с опцией –no-index, а исходники публичных пакетов предварительно складываются в тот же ~/.pygift/index/
Использование
pip install https://github.com/overplumbum/pygift/archive/master.zip
в requirements.txt использовать версии вида {pkg}-999.dev0+pygift.{vcs_sha1}
рядом с requirements.txt создайте файл pygift.json пример тут: https://github.com/overplumbum/pygift/blob/master/pygift.example.json
вызовите команду pygift из корня проекта
Проблемы и решения
Проблема: при вызове pygift pip не может найти исходники “обычного пакета” Решение: проверьте что все пакеты которые у вас используются (включая зависимости зависимостей!), прописаны в вашем requirements.txt
Проблема: при каждом вызове pip install -r requirements.txt часть пакетов всё равно переустанвливается Решение: проверьте название пакета — в requirements.txt и в pygift.json должно быть прописано тоже самое что выводит, например, pip freeze
Проблема: древний пакет требует для установки опции allow-external и allow-unverified Решение: добавьте “old-crap”: {“allow-external”: true} в ваш pygift.json
Project details
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.