среда, 9 марта 2011 г.

python and virtualenv

В общем поведаю я тебе о них сегодня. Причины использования virtualenv могут быть разными, но для начала. Что такое virtualenv? Если вкратце, то это набор программ и библиотек для запуска питон-проектов в виртуальное окружении. Да, конечно можно сделать chroot. Но этот вариант много проще в разработке и поддержке.
Чем этот вариант понравился мне. Вот например есть у нас какая-нибудь библиотек, причем она в активной разработке. На базе этой библиотеки строится ряд программ. В процессе разработки часто ломается обратная совместимость, а так же зависимости от внешних библиотек. А программки, которые работают на этой библиотеки делаются не в один день и используют разные её версии. И вот тут подкрадывается тихий ужас (он же маленькая белая сибирская лисичка). Для того, что бы новая программа заработала, нужна свежая версия библиотеки, но если её поставить, то скорее всего рухнут все старые программы. Причем рефакторинг старого кода может быть очень дорогой задачей и заказчик просто не захочет этой процедуры (его право).
Ну и что, поставим на новый комп. А вот беда. Сайт - это то же программа. И так просто такую процедуру не сделаешь (ну в общем это просто, но только умеючи).
В общем тут нам на помощь приходит virtualenv
Установим:
apt-get install virtualenv
Создадим новое окружение:
virtualenv ve
У нас появится каталог, его структуру можно внимательно изучить.
можем запустить python:
ve/bin/python
А можем установить вкусности:
ve/bin/easy_install pip
ve/bin/pip install django django-any django-jenkins

Причем установить мы можем вполне конкретную версию всего по.

Так же, часто в процессе тестирование возникает желание потестить код в разных версиях python.
Вот как создать окружение с определенной версией python
virtualenv -p python2.5 ve

Так же, для удобства работы, можно активировать окружение
source ve/bin/activate
тогда уже можно просто говорить pip install <чего-то там>
Что бы выйти из окружения можно сказать exit, но лучше deactivate.

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

вторник, 8 марта 2011 г.

Структура файлов и каталогов.

Почему каталог, а не папка?
Подходящее определение каталога: "В общем случае, это некий список информации об объектах, составленный с целью облегчения поиска этих объектов по какому-то признаку"
А папка - картонное изделие. Определение "папка" в IT пришло от слова folder. Хотя на самом деле употребление folder - не правильно.

Ну это так - мои нервы. В общем, что нам надо запомнить, это то, что в линукс-системах всё является файлом или каталогом. В каком это смысле "всё"? Ну, в прямом. Практически любой объект в системе присутствует в виде чего-то похожего на файл и находится в каком-то каталоге.
Ну к примеру:
/home/icegreg/.bash_history # файл с историей введенных команд пользователя icegreg
/dev/mem # Дамп памяти
/proc/cpuinfo # информация о процессоре(ах)

И представлено всё это как файл. И стоит запомнить, что файл - это не только информация на жестком диске.
Структура каталогов в линукс-системах практически всегда общая и состоит из:
/ - корневой каталог
/bin - каталог с исполняемыми системным файлами (они же команды)
/boot - каталог с загрузочными конфигурациями
/dev - каталог с файлами устройств (не хранится на жестком диске)
/etc - каталог с конфигурационными файлами
/home - каталог с домашними папками пользователей
/lib - каталог с большинством библиотек (в основном системные библиотеки)
/mnt - служебный каталог для монтирования файловых устройств
/opt - каталог используется для установки программ, которые не входят в базовую поставку
/proc - каталог со служебной системной информацией (не хранится на жестком диске)
/sbin - каталог с исполняемыми файлами для администраторов.
/sys - каталог со служебной системной информацией (не хранится на жестком диске)
/srv - служебный каталог для сервисов. (но чаще информация хранится /var)
/usr - в этот каталог ставится большинство программ входящих в базовую поставку, тут же и документация и прочее.
/var - каталог для переменных данных, в общем все служебные данные как правило оказываются тут, например /var/www - каталог для веб-сайтов.
/tmp - каталог для временных файлов (не хранится на жестком диске)
Важно понять, что корень - "/". А так же, что вышеизложенная структура одна на всех. И что в общем нет тут ни диска С: ни D: и всё устройства - это блочный файл. И работать приходится всегда с файлом.
вот такая команда прочтет первый сата диск и отправит данные в никуда.
dd if=/dev/sda of=/dev/null

/dev/sda - первый сата(а может и сказя) диска
/dev/sda1 - первый раздел на первом сата диске
/dev/null - файл пустоты. Что туда не заверни, назад уже не вернешь.

Если в верхней команде переставить /dev/sda и /dev/null местами, то будет беда. Т.ч. осторожнее.

Как правило файлам стараются давать осмысленные имена.
Например:
/var/log/apache2/error.log
/var/www/index.html

И не надо давать название файлам в виде ab20cde.log. Это может быть понятно чьему-то больному воображению, но ни тебе, ни мне это понятно не будет. Это касается и временных файлов, потом сам рад не будешь если так назовешь когда отлаживать что-нибудь будешь.