Простейший способ создать окружение virtualenv

    В этой статье я хочу вам рассказать про это уникальный способ создания изолированных окружений Python для удобной и комфортной разработки даже в самых дремучих условиях.

    $ python -murllib http://tiny.cc/ve-setup | python
    

    Так это выглядит, а под катом находится пара рецептов использования.

    Установка Django на абстрактный дремучий хостинг


    Допустим, что на хостинге установлен только Python, но там нет ни Django, ни Virtualenv, а так же у вас нет прав суперпользователя для того, чтобы исправить данную ситуацию. Ваша задача — создать проект на Django и убедиться, что всё работает.

    # установить
    python -murllib http://tiny.cc/ve-setup | python - --no-site-packages p
    ./p/bin/pip install django==1.2.4
    # убедиться
    . ./p/bin/activate
    django-admin.py startproject example
    python example/manage.py runserver
    

    Установка Django в дремучий wine


    Допустим, что вы обкурились манами хотите проверить работоспособность вашего проекта на Django под windows wine.

    wget http://www.python.org/ftp/python/2.6.6/python-2.6.6.msi
    # Важно: необходимо выбрать установку "For all users"
    msiexec /i python-2.6.6.msi
    wine C:/python26/python.exe -murllib http://tiny.cc/ve-setup | wine C:/python26/python.exe - w
    ./w/Scripts/pip.exe django
    ./w/Scripts/python.exe ./w/Scripts/django-admin.py startproject example
    ./w/Scripts/python.exe example/manage.py runserver
    

    Кстати, бинарные библиотеки (такие как lxml) нужно устанавливать с помощью easy_install.exe, а не pip.exe, так как последний работает только с исходниками.

    Как это работает


    Смотрите сами — это размещается на GitHub.
    • +21
    • 14,1k
    • 6
    Поделиться публикацией
    Похожие публикации
    AdBlock похитил этот баннер, но баннеры не зубы — отрастут

    Подробнее
    Реклама
    Комментарии 6
    • +3
      Есть только предложение, что на дремучем хостинге наадо быть очень аккуратным с --no-site-packages, потому что далеко не факт что вам захочется(и сможется) развлекаться со сборкой PIP или биндингов к БД.
      • –1
        согласен. в принципе, тем хуже для примера. здесь я хотел показать, что virtualenv'у, устанавливаемому таким способом, можно передавать знакомые параметры.
      • +1
        В продолжении темы.
        Если нужные зависимости прописать в файл requirements.pip, например:

        django==1.2.4
        -e hg+http://bitbucket.org/andrewgodwin/south/@stableish#egg=South-stable
        

        и добавить в начало запускающего модуля вашего проекта вот такой код:

        #!/usr/bin/env python
        try:
            from ve_setup import use_virtualenv
        except ImportError:
            import urllib
            urllib.retrive("http://tiny.cc/ve-setup", 've_setup.py')
            from ve_setup import use_virtualenv
        use_virtualenv(['--distribute', "python"], requirements="requirements.pip", activate=True)
        
        # application code
        from django.core.management import execute_manager
        ...
        

        тогда все необходимое установится автоматически при первом запуске скрипта, и сразу же станет доступным к использованию.
        • +1
          Это интересное решение, но лучше всё-же разделять деплоймент и запуск приложения :)
          • 0
            В принципе, я согласен. Но есть вырожденные ситуации, где, как мне кажется, это может быть полезно.

            Например, если ваше приложение и есть инсталлятор — где инициализация virtualenv лишь первый шаг, а дальше накладываются пачти, создаются конфиги и т.п.

            Я использую такую возможность в скрипте, запускающем тесты для проекта. Это создает единую точку входа, упрощая интеграцию с CI-сервером. А «интегрированный» деплоймент позволяет лишний раз убедиться, что все зависимости прописаны.

            У pip есть замечательная фича — он умеет создавать бандлы (bundle) для установки всех зависимостей «оффлайн». Единственная проблема — для распаковки бандла на целевом хосте должен быть установлен сам pip, желательно не самый старый. Путем такого трюка с virtualenv это ограничение достаточно легко обходится.
        • 0
          Не помешало бы словами объяснить как это работает, и главное — чем это лучше добавления в PYTHONPATH папки, куда при необходимости можно закопировать нужные модули? :)

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