2008-03-22

Как запустить ваш собственный PYPI сервер

Tarek Ziadé  2008-03-22 00:00

Из практики известно, что реальная польза от разнообразных репозиториев ПО появляется тогда, когда появляется возможность создавать не только централизованные, но и локальные репозитории, расчитанные на использование ограниченным кругом лиц. С точки зрения редакции (хи-хи) это имеет, в основном, психологический аспект: разработчикам психологически тяжело перейти к тому, что бы сделать доступными свои (кривые) коды всему миру. Хотя, конечно, чисто прагматические цели также имеют место. В любом случае, возможность создать личный репозиторий всегда становится важной точкой в его развитии.

Мы публикуем перевод статьи, рассказывающей о том, как уже сейчас можно создать свой собственный аналог PYPI, известного также как "cheeseshop".

Как запустить ваш собственный, приватный <a title="Словарь: PyPI" href="%40%40searchpage.html?keyword.any_of:record:tuple=PyPI">PyPI</a> сервер

Как запустить ваш собственный, приватный PyPI сервер

PloneSofwareCenter 1.5 в настоящее время интенсивно разрабатывается и его релиз еще не выпущен, но существующий код работает уже достаточно хорошо для использования его в качестве сервера, сходного с PyPI. Это может быть полезно для компаний, разрабатывающих програмное обеспечение на python и нуждающихся во внутреннем, централизованном хранилище egg-пакетов. Мы (Ingeniweb) используем этот подход что бы работать над заказными проектами. Предлагаемое руководство объясняет как установить сервер PloneSoftwareCenter, если вы хотите иметь возможность легко адаптироваться к тому, что будет следующей версией работающей plone.org через несколько месяцев (но, разумеется, вы используете этот код на свой собственный риск).

Зачем нужен приватный PYPI?

Пусть у вас есть несколько пакетов на python и вы хотите работать с ними также, как на Cheeseshop. Другими словами, работать с ними используя easy_install, zc.buildout и т.п.

Но эти пакеты - являются внутренними разработками вашей компании и по каким-то причинам не могут быть опубликованы для свободного доступа.

Простейший путь - сохранить egg-пакеты в папке какого-либо сетевого хранилища, но distutils и setuptools предлагают множество удобных команд, позволяющих автоматически собирать и заливать пакеты на PyPI или любой сервер, предоставляющий API PyPI.

Как? PloneSoftwareCenter!

Сообщество Plone предоставило замечательный инструмент для управление egg-пакетами. Этот инструмент PyPI-совместим, иными словами, с ним можно взаимодействовать как с cheeseshop используя программы, запускаемые из командной строки.

Как пример, вы можете посмотреть раздел продуктов на plone.org, который работает на основе PSC.

Шаги установки

Благодаря zc.buildout, PloneSoftwareCenter (PSC) прост в установке. Тем не менее, пока нет бинарного дистрибутива, несколько составляющих придется компилировать самостоятельно.

Шаг 1: предварительные требования

Счастливые пользователи Windows могут скачать этот архив: http://release.ingeniweb.com/third-party-dist/python , распаковывать его и запустить "install.bat", который установит python 2.4 вместе с набором дополнительных программ и установит переменную среды PATH.

Пользователям linux, следует убедиться, что установлен gcc, make и subversion. Затем нужно установить easy_install и PIL, примерно такими командами:

$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ python ez_setup.py
$ easy_install http://release.ingeniweb.com/third-party-dist/PILwoTk-1.1.6.4.tar.gz

(от редакции: есть интересная статья про использование easy_install)

Шаг 2: установка PSC

  1. Создайте директорию в вашей системе, назвав ее softwarecenter;

  2. Войдите в нее и скачайте коды PSC командой SVN:

    $ svn co http://svn.plone.org/svn/collective/Products.PloneSoftwareCenter/buildout/trunk .
    
  3. Запустите buildout следующими командами, это займет некоторое время на скачивание всех элементов PSC:

    $ python bootstrap.py
    $ bin/buildout
    
  4. Запустите сервер:

    $ bin/instance start
    

Шаг 3: настройка PSC

Теперь создадим вебсайт на основе Plone, использующий PloneSoftwareCenter.

  1. Откройте браузер и перейдите на страницу http://localhost80/manage . Логин и пароль, обычно, admin/admin;
  2. В левой части страницы находится выкидное меню, выберете в нем пункт “Plone Site”, затем нажмите кнопку "add";
  3. В появившейся форме наберите в поле id строку "plone" и нажмите кнопку "enter";
  4. Перейдите на страницу http://localhost80/plone/prefs_install_products_form;
  5. Отметте “PloneSoftwareCenter” на левой стороне страницы и нажмите кнопку “Install”;
  6. Перейдите на страницу http://localhost80/plone ;
  7. В меню "Add new...", нажмите на "software center”;
  8. В появившейся форме, в поле Title, введите "Catalog";
  9. Выберете "Use Classifiers to display Categories (with Topic :: )" в пункте **Classifiers*;
  10. Нажмите кнопку "Save".

Ваш Software Center настроен и доступен как http://localhost80/plone/catalog .

Шаг 4: настройка на стороне клиента

Теперь посмотрим как сделать настройки на стороне клиента, что бы использовать только что созданный Software Center:

  1. Установите iw.dist:

    $ easy_install iw.dist
    
  2. Создайте файл .pypirc в вашей домашней директории со следующим содержимым:

    [distutils]
    index-servers =
      pypi
      local
    
    [pypi]
    username:YOUR_PYPI_LOGIN
    password:YOUR_PYPI_PASSWORD
    
    [local]
    repository:http://localhost80/plone/catalog/
    username:admin
    password:admin
    

Конечно, если вы находитесь на другой машине, то вместо localhost нужно использовать имя, по которому машина, содержащая PSC, зарегистрирована в DNS;

Пакет iw.dist добавит две новых команды в distutils: mregister и mupload. Эти команды улучшают регистрацию и загрузку пакетов, так, что бы distutils работала с несколькими серверами. Пакет должен вскоре войти в Python 2.6.

Шаг 5: давайте использовать это!

Теперь, в distutils доступны две новые команды, mregister и mupload, которые дают возможность использовать либо ваш PSC либо PYPI.

Чтобы загрузить egg-пакет в PSC, нужно использовать команду:

$ python setup.py mregister sdist bdist_egg mupload -r local

Чтобы загрузить egg-пакет в PyPI:

$ python setup.py mregister sdist bdist_egg mupload -r pypi

Если ключ -r пропущен, то будет использован PyPI.

Если нужно указать использование PSC в zc.buildout или easy_install, можно указать http://localhost80/plone/catalog/simple как ссылку для поиска или значение индекса:

[buildout]
find-links = http://localhost80/plone/catalog/simple

или:

$ easy_install -f http://localhost80/plone/catalog/simple my.egg

От редакции

Оригинал статьи: http://tarekziade.wordpress.com/2008/03/20/how-to-run-your-own-private-pypi-cheeseshop-server/ , там же есть некоторое обсуждение, общая суть которого сводится к обсуждению некоторого альтернативного ПО: haufe.eggserver, который уже весь из себя под zope3.4 (насколько я понял), что является несомненным плюсом. Статью про установку haufe.eggserver попробуем написать позднее :).

Официальный сайт Zope3 Московская группа изучения реактивного движения The Dream Bot Site noooxml