Нахренакозебаян
===============

Дано:
 - проект с кучей зависимостей с замороженными версиями прописанных в requirements.txt (pip install -r requirements.txt)
 - часть зависимостей (особенно опять же собственной разработки) лежат не в pypi, а в git/hg/svn и ставятся через "-e"

Проблемы:
 - "-e" неизбежно потому, что:
 	 1) не всё можно публиковать в публичный pypi.python.org (внутренние пакеты например)
 	 2) непубличный pypi это тоже непросто:
 	 	1) лениво каждый раз заливать пакеты в свой pypi, либо городить сложный continuous integration
 	 	2) надо не забывать обвновлять версю пакета
 - "-e" это плохо потому что:
 	1) использование технологии не по назначению (потенциальные подводные камни)
 		- один уже нашёлся — с editable пакетами не работает wheel
 	2) 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`
