Python и виртуальное окружение

Тут постараюсь свести до кучи использование python 2 и 3, pip, virtualenv, vitrualenvwrapper и PyCharm.

Для определенности версии пакетов:

  • Ubuntu - 14.10 Utopic Unicorn
  • Python2 - 2.7.8
  • Python3 - 3.4.2
  • Django - 1.7.4
  • PyCharm - 4.0.4 (windows)

Чтобы узнать, какая версия питона стоит в системе по-умолчанию, можно воспользоваться утилитой pyversions:

$ pyversions -d
python2.7

Установка pip

В версии питона 3.4 pip уже устанавливается вместе с питоном. В другом случае, нужно установить его самостоятельно.

  • Скачиваем get-pip.py
  • Запускаем python get-pip.py. Это установит или обновит pip.

Создание виртуального окружения

Новый способ - pyvenv (только python3)

Python3 имеет встроенную утилиту для создания виртуального окружения - pyvenv.

pyvenv устанавливается вместе с python3. Вызывается командой pyvenv-3.4. Если установть пакет python3-venv (sudo apt-get install python3-venv), то можно использовать сокращенную запись: pyvenv

Внимание! пакет python3-venv появляется только в Ubuntu 14.10! В 14.04 утилита pyvenv имеет баги.

Создаем виртуальное окружние, затем активируем его:

$ pyvenv myvirt
$ source myvirt/bin/activate

Можно убедится, что pip и python работают в контейнере

(myvirt) $ which pip
/home/swasher/myvirt/bin/pip
(myvirt) $ which python
/home/swasher/myvirt/bin/python
(myvirt) $ python -V
Python 3.4.2

Все, можно начинать устанавливать джанго

(yourenv)root@test:~# pip install django

(myvirt) $ pip freeze         # check our environment is clean (no output)
(myvirt) $ pip install django django-extensions # install django dependencies
(myvirt) $ pip freeze         # see our installed dependencies
Django==1.7.4
django-extensions==1.5.0
six==1.9.0
(myvirt) $ django-admin.py startproject newproject  # create new django project
(myvirt) $ pip freeze > newproject/requirements.txt # save dependencies into project

Выйти из контейнера можно командой

(myvirt)root@test:~# deactivate
Старый способ - virtualenv (python2 и 3)

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

# for python2
$ virtualenv yourenv
# for python3
$ virtualenv -p /usr/bin/python3 yourenv 
$ source yourenv/bin/activate
$ pip install package-name

Aктивируем

$ source yourenv/bin/activate

Можно убедится, что pip и python в контейнере

(yourenv)root@test:~# which pip
/home/swasher/yourenv/bin/pip
(yourenv)root@test:~# which python
/home/swasher/yourenv/bin/python
(yourenv)root@test:~# python -V
Python 3.4.0
pyenv

TODO: Существует также утилита pyvenv с плагинами pyenv-virtualenv и pyenv-virtualenvwrapper, которая предлагает очень элегантное управление версиями питона и виртуальными окружениями. статья

Создание нового проекта

Предполагается, что у нас есть несколько django-проектов, некоторые под python2, другие под python3. Новый проект будем создавать под python3.

Создаем новое окружение, ставим джанго и стартуем новый проект. Проект у меня называется uchislova. Так как проект обернут, сам проект джанго мы назовем просто project, а приложение (app) - slova.

$ pyvenv uchislova
$ source uchislova/bin/activate
(uchislova) $ pip3 install django
(uchislova) $ cd uchislova/
(uchislova) $ django-admin startproject project
(uchislova) $ cd project/
(uchislova) $ ./manage.py startapp uchislova
(uchislova) $ ./manage.py migrate
(uchislova) $ deactivete

Так, проект мы создали, теперь посмотрим, как будет работать PyCharm с виртуальным окружением.

PyCharm

Создаем в PyCharm новый проект, интерпретатор выбираем из нашего виртуального окружения:

Далее нужно сделать следующее, я не буду подробно расписывать:

  • настроить deployment и path mapping
  • выбрать Project Interpreter, который создали чуть выше (он у нас python 3.4.0)
  • выполнить синхронизацию
  • включить поддержу django
  • настраиваем конфигурацию запуска dev-сервера из PyCharm, как на картинке:

Не забываем указать наш интерпретатор. Хост 0.0.0.0 нужен для того, чтобы сервер был доступен с любого внешнего адреса, иначе только с localhost.

Дополнение

Как установить python3-версию пакета через pip?

Взято отсюда.

На новых системах использовать только новый способ! Старый для сравнения приведен.

НОВЫЙ СПОСОБ (начиная с ubutnu 13.10)

$ sudo apt-get install python3-pip
$ sudo pip3 install MODULE_NAME

СТАРЫЙ СПОСОБ (не рекомендуется использовать):

$ sudo apt-get install curl
$ curl http://python-distribute.org/distribute_setup.py | sudo python3
$ curl https://raw.github.com/pypa/pip/master/contrib/get-pip.py | sudo python3
$ sudo pip-3.2 install MODULE_NAME

Так же можно использовать не system-wide установку, а пользовательскую, с ключем --user:

$ pip install --user SomePackage

Для некоторых пакетов нужно установка dev:

$ sudo apt-get install python3-dev

Comments !

blogroll

social