Лучшие практики для развертывания Python - несколько версий, стандартные места установки, инструменты упаковки и т. Д. - PullRequest
19 голосов
/ 29 августа 2011

Много постов по различным аспектам этого вопроса, но я не видел ни одного поста, в котором все это собрано.

Во-первых, субъективное утверждение: кажется, что простота, с которой мы сталкиваемся при работе с языком Pythonразлетелся на части, когда мы вышли за пределы переводчика и начали разбираться с проблемами развертывания.Как лучше иметь несколько версий Python на одной машине?Где должны быть установлены пакеты?Disutils против setuptools против pip и т. Д. Похоже, что Zen of Python подвергается жестокому обращению, когда дело доходит до развертывания.Я испытываю жуткие отголоски опыта "DLL ад" в Windows.

Согласны ли эксперты относительно некоторой степени наилучшей практики по этим вопросам?

Вы запускаете несколько версий Python на одном компьютере?Как вы остаетесь уверены, что они могут сосуществовать - и более новая версия не нарушает предположения других процессов, которые полагаются на более раннюю версию (например, скрипты, предоставляемые поставщиком ОС)?Это безопасно?Достаточно ли virtualenv?

Каковы наилучшие варианты расположения для различных компонентов среды Python (включая сторонние пакеты) в локальной файловой системе?Существует ли строгое или грубое соответствие между местоположениями для многих различных версий Unixy и ОС Windows, на которые можно положиться?

И самый мрачный угол болота - какие инструменты установки вы используете (setuptools, distutils,pip и т. д.) и хорошо ли они подходят для вашего выбора: расположение файлов, виртуальные среды Python, путь к Python и т. д.

Это звучит как сложные вопросы.Я надеюсь, что опытные Pythonistas, возможно, определили канонический подход (или два) к этим вызовам.Любой подход, который «держится вместе» как система, которую можно использовать с уверенностью (ощущая себя менее похожим на отдельные, не связанные инструменты), был бы очень полезен.

Ответы [ 3 ]

8 голосов
/ 01 сентября 2011

Я обнаружил, что virtualenv - это единственный надежный способ настройки и поддержки нескольких сред на одном компьютере. У него даже есть способ упаковки среды и установки на другом компьютере.

Для управления пакетами я всегда использую pip , так как он прекрасно работает с virtualenv . Это также упрощает установку и обновление пакетов из различных источников, таких как git-репозитории.

2 голосов
/ 26 сентября 2011

Я согласен, что это довольно широкий вопрос, но я все равно попытаюсь рассмотреть его многочисленные части.

О вашем субъективном утверждении: я не понимаю, почему простота и элегантность Python подразумевают, чтовопросы упаковки и развертывания внезапно должны стать простыми вещами.Некоторые вещи, связанные с упаковкой, просты, другие нет, другие могут быть.Для пользователей было бы лучше, если бы у нас была одна полная, надежная и простая система упаковки, но она не изменилась.Был создан distutils, а затем его разработка остановилась, был создан setuptools и добавлены новые решения и новые проблемы, из-за социальных проблем раздался дистрибутив из setuptools, и, наконец, distutils2 был создан для создания одной официальной полной библиотеки.(Подробнее о Различия между дистрибутивом, distutils, setuptools и distutils2? ) Ситуация далека от идеальной для разработчиков и пользователей, но мы работаем над ее улучшением.

Как лучше всего иметьнесколько версий Python на одной машине?Используйте менеджер пакетов, если вы работаете в современной ОС, или используйте «make altinstall», если вы компилируете из исходного кода в UNIX, или используйте аналогичную неконфликтующую схему установки, если вы компилируете из исходного кода в Windows.Как пользователь Debian, я знаю, что могу вызывать отдельные версии, используя «pythonX.Y», и что то, что версии по умолчанию («python» и «python3»), решаются разработчиками Debian.Некоторые ОС начали нарушать предположение, что python == python2, поэтому в настоящее время выполняется PEP, чтобы благословить или осудить следующее: http://www.python.org/dev/peps/pep-0394/ Похоже, в Windows отсутствует способ использовать одну версию Python по умолчанию, поэтому естьдругой PEP: http://www.python.org/dev/peps/pep-0397/

Где должны быть установлены пакеты?Используя distutils, я могу устанавливать проекты в каталог пользовательских пакетов сайта (см. PEP 370 или docs.python.org).В чем именно заключается вопрос?

Параллельная установка разных версий одного и того же проекта не поддерживается.Для обсуждения изменений в системе импорта и упаковочных инструментах потребуется PEP.Прежде чем кто-то начнет это обсуждение, использование virtualenv или buildout работает достаточно хорошо.

Я не понимаю вопроса о расположении «компонентов среды Python».

В основном я использую системные пакеты(т.е. используя менеджер пакетов Aptitude в Debian).Чтобы опробовать проекты, я клонирую их репозиторий.Если мне нужно что-то, что недоступно в Aptitude, я устанавливаю (или помещаю файл .pth в репозиторий) в свой каталог site-packages пользователя.Мне не нужен пользовательский PYTHONPATH, но я изменил расположение своих пользовательских пакетов сайтов с помощью PYTHONUSERBASE.Мне не нравится концепция магии и яиц в setuptools / distribution, поэтому я не использую их.Хотя я начал использовать virtualenv и pip для одного проекта (они используют setuptools под крышкой, но я сделал частную установку, поэтому мой глобальный Python не имеет setuptools).

0 голосов
/ 29 августа 2011

Одним из ресурсов для этой области является книга «Эксперт по программированию на Python» Тарека Зиаде.Я неоднозначно отношусь к качеству книги, но затронутые темы - это то, на чем вы сосредоточены.

...