Элементарно же: написать ТЗ, выбрать фреймворк, спроектировать базу, написать функцию, написать тест... Ну или какой-нибудь ваш ответ, здесь всё равно что то тормозит, а именно окружение, именно про него все забывают. Попробую описать один из возможных вариантов для python.
Virtualenv
замечательная штука, позволяет под каждый проект создать свое окружение пакетов, при чём избавляя основное окружение дистрибутива от захламления. Это одна из самых крутых фич питона.
установка:
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
PIP
думаю и так все понятно, оставлю здесь лишь пример установка из репозитария на github:
pip install git+http://github.com/uralbash/sacrud.git
Разработка вашего приложения и github
я пишу 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 и тутже видеть изменения в ваших проектах.
Текстовый редактор
если кратко описать этот раздел, то он займет 80% этой статьи, посему мне придется лишь дать наставление использовать продвинутый едитор с множеством фич, например vim, emacs, sublime text. Плохая идея использовать gedit или ms notepad. Мой выбор определен на Vim, обязательно напишу про него отдельную заметку как использую с Python, а пока скриншот:
Vim + Python |
IDE
не нужны
Tmux
это эмулятор терминалов, он позволяет в одной вкладке терминала запустить несколько окон виртуальных терминалов.
tmux |
в первом окне у меня запущен Веб сервер(pserve или runserver), во втором редактор Vim, по необходимости я могу создать третье окно для запуска тестов или ipython или чего еще. Поехали:
для запуска tmux выполните
tmuxя обычно запускаю tmux так:
tmux attach || tmux newздесь он присоединится к существующей сессии или откроет новую. Далее запустим сервер Pyramid:
pserve development.ini.example start --reloadЭто замечательный сервер, который умеет перезагружаться если вы внесли изменения в код, но он упадет если в этих изменения есть ошибки. По этому что бы не подымать его руками запустим сервер так:
watch -n 3 pserve development.ini.example start --reloadwatch это утилита которая каждые 3 секунды пытается перезапустить pserve. Это не сильно нагружает систему зато очень удобно!
Дальше создаем второе окно, нажимаем Ctr^b+c(reate), попали в новое окно пишем 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 withm 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 окружение.
Powerline
На картинке с 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 & pgDown
Я ни когда не ищу команды, в консоле, которые уже вводил. Для этого набираю начало команды и нажимаю pgUp. Например pse+pgUp выдаст pserve development.ini start --reload
Если вы хотите также, добавьте в ~/.inputrc следующие строки:
"\e[5~": history-search-backward "\e[6~": history-search-forward
Makefile
в проекте можно создать 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
ipython notebook
notebook запускает ipython в браузере, это очень удобно если вы работаете с графикой, matplotlib например.
Установка:
sudo apt-get install ipython-notebook
ipython notebook --pylabПричем фишечка! Свои творения можно расшарить в Интернете здесь http://nbviewer.ipython.org/
jsFiddle
jsFiddle это такой сервис который позволяет нахаляву написать js код, тут же его отладить, расшарить и дать кому-нибудь ссылку. Про него все знают и многие пользуются. Но есть и для Python такой сервис, вот http://codebunk.com
Можно выбрать python, js, ruby, perl, php, lua, C, C++ разве что Лиспа нету, но все равно потрясает.
В заключение могу сказать что это только мое видение окружения, у других людей оно может отличаться. Я надеюсь что эта заметка поможет вам выбрать правильное начало.
Спасибо за статью!))
ОтветитьУдалитьза codebunk.. но к сожалению там версия 2.7(
статью по настройке vim буду ждать))
а пока пользуюсь кусочками этого конфига:
https://github.com/swaroopch/dotvim (Inspired from http://blog.sontek.net/blog/detail/turning-vim-into-a-modern-python-ide)
решение есть http://ideone.com/
Удалитьу sontek'а замечательные статьи, писал бы он чаще
Честно, так и не понял преимуществ virtualenvwrapper. Ну какая разница, выполнять . venv/bin/activate или mkvirtualenv venv ?
ОтветитьУдалитьВ virtualenv обычно создают директорию с окружением в самом проекте, что бы проще было его активировать и каждый раз обращаются к файлу. В virtualenvwrapper все в одном месте ~/.virtualenvs и утилиты типа mkvirtualenv, workon итд автоматически ищут окружения там. Т.е. мне не надо заморачиваться за пути, я могу на лету переключиться в любое окружение из любой директории. Пишу workon затем два раза таб и вижу список окружений. Ну и во врэппере есть еще много всяких команд lsvirtualenv, cdvirtualenv + ништяки типа ~/.virtualenvs/postmkvirtualenv выполняет команды в нем после каждой активации.
УдалитьПро ссылку на локальную библиотеку не очень хороший совет. Это же будет ссылка на рабочую копию. Предположим мы делаем изменения меняющие API этой библиотеки, и тут срочно должны переключится на другой проект, использующий эту либу. И.... опаньки! Ничего не работает. Нет, лучше уж все зависимости через пип, с явным указанием версий.
ОтветитьУдалитьТут конечно каждому свое, в моем случае библиотека небольшая и поправить проект под новое API обычно не проблема, зато все проекты всегда имеют одинаковое API и не надо сопровождать несколько версий. Если библиотека не позволяет быстро делать изменения, то вы абсолютно правы нужно соблюдать версии. В первом случае это небольшая библиотека, которая пишется вами, во втором это что то большое которое пилят несколько человек.
УдалитьОзадачила фраза "IDE не нужны". Скажит, вы работали в PyCharm?
ОтветитьУдалить