Skip to main content

UNKNOWN

Project description

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

Дано:
  • проект с кучей зависимостей с замороженными версиями прописанных в 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/

Использование

Проблемы и решения

Проблема: при вызове 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.

Source Distribution

pygift-3.0.3.tar.gz (5.8 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page