easy_install / pip или apt-get


30

Как отмечалось на вики-странице Ubuntu на Rails, рекомендуется, чтобы gems управлял вашими зависимостями Rails / Ruby.

Какова лучшая практика с пакетами Python, такими как Django? Должен ли я установить их через apt-get или я должен позволить easy_install / pip получить их из PyPi?

Ответы:


29

Есть несколько аргументов:

  1. Используйте репозитории / PPA, потому что они будут поддерживать стабильность и актуальность исправлений безопасности.

    Это в основном правда. Если, например, вы устанавливаете, python-djangoкак у меня, вы получаете обновления безопасности. Это хорошо, потому что вам нужно только придерживаться apt, но вы все равно должны проверять что-то перед тем, как загружать обновления (хотя тестирование должно выполняться каждый раз).

    Вы можете утверждать, что если вы используете pip, вы никогда не сможете проверить наличие обновлений.

  2. Используйте, pipчтобы вы могли использовать правильные "стабильные" версии.

    В этом нет никаких сомнений: репозитории отстают от реального мира. Django - это 2.0, но в репозиториях для LTS-версии Ubuntu (которую придерживаются многие люди для серверов) вы получаете только 1.8 на Ubuntu 16.4 lts с Python 2, но все равно получаете обновления безопасности для него.

    pipдает вам последние все время. Вы просто должны обновить их самостоятельно.

  3. Обновление установленной на Python установки Python может быть кошмаром

    Когда вы обновляете Ubuntu до следующей версии, он обновляет множество пакетов. Многое меняется. Я знаю, что в Django это означает, что вы должны следить за несовместимостью кода, устареванием ... Но то же самое относится ко всему другому коду Python.

    То же самое верно, pipно с pipвами можно сделать одну вещь за один раз. Вы знаете, что вызывает проблемы, поэтому вы знаете, где искать, чтобы найти решение.

  4. pip+ virtualenvпозволяет хранить вещи отдельно

    virtualenvпозволяет иметь переносимые маленькие среды Python. Это позволяет вам иметь несколько разных сред Python, работающих рядом на одном компьютере.

    Кажется очевидным благом для обслуживания, так как вы можете управлять средой так же, как вы управляете кодом. Даже хранить среду в VCS тоже ... но вы должны помнить, что наличие двенадцати различных virtualenvсред означает двенадцать сред, которые необходимо проверить и обновить.


Редактировать: После ужасной серии обновлений на сервере, чтобы перевести его с Lucid на Precise, я переключился со смешанного Apt + pip (nr 1 и 2) на чистый pip + virtualenv (nr. 4). Вместо одного virtualenv на сайт, у меня есть один общий для нескольких сайтов. Это работает на данный момент.

Мне также пришлось написать небольшой скрипт, который проверяет состояние пакетов, установленных с помощью pip. Если есть обновления, я должен применить их вручную (это хорошо, потому что я тестирую их локально, в локальном virtualenv). Это все еще немного болезненнее, чем было изначально, но намного лучше в долгосрочной перспективе.


10
  • Пакеты из репозиториев

    Они должны быть установлены, когда ваше приложение каким-то образом относится к Ubuntu . Они гарантируют вам стабильную версию, которую вы можете установить на компьютеры с Ubuntu, они поддерживаются и иногда более зрелы, чем та, которую вы получаете через pip. Если вы развертываете несколько серверов Ubuntu или пишете приложения для Ubuntu, используйте их, если они доступны .

    Они также иногда содержат специфичные для Ubuntu модификации.

  • pip vs easy_install

    Нет ничего, чтобы сказать о них, как сказал хакер Django Джеймс Беннетт:

    Пожалуйста, ради любви к Гвидо, прекратите использовать setuptools и easy_install, и используйте вместо этого distutils и pip.

    Подробное обсуждение различий см. В разделах «Об упаковке» Джеймса Беннетта (из django) и «Несколько исправлений в« Об упаковке » » Яна Бикинга (из mozilla).

Если вы хотите быть в безопасности, попробуйте свои пип-приложения, используя virtualenv . Это дает вам изолированную среду Python, поэтому вы можете быть уверены, что ваше приложение будет работать на любом компьютере.

Подождите немного, хотя, я надеюсь, что некоторые люди не согласятся со мной.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.