На ресурсах, посвященных Python или Django можно часто встретить упоминания неких виртуальных окружений и программы virtualenv. Информация на официальном сайте дает понять, что это кое-что полезное. И не зря его всячески рекомендуют к использованию.

Совсем недавно я переустановил систему и еще не успел поставитьDjango и пр. инструменты. Поэтому, самое время организовать всю дальнейшую работу на основе виртуальных окружений. В статье пойдет речь о том, что такоеvirtualenv, зачем он нужен, как его установить и использовать. Черновая редакция.

Как установить virtualenv или «курица vs яйцо»

На официальном сайте virtualenv в разделе «Installation» рекомендуется устанавливатьvirtualenv через менеджер Python-пакетов pip (командой «pip install virtualenv»). Однако далеко не всегда pip установлен в системе по-умолчанию. Я не стал исключением: команду pipсистема не понимает. Идем на официальный сайт и видим, что pip рекомендуется использовать в пределах виртуального окружения virtualenv. При установке virtualenv, pipустанавливается автоматически. Выходит, официальные сайты обеих программ рекомендуют устанавливать virtualenv через pip, а pip — через virtualenv. Хм...

Примечание: есть, конечно, множество других способов установки того и другого (через easy_install, скачивание deb-пакетов или python-установщиков) —  все эти способы также описаны на официальных сайтах или на чьих-то блогах. Но все-таки что-то тянет меня придерживаться рекомендуемых способов от официальных разработчиков.

Если следовать концепции виртуальных окружений — логично использовать pip в пределахvirtualenv, а не глобально во всей системе. Тем более нахаляву, что и поставится он автоматически вместе с virtualenv. Значит, прежде всего нужно устанавливать virtualenv. Как?

На мой взгляд, лучшее Linux-way решение - установка из репозиториев (почему-то этот вариант не упоминается на официальном сайте virtualenv).

1. Для установки virtualenv набираем в терминале:
sudo apt-get install python-virtualenv

2. Создаем папку, внутри которой будут храниться папки будущих виртуальных окружений. Лучше всего создать такую папку в пределах своей домашней директории, чтобы не было проблем с правами доступа. Поскольку вручную копаться в ней врядли придется, сделаем ее скрытой и назовем «.virtualenvs»:
mkdir .virtualenvs

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

3. Создаем виртуальное окружение внутри папки .virtualenvs. Пусть наше первое виртуальное окружение будет называться «project_one».
cd .virtualenvs
virtualenv project_one

(Аналогично могут создаваться виртуальные окружения для каких-то других проектов).
В результате внутри папки /.virtualenvs/project_one/ создастся маленькая рабочая среда с папками bin/, include/, lib/, local/, содержащими минимальный «набор джентльмена» для работы — python, менеджеры пакетов pip и easy_install. Сюда же могут доставляться все необходимые пакеты, фреймворки (в том числе Django) и утилиты. В пределах каждого виртуального окружения они будут изолированы друг от друга, не оказывая никакого взаимного «паразитного» влияния.

Примечание: во многих руководствах по работе с виртуальными окружениями рекомендуется выполнять команду virtualenv с ключом --no-site-packages. Применение этого ключа позволяет создавать виртуальное окружение, изолированное от системной питоновской папки site-packages, что повышает степень автономности. Так вот в новых версиях virtualenv указывать этот ключ не обязательно, поскольку в них эта опция включена по-умолчанию.

4. Для активации необходимого виртуального окружения нужно зайти в его папку («cd project_one») и выполнить следующее:
source bin/activate

После активации командная строка изменится: перед именем пользователя появится название виртуального окружения в скобках «(project_one)имя_пользователя>@имя_компьютера ~».

virtualenv_scr1
Теперь любые команды по установке пакетов (например, «pip install django») или по их удалению будут выполнятся только в пределах активированного окружения.

Для выхода из виртуального окружения и перехода в обычный режим достаточно набрать:
deactivate

5. Для более удобной работы с virtualenv рекомендуется поставить утилиту под названиемvirtualenvwrapper. Это специальная надстройка над virtualenv, которая избавит от необходимости заходить в определенную папку для включения виртуального окружения и обеспечит прочие «ништяки». Поставив ее, можно будет переключаться между виртуальными окружениями одним взмахом руки одной командой, вызванной откуда угодно. Итак, устанавливаем:
sudo apt-get install virtualenvwrapper

Следуя, рекомендациям разработчиков, для настройки virtualenvwrapper на нашу папку с виртуальными окружениями, добавляем следующий текст в файл ~/.profile (чтобы эти настрйоки выполнялись при каждой загрузке компа):
export WORKON_HOME=$HOME/.virtualenvs
source /etc/bash_completion.d/virtualenvwrapper

Чтобы наши изменения настроек вступили в силу без перезагрузки, запускаем на выполнение файл .profile:
source ~/.profile

6. Теперь работа с виртуальными окружениями стала еще проще:
mkvirtualenv env_name1     — создать в папке с вирт.окружениями окружение «env_name1»
workon env_name1              - переключится в окружение «env_name1»
lsvirtualenv                           — вывести список доступных виртуальных окружений
rmvirtualenv env_name1      - удалить виртуальное окружение «env_name1»
deactivate                              - выйти из текущего виртуального окружения

PyCharm могу сказать без тени сомнения, что это — самая мощная среда разработки приложений на Python / Django. Поддерживает практически все, что может пригодится Python-программисту, а то, что не поддерживает — компенсируется огромным количеством различных плагинов для этой среды. Почитать, что она умеет, посмотреть скриншоты и видео можно на [urlspan]официальном сайте[/urlspan].

Как установить PyCharm в Ubuntu

Для работы обязательно наличие в системе виртуальной машины Java. Поэтому, первым делом займемся Java'ой.

1. Устанавливаем виртуальную машину Java (если еще не установлена).

Примечание: как проверить установлена ли Java? Достаточно набрать в консоли:

Если появляется сообщение об отсутствии пакета — значит Java не установлена. По-умолчанию Java не включена в дистрибутив Ubuntu 12.04. Поэтому если у вас свежая только-что-установленная система — то устанавливаем Java по инструкции ниже. Если не свежая или в системе присутствует старая версия Java или OpenJDK, то ее желательно удалить. Удалять пакеты можно с помощью менеджера пакетов (например, Synaptic) или командой:

     sudo apt-get purge openjdk-*

Установку Java удобнее всего проводить из стороннего репозитория. Набираем в терминале:

— добавляем репозиторий с устновщиком Java

     sudo add-apt-repository ppa:webupd8team/java

— обновляем информацию о содержимом репозиториев

     sudo apt-get update

— устанавливаем пакет-инсталлятор Java

     sudo apt-get install oracle-java8-installer

После установки oracle-java8-installer самостоятельно скачает все необходимые пакеты с серверов Oracle и произведет установку виртуальной машины Java.

2. Скачиваем последнюю версию  с [urlspan]официального сайта[/urlspan].

3. Распаковываем содержимое скачанного архива (.tar.gz) в папку /opt/.
Согласно стандарту [urlspan]FHS[/urlspan], дополнительное программное обеспечение устанавливается в папку/opt/. Будем следовать этому стандарту, поэтому содержимое архива  желательно распаковать именно в эту папку.
Как это сделать:
— переносим скачанный архив в папку /opt/.

     sudo mv pycharm-2.6.3.tar.gz /opt/

— переходим в папку /opt/.

     cd /opt/

— распаковываем архив в текущей папке.

     sudo tar -xzvf /opt/pycharm-2.6.3.tar.gz
  • Ключ -x — извлечь файлы из архива (extract)
  • Ключ -z — пропустить архив через gzip
  • Ключ -v — вывести подробный листинг обрабатываемых файлов (verbose)
  • Ключ -f -обработать указанный файл

После распаковки дополнительно можно удалить скачанный архив, дабы не занимал лишнее место:

     sudo rm pycharm-2.6.3.tar.gz

Если все прошло без ошибок, то на этом установка завершена.

Как запустить PyCharm

Для запуска  в Linux служит скрипт pycharm.sh, который находится в папке /bin/ программы. Сразу после установки программу можно запустить, находясь в папке/opt/pycharm-2.6.3/ (важно) и набрав в терминале:

     bin/pycharm.sh

Но каждый раз открывать терминал, заходить в нужную папку и набирать команду, мягко говоря, не удобно. Поэтому лучше один раз создать символическую ссылку на этот файл (своего рода ярлык, только не визуальный):

     sudo ln -s /opt/pycharm-2.6.3/bin/pycharm.sh /usr/bin/pycharm

Наличие символической ссылки в /usr/bin/ позволяет запускать нашу IDE простой командойpycharm, набранной в главном меню (Dash) по нажатию Alt+F2 (в Ubuntu 12.04).

Примечание: выполнять  в терминале не рекомендуется, поскольку в этом случае он будет зависеть от терминала, в котором больше ничего нельзя будет сделать, а закрытие терминала приведет к закрытию PyCharm.

Если такой вариант вам неудобен, то можно создать ярлык. Как создать ярлык в конкретной системе — зависит от дистрибутива Linux, в одних это сделать легче, в других — чуть сложнее.

Как создать ярлык:
Создаем файл ярлыка pycharm.desktop:

  • Ubuntu:      gedit ~/.local/share/applications/pycharm.desktop
  • Linux Mint:      gedit ~/Рабочий стол/pycharm.desktop  или  gedit ~/Desktop/pycharm.desktop - в зависимости от установленного языка

В файле пишем следующий текст и сохраняем:
[Desktop Entry]
Name=PyCharm
Comment=Среда разработки PyCharm
GenericName=PyCharm
Keywords=PyCharm;Python;Django;IDE;
Exec=/usr/bin/pycharm
Terminal=false
Type=Application
Icon=/opt/pycharm-2.6.3/bin/pycharm.png
Categories=
Path=/opt/pycharm-2.6.3/bin/

Примечание: подробное объяснение этих действий находится [urlspan]здесь[/urlspan].

Иногда созданный файл нужно сделать исполняемым (наиболее просто — поставить соответствующие галочки в свойствах файла).

Все. Если у вас Ubuntu, то теперь в главном меню (Dash) по запросу PyCharm будет выводиться созданный ярлык, который при желании можно перетянуть на главную панель. Если у вас Linux Mint, то ярлык сразу появится прямо на рабочем столе.

 

[urlspan]Введение — О контроле версий[/urlspan]

 

[urlspan]Установка GIT на Debian[/urlspan]

Настало время немного ознакомиться с использованием Git'а. Первое, что вам необходимо сделать, — установить его. Есть несколько способов сделать это; два основных — установка из исходников и установка собранного пакета для вашей платформы.

[urlspan]Установка из исходников[/urlspan]

Если есть возможность, то, как правило, лучше установить Git из исходных кодов, поскольку так вы получите самую свежую версию. Каждая новая версия Git'а обычно включает полезные улучшения пользовательского интерфейса, поэтому получение последней версии — часто лучший путь, если, конечно, вас не затрудняет установка программ из исходников. К тому же, многие дистрибутивы Linux содержат очень старые пакеты. Поэтому, если только вы не на очень свежем дистрибутиве или используете пакеты из экспериментальной ветки, установка из исходников может быть самым выигрышным решением.

Для установки Git'а вам понадобятся библиотеки, от которых он зависит: curl, zlib, openssl, expat и libiconv. Например, если в вашей системе менеджер пакетов — yum (Fedora), или apt-get (Debian, Ubuntu), можно воспользоваться следующими командами, чтобы разрешить все зависимости:

$ yum install curl-devel expat-devel gettext-devel
  openssl-devel zlib-devel
$ apt-get install libcurl4-gnutls-dev libexpat1-dev gettext
  libz-dev libssl-dev

Установив все необходимые библиотеки, можно идти дальше и скачать последнюю версию с сайта Git'а:

http://git-scm.com/download 

Теперь скомпилируйте и установите:

$ tar -zxf git-1.7.2.2.tar.gz
$ cd git-1.7.2.2
$ make prefix=/usr/local all
$ sudo make prefix=/usr/local install

После этого вы можете скачать Git с помощью самого Git'а, чтобы получить обновления:

$ git clone git://git.kernel.org/pub/scm/git/git.git

[urlspan]Установка в Linux[/urlspan]

Если вы хотите установить Git под Linux как бинарный пакет, это можно сделать, используя обычный менеджер пакетов вашего дистрибутива. Если у вас Fedora, можно воспользоваться yum'ом:

$ yum install git-core

Если же у вас дистрибутив, основанный на Debian, например, Ubuntu, попробуйте apt-get:

$ apt-get install git

[urlspan]Установка на Mac[/urlspan]

Есть два простых способа установить Git на Mac. Самый простой — использовать графический инсталлятор Git'а, который вы можете скачать со страницы на SourceForge (см. рисунок 1-7):

http://sourceforge.net/projects/git-osx-installer/

[urlspan]18333fig0107-tn[/urlspan]

Рисунок 1-7. Инсталлятор Git'а под OS X.

Другой распространённый способ установки Git'а — через MacPorts (http://www.macports.org). Если у вас установлен MacPorts, установите Git так:

$ sudo port install git-core +svn +doc +bash_completion +gitweb

Вам не обязательно устанавливать все дополнения, но, вероятно, вам понадобится +svn, если вы когда-нибудь захотите использовать Git вместе с репозиториями Subversion (см. главу 8).

[urlspan]Установка в Windows[/urlspan]

Установить Git в Windows очень просто. У проекта msysGit процедура установки — одна из самых простых. Просто скачайте exe-файл инсталлятора со страницы проекта на GitHub'е и запустите его:

http://msysgit.github.com/

После установки у вас будет как консольная версия (включающая SSH-клиент, который пригодится позднее), так и стандартная графическая.

Пожалуйста, используйте Git только из командой оболочки, входящей в состав msysGit, потому что так вы сможете запускать сложные команды, приведённые в примерах в настоящей книге. Командная оболочка Windows использует иной синтаксис, из-за чего примеры в ней могут работать некорректно.

Пакет Mailman из репозиториев Debian/Ubuntu поставляется с настройками для Apache, но не для nginx. Данная статья расскажет как вы можете использовать Mailman из репозитория Debian Squeeze/Ubuntu 11.04/11.10 c виртуальным хостом nginx. Nginx – это HTTP сервер, который использует гораздо меньше ресурсов, чем Apache и отдает страницы, особенно статические, намного быстрее.

1. Подготовка к работе

Допустим, мы хотим использовать Mailman на виртуальном хосте www.example.com/example.com с корневой директорией/var/www/www.example.com/web.

Также, у вас должна быть рабочая инсталляция LEMP (включая установленный MySQL), как описано в этих статьях:

  • Установка nginx с поддержной PHP5 и MySQL на Debian Squeeze
  • Установка nginx с поддержкой PHP5 (а также PHP-FPM) и MySQL на Ubuntu 11.04

Замечание для пользователей Ubuntu:

Раз нам надо выполнять все команды в статье от с привилегиями суперпользователя, мы можем писать в начале каждой команды sudo или стать суперпользователем просто выполнив:

1
sudo su

2. Установка Fcgiwrap

Для того, чтобы разрешить nginx обрабатывать веб-интерфейс Mailman, нам нужен установленный пакет fcgiwrap:

1
apt-getinstall fcgiwrap

После установки демон fcgiwrap скорее всего уже запущен; его сокет/var/run/fcgiwrap.socket. Если он не запущен, вы можете использовать скрипт/etc/init.d/fcgiwrap чтобы запустить его.

3. Настройка виртуального хоста

Если вы еще не настроили виртуальный хост nginx, вы можете это сделать следующим образом:

Корневой директорией моего сайта www.example.com является/var/www/www.example.com/web – если её еще нет, создайте её:

1
mkdir -p/var/www/www.example.com/web

Дальше мы создаем базовую конфигурацию виртуального хоста www.example.comв nginx.  Для этого в директории /etc/nginx/sites-available/ создаем файл www.example.com.vhost:

1
vi /etc/nginx/sites-available/www.example.com.vhost

С настройками нашего хоста:

server {
  listen 80;
  server_name www.example.com example.com;
  root /var/www/www.example.com/web;

  if ($http_host != "www.example.com") {
    rewrite ^ http://www.example.com$request_uri permanent;
  }

  index index.php index.html;

  location = /favicon.ico {
    log_not_found off;
    access_log off;
  }

  location = /robots.txt {
    allow all;
    log_not_found off;
    access_log off;
  }

  # Deny all attempts to access hidden files
  # such as .htaccess, .htpasswd, .DS_Store (Mac).
  location ~ /. {
    deny all;
    access_log off;
    log_not_found off;
  }
  location ~* .(jpg|jpeg|png|gif|css|js|ico)$ {
    expires max;
    log_not_found off;
  }
}

Чтобы разрешить этот хост, мы создадим к нему символическую ссылку из директории /etc/nginx/sites-enabled/ :

1
2
cd /etc/nginx/sites-enabled/
ln -s/etc/nginx/sites-available/www.example.com.vhost www.example.com.vhost

Перезапустите nginx, чтобы изменения вступили в силу:

1
/etc/init.d/nginx reload

4. Установка Mailman + настройка виртуального хоста Mailman

Упрощенно установка Mailman выглядит следующим образом:

1
apt-getinstall mailman

Перед запуском Mailman, должен быть создан первый список рассылки с названием mailman :

1
newlist mailman

Результат выполнения команды:

root@server1:~# newlist mailman
Enter the email of the person running the list:
<– email администратора, напр.: info@example.com
Initial mailman password:
<– пароль администратора для списка mailman
To finish creating your mailing list, you must edit your /etc/aliases (or
equivalent) file by adding the following lines, and possibly running the
`newaliases’ program:

## mailman mailing list
mailman: “|/var/lib/mailman/mail/mailman post mailman”
mailman-admin: “|/var/lib/mailman/mail/mailman admin mailman”
mailman-bounces: “|/var/lib/mailman/mail/mailman bounces mailman”
mailman-confirm: “|/var/lib/mailman/mail/mailman confirm mailman”
mailman-join: “|/var/lib/mailman/mail/mailman join mailman”
mailman-leave: “|/var/lib/mailman/mail/mailman leave mailman”
mailman-owner: “|/var/lib/mailman/mail/mailman owner mailman”
mailman-request: “|/var/lib/mailman/mail/mailman request mailman”
mailman-subscribe: “|/var/lib/mailman/mail/mailman subscribe mailman”
mailman-unsubscribe: “|/var/lib/mailman/mail/mailman unsubscribe mailman”

Hit enter to notify mailman owner… <– здесь нажмите ENTER

root@server1:~#

После этого откройте /etc/aliases :

1
vi /etc/aliases

и добавьте следующие строки:

[...]
mailman: "|/var/lib/mailman/mail/mailman post mailman"
mailman-admin: "|/var/lib/mailman/mail/mailman admin mailman"
mailman-bounces: "|/var/lib/mailman/mail/mailman bounces mailman"
mailman-confirm: "|/var/lib/mailman/mail/mailman confirm mailman"
mailman-join: "|/var/lib/mailman/mail/mailman join mailman"
mailman-leave: "|/var/lib/mailman/mail/mailman leave mailman"
mailman-owner: "|/var/lib/mailman/mail/mailman owner mailman"
mailman-request: "|/var/lib/mailman/mail/mailman request mailman"
mailman-subscribe: "|/var/lib/mailman/mail/mailman subscribe mailman"
mailman-unsubscribe: "|/var/lib/mailman/mail/mailman unsubscribe mailman"

Потом выполните команду:

1
newaliases

и перезапустите Postfix:

1
/etc/init.d/postfix restart

Далее запустите демон Mailman:

1
/etc/init.d/mailman start

Откройте /etc/nginx/sites-available/www.example.com.vhost :

1
vi /etc/nginx/sites-available/www.example.com.vhost

и добавьте следующую часть в контейнер server {} :

server {
  [...]
  location /cgi-bin/mailman {
     root /usr/lib/;
     fastcgi_split_path_info (^/cgi-bin/mailman/[^/]*)(.*)$;
     include /etc/nginx/fastcgi_params;
     fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
     fastcgi_param PATH_INFO $fastcgi_path_info;
     fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
     fastcgi_intercept_errors on;
     fastcgi_pass unix:/var/run/fcgiwrap.socket;
  }

  location /images/mailman {
     alias /usr/share/images/mailman;
  }
  location /pipermail {
     alias /var/lib/mailman/archives/public;
     autoindex on;
  }
  [...]
}

Убедитесь, что вы используете правильный сокет в строке fastcgi_pass unix. Стандартно сокет fcgiwrap расположен в /var/run/fcgiwrap.socket.

Это определяет алиас /cgi-bin/mailman/ для вашего виртуального хоста. Это означает, что вы можете получить доступ к  админ-интерфейсу Mailman для списка по адресу http://<виртуальный хост>/cgi-bin/mailman/admin/<имя списка>, и страница для пользователей списка рассылки доступна по адресуhttp://<виртуальный хост>/cgi-bin/mailman/listinfo/<имя списка>.

По адресу http://<vhost>/pipermail вы можете найти архивы списка рассылки.

Пкркзапустите nginx:

1
/etc/init.d/nginx reload

Вот и всё! Сейчас вы можете зайти на http://www.example.com/cgi-bin/mailman/admin/mailman для управления списком рассылки mailman:

 

и по адресу http://www.example.com/cgi-bin/mailman/listinfo/mailman для доступа к публичной странице списка рассылки mailman (где пользователи могут подписаться):

 

По адресу http://www.example.com/pipermail вы можете найти архив списка рассылки:

 

Кроме, того, если Ваш Sendmail идет со включенной по умолчанию опцией smrsh, ограничивающей исполнение скриптов через MTA (а в случае использования дистрибутивов, не базирующихся на Red Hat Linux это именно так), то Вам необходимо в каталоге /etc/smrsh/ создать симлинк на mailman:

cd /etc/smrsh/
ln -s /usr/local/mailman/mail/mailman mailman

Следующий шаг — создание списка периодически выполняемых задач при помощи crontab (например, оповещение администратора о запросах на включение пользователей в список рассылки):

cd /usr/local/mailman/cron
crontab -u mailman crontab.in
cd ..

Теперь запустим демона вручную, а на будущее добавим возможность автоматического старта после перезагрузки сервера. Команды для дистрибутивов, поддерживающих chkconfig следующие:

./bin/mailmanctl start
cp scripts/mailman /etc/init.d/mailman
chkconfig -add mailman