Nov 22, 2013
|
С чего начать программировать?
Элементарно же: написать ТЗ, выбрать фреймворк, спроектировать базу, написать функцию, написать тест... Ну или какой-нибудь ваш ответ, здесь всё равно что то тормозит, а именно окружение, именно про него все забывают. Попробую описать один из возможных вариантов для python.
замечательная штука, позволяет под каждый проект создать свое окружение пакетов, при чём избавляя основное окружение дистрибутива от захламления. Это одна из самых крутых фич питона.
установка:
$ pip install virtualenv
В чистом виде virtualenv имеет множество команд для гибкой настройки окружения, но каждый раз делать одни и те же действия не хорошо, по этому придумали пакет virtualenvwrapper облегчающий работу с virtualenv (люди не использующие его мне кажутся странными).
установка:
$ pip install virtualenvwrapper
для того что бы в окружении консоли (вашего системного профиля) появились команды virtualenvwrapper, нужно выполнить команду:
$ source /usr/local/bin/virtualenvwrapper.sh
что бы каждый раз после перезагрузки так не делать, добавьте эту строчку в
~/.bashrc
.
создаем новое окружение:
$ mkvirtualenv test
все мы в нем, в консоле должно появится название окружения:
uralbash ⓔ test ~ Projects
Теперь все вызовы pip будут устанавливать пакеты в окружение test
.
Что бы выйти из него нужно ввести:
$ deactivate
Теперь если нужно зайти снова в окружение test
выполняем команду:
$ mkvirtualenv test
Команда такая же как и при создании, но если окружение уже существует, то оно просто откроется. Если у вас много окружений и нужно между ними переключаться, выполните команду:
$ workon test2
думаю и так все понятно, оставлю здесь лишь пример установка из репозитария на github:
$ pip install git+http://github.com/uralbash/sacrud.git
я пишу sacrud и использую его во многих моих проектах, что вызывает некоторые неудобства если его обновлять через pip:
$ pip install git+http://github.com/uralbash/sacrud.git --upgrade
Это конечно работает, но представьте постоянно обновлять 10 окружений разных проектов на своем компе, при том что новую версию sacrud прежде еще нужно выложить на github. Для решения этой проблемы есть очень простой способ. В папке с вашим проектом создаем символическую ссылку на локальное размещение sacrud:
example/$ tree
.
├── example
├── Makefile
├── MANIFEST.in
├── production.ini
├── README.md
├── sacrud -> ../sacrud
├── setup.cfg
└── setup.py
Таким образом у нас всегда всё с пылу, с жару. Можно пилить sacrud и тут же видеть изменения в ваших проектах.
Примечание
Более элегантный метод - это установить пакет через setuptools с флагом для разработки:
$ python setup.py develop
Он автоматически пропишет симлинк в окружении, что можно будет наблюдать
выполнив pip list
.
если кратко описать этот раздел, то он займет 80% этой статьи, посему мне
придется лишь дать наставление использовать продвинутый едитор с множеством
фич, например vim
, emacs
, sublime text. Плохая идея
использовать gedit
или ms notepad
. Мой выбор определен на Vim
,
обязательно напишу про него отдельную заметку как использую с Python, а
пока скриншот:
здесь видно что я могу перемещаться по файлам, видеть изменения по сравнению с предыдущим комитом, интроспекция кода, ну и все прочие ништяки.
не нужны
это эмулятор терминалов, он позволяет в одной вкладке терминала запустить несколько окон виртуальных терминалов.
Поверьте, это удобно.
в первом окне у меня запущен Веб сервер (pserve
или runserver
), во
втором редактор Vim
, по необходимости я могу создать третье окно для
запуска тестов или ipython или чего еще. Поехали:
для запуска tmux выполните:
$ tmux
я обычно запускаю tmux так:
$ tmux attach || tmux new
здесь он присоединится к существующей сессии или откроет новую. Далее запустим сервер Pyramid (waitress):
$ pserve development.ini.example start --reload
Это замечательный сервер, который умеет перезагружаться если вы внесли изменения в код, но он упадет если в этих изменения есть ошибки. По этому что бы не подымать его руками запустим сервер так:
$ watch -n 3 pserve development.ini.example start --reload
watch это утилита которая каждые 3 секунды пытается перезапустить
pserve
(waitress). Это не сильно нагружает систему зато очень
удобно!
Дальше создаем второе окно, нажимаем Ctr^b+c
(create
), попали в новое
окно пишем vim и начинаем писать. Если нужно переключиться обратно в 1
окно с сервером, нажимаем Ctr^b+n
(next
).
Если нужно закрыть окно
просто выполните exit, как если бы закрыли обычный терминал.
Допустим я не хочу создавать отдельное окно для тестов, мой экран позволяет два
окна уместить рядом
и это будет очень удобно (писать код и выполнять тесты на
одном экране, широком правда). В текущем окне с Vim, нажмите Ctr^b+"
это разделит экран по горизонтали
пополам.
увеличить окно
нажмите Ctr^b+Ctr^↑
или Ctr^b+Ctr^↓
.перемещения курсора на другой экран
Ctr^b+↑
или Ctr^b+↓
.разделения экрана по вертикали
Ctr^b+%
и стрелки вбок для изменения размеров, по аналогии.Перемещаться
также можно при помощи Ctr^b+o
, а менять окна местами
Ctr^b+O
.Ctr^b
.Гораздо веселее это все делать мышкой :) Для этого изменим конфиг:
$ cat ~/.tmux.conf
source ~/.local/lib/python2.7/site-packages/powerline/bindings/tmux/powerline.conf
set-option -g default-terminal "screen-256color"
set -g status-interval 15
# Mouse mode
set -g mode-mouse on
set -g mouse-resize-pane on
set -g mouse-select-pane on
set -g mouse-select-window on
##Toggle mouse on with m
bind m \
set -g mode-mouse on \;\
set -g mouse-resize-pane on \;\
set -g mouse-select-pane on \;\
set -g mouse-select-window on \;\
display 'Mouse: ON'
## Toggle mouse off with M
bind M \
set -g mode-mouse off \;\
set -g mouse-resize-pane off \;\
set -g mouse-select-pane off \;\
set -g mouse-select-window off \;\
display 'Mouse: OFF'
### End Mouse On/Off ### }}}
Теперь двигай мышью! В режиме мыши нельзя скопировать текст из терминала. Что
бы этого избежать повешены два хоткея для включения Ctr^b+m
и отключения
Ctr^b+M
режима мыши.
Если не впечатлило, то есть один очень хороший стимул использовать tmux:
он поддерживает сколько угодно терминалов с одинаковым virtualenv. К
примеру если я создам X вкладку gnome-terminal
и активирую там окружение
test
, то во второй X вкладке я получу вот такую ошибку:
IOError: [Errno 26] Text file busy: 'test/bin/python'
tmux это решает очень просто, перед запуском активируйте virtualenv, а затем запустите tmux. Теперь все новые окна будут иметь это же virtualenv окружение.
На картинке с Vim, в левом нижнем углу, есть красивая панелька с погодой,
часами и tmux окнами. Слева есть запись 1>watch 2>vim
, это означает
что в текущей сессии tmux в которой я нахожусь создано 2 окна, текущее
подсвечено синим цветом. Самое приятное что кликая по ним мышкой они
переключаются. Эта панель называется powerline
она очень удобная и
красивая. Powerline
можно поставить так же для bash
, zsh
,
ipython, vim. Как это сделать, подробно описано здесь
http://askubuntu.com/questions/283908/how-can-i-install-and-use-powerline-plugin
Для vim я рекомендую bling/vim-airline вместо powerline
.
Я ни когда не ищу команды, в консоле, которые уже вводил. Для этого набираю
начало команды и нажимаю pgUp
. Например pse+pgUp
выдаст pserve
development.ini start --reload
.
Если вы хотите также, то добавьте в ~/.inputrc
следующие строки:
"\e[5~": history-search-backward
"\e[6~": history-search-forward
в проекте можно создать Makefile
файл, что бы выполнять скрипты одной
командой. Пример:
$ cat ../sacrud/Makefile
all: test
setup_test:
python setup.py test
coverage:
nosetests --cover-package=sacrud --cover-erase --with-coverage --with-doctest
test:
nosetests --cover-package=sacrud --with-doctest
run:
pserve development.ini --reload
shell:
pshell development.ini
Теперь чтоб запустить тесты пишем просто make all
.
notebook
запускает ipython в браузере, это очень удобно
если вы работаете с графикой, matplotlib например.
Установка:
$ sudo apt-get install ipython-notebook
Запуск:
$ ipython notebook --pylab
Причем фишечка! Свои творения можно расшарить в Интернете здесь http://nbviewer.ipython.org/
jsFiddle это такой сервис который позволяет нахаляву написать js код, тут же
его отладить, расшарить и дать кому-нибудь ссылку. Про него все знают и многие
пользуются. Но есть и для Python такой сервис, вот http://codebunk.com
Можно выбрать python
, js
, ruby
, perl
, php
, lua
, C
,
C++
разве что Лиспа нету, но все равно потрясает.
В заключение могу сказать что это только мое видение окружения, у других людей оно может отличаться. Я надеюсь что эта заметка поможет вам выбрать правильное начало.