在Ubuntu上打造方便好用的Python开发环境

Posted yue_zhong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Ubuntu上打造方便好用的Python开发环境相关的知识,希望对你有一定的参考价值。

http://blog.csdn.net/a464057216/article/details/52070922


我使用的是Ubuntu 14.04 LTS,按照我的操作步骤做完,终端Terminal的使用效果如下:

vim编辑Python文件时使用效果如下:

安装oh-my-zsh

Shell是Linux内核与用户通信的接口,种类很多,Ubuntu上默认的Shell是Bash。查看当前使用的Shell是什么:

marsloo@mars-Ideapad-V460:~$ echo $SHELL
/bin/bash

查看系统中可用的Shell有哪些:

marsloo@mars-Ideapad-V460:~$ cat /etc/shells
# /etc/shells: valid login shells
/bin/sh
/bin/dash
/bin/bash
/bin/rbash

虽然Bash很好用,但是Zsh比Bash更好用(因为Z是英文字母的最后一个,所以Zsh也叫终极Shell),只不过Zsh配置很麻烦,大家不会为一个Shell工具耗费太多经历学习配置使用它,直到有人在Github上放了oh-my-zsh项目。

安装zsh

marsloo@mars-Ideapad-V460:~$ sudo apt-get update
marsloo@mars-Ideapad-V460:~$ sudo apt-get install zsh -y
 
  • 1

安装oh-my-zsh
需要有curl或wget工具,没有的话先安装其中一个。使用curl安装oh-my-zsh:

sh -c "$(curl -fsSL https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh)"

如果使用wget:

sh -c "$(wget https://raw.githubusercontent.com/robbyrussell/oh-my-zsh/master/tools/install.sh -O -)"

安装完成后(中间会要求输入用户密码)就可以体验oh-my-zsh了:

插件及配置
oh-my-zsh支持加载插件(plugin)增加各种好用的功能,关于插件可以查看~/.oh-my-zsh/plugins目录,或者GitHub上的wiki介绍。

oh-my-zsh的配置在~/.zshrc文件中,下面是我的配置,供参考:

export ZSH=$HOME/.oh-my-zsh
ZSH_THEME="gnzh"
DISABLE_UPDATE_PROMPT=true
plugins=(git autojump sudo httpie colored-man-pages)
source $ZSH/oh-my-zsh.sh
export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8
# Aliases configuration
alias ll='ls -lrth'
alias la='ls -lrtha'
alias grep="grep --color=auto"
alias vi='vim'
alias mysql='/usr/local/mysql/bin/mysql'
alias mysqladm='/usr/local/mysql/bin/mysqladmin'
alias mysqld='/usr/local/mysql/bin/mysqld'
alias -s c=vim
alias -s txt=vim
alias -s gz='tar -xzvf'
alias -s tgz='tar -xzvf'
alias -s zip='unzip'
alias -s bz2='tar -xjvf'
alias -s jpg='imgcat'
alias -s gif='imgcat'
alias -s png='imgcat'

export PROJECT_HOME=$HOME/learnspace
export WORKON_HOME=$HOME/Envs
if [ ! -d $PROJECT_HOME ]; then
    mkdir -p $PROJECT_HOME
fi
if [ ! -d $WORKON_HOME ]; then
    mkdir -p $WORKON_HOME
fi
# Virtualenvwrapper
source /usr/local/bin/virtualenvwrapper.sh
source ~/.iterm2_shell_integration.`basename $SHELL`

export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && . "$NVM_DIR/nvm.sh"  # This loads nvm

主题我选择了流行的agnoster,你可以在这里选择自己喜欢的。插件部分除了默认的Git,还选择了autojump,后续我会写一篇博文讲它的用法。alias -s c=vim是说,直接在终端输入一个.c文件的名字,会自动用vim打开它,处理其他类型的文件也会使用对应的工具打开(比如解压压缩包)。

先备份你的.zshrc,再把上面的配置拷贝到你的~/.zshrc中,$ source ~/.zshrc就可以了。如果没有改过Ubuntu的终端字体设置的话,会显示乱码:

先不管乱码,把Zsh设置为当前用户的默认Shell:

marsloo@mars-Ideapad-V460  ~  chsh -s /bin/zsh

注销后重新登陆,打开Terminal使用的就是Zsh了。

安装Powerline

Powerline是一个Vim的状态栏插件,也可以为Zsh提供服务。
安装Powerline
我平时使用Python 2,安装Powerline依赖Python 2.6+及pip:

marsloo@mars-Ideapad-V460  ~  pip install --user powerline-status

此时Powerline已经生效了,可以看下效果:

安装Powerline字体
Powerline为了漂亮的视觉效果,使用了大量自己开发的字体,这些字体并不是系统原生的。安装这些字体也非常简单:

marsloo@mars-Ideapad-V460  ~  git clone https://github.com/powerline/fonts
marsloo@mars-Ideapad-V460  ~  cd fonts/           
 marsloo@mars-Ideapad-V460  ~/fonts   master  ./install.sh
安装完成以后,需要配置终端的字体: 


选择Ubuntu专门的Powerline字体,其他字体会因为不等宽造成问题,然后就可以看到Terminal的变化了:

如果不想让Zsh的命令提示符占据太多命令空间,推荐把Zsh的主题换成gnzh

安装solarized配色
solarized配色对眼睛比较好,安装这个配色需要dconf-cli工具,Ubuntu一般默认都有安装:

$ git clone https://github.com/Anthony25/gnome-terminal-colors-solarized.git
$ cd gnome-terminal-colors-solarized
$ ./install.sh

安装过程中,我选择的dark模式,最后效果如下:

配置Vim

Vim是Vi的升级版,本身功能已经很强大,配合各种插件使用后能让开发效率飞起来。按照我下面的步骤,可以搭建一个高效的Python开发环境。

首先打开vim查看其版本,我的是7.4.52,然后使用$ vim --version | grep +python确认vim支持python。如果vim版本过低或不支持python,请重新安装支持Python的最新vim。

插件管理器

vim也支持插件增强功能,有很多插件管理器可以帮助管理插件,我常用的是Vundle

$ git clone https://github.com/VundleVim/Vundle.vim.git ~/.vim/bundle/Vundle.vim

然后新建一个~/.vimrc的vim配置文件,将GitHub上面的示例内容拷贝进去,记得除了Vundle插件外,将其他作为示例的插件配置删掉,然后启动vim,执行:PluginInstall:

安装插件

~/.vimrc中,插件的设置都在call vundle#begin()call vundle#end()之间,先把我们需要安装的插件配置都加在里面:

" Code folding plugin
Plugin 'tmhedberg/SimpylFold'
" Color Scheme
Plugin 'tomasr/molokai'
" NerdTree: A tree explorer plugin for vim
Plugin 'scrooloose/nerdtree'
Plugin 'jistr/vim-nerdtree-tabs'
" Auto indent for Python
Plugin 'vim-scripts/indentpython.vim'
" Auto complete plugin
" Bundle 'Valloric/YouCompleteMe'
" Syntax check in Vim
Plugin 'scrooloose/syntastic'
" PEP8 standard checking for Python
Plugin 'nvie/vim-flake8'
" Powerfull status line
Plugin 'Lokaltog/powerline', 'rtp': 'powerline/bindings/vim/'

各个插件的作用可以在GitHub上找到完整的说明,我们还是先打开vim,然后使用:PluginInstall把这些插件安装上:

细心的朋友会发现我注释了一个YouCompleteMe的插件,它是一个代码自动补全的插件,几乎可以支持各种语言,也可以跳转到函数定义、声明、调用,查看帮助文档等。因为这个插件非常不好安装,所以我们自己手动安装它。虽然安装它的过程比较麻烦,但是相比与它的易用性,付出是值得的!首先需要从Github上把它clone下来:

$ git clone https://github.com/Valloric/YouCompleteMe.git

然后cd到YouCompleteMe目录clone依赖(时间会比较长):

$ cd YouCompleteMe
$ git submodule update --init --recursive
确保系统安装了cmakepython-dev(如果使用python3的话,时python3-dev),将准备好的YouCompleteMe目录移动到~/.vim/bundle/YouCompleteMe,
然后在家目录执行如下命令:
 marsloo@mars-Ideapad-V460  ~  mkdir ycm_build
 marsloo@mars-Ideapad-V460  ~  cd ycm_build
 marsloo@mars-Ideapad-V460  ~/ycm_build  cmake -G "Unix Makefiles" . ~/.vim/bundle/YouCompleteMe/third_party/ycmd/cpp
 marsloo@mars-Ideapad-V460  ~/ycm_build  cmake --build . --target ycm_core
如果编译没有问题的话,可以在.vimrc文件中取消YouCompleteMe的注释重新:PluginInstall一下。

配置vim

所有的插件安装完毕后,下一步就是配置vim,把各个插件的功能利用起来,下面说明的内容都是放在.vimrc文件的末尾。

将:sp和:vsp分割的窗口位置放在右下角

” Change position of the window of :sp & :vsp
set splitbelow
set splitright

开启代码折叠:可以折叠函数、类等的定义

” Enable folding
set foldmethod=indent
set foldlevel=99

使用空格键折叠代码:而不必使用za按两次键盘

” Enable folding with the spacebar
nnoremap za

折叠代码时,显示帮助文档

” Show docstring for folded code
let g:SimpylFold_docstring_preview=1

避免代码折叠的Bug

" Avoid Issue #27 for SimpylFold
autocmd BufWinEnter *.py setlocal foldexpr=SimpylFold(v:lnum) foldmethod=expr
autocmd BufWinLeave *.py setlocal foldexpr< foldmethod<

vim使用unix utf8编码处理文件
" Vim file formatting
set encoding=utf-8
set fileformat=unix

YCM自动补全及离开插入模式后自动关闭帮助窗口

" YCM: close the preview window after completeion automatically
let g:ycm_autoclose_preview_window_after_completion = 1
" YCM: close the preview window after leave insertion mode automatically
let g:ycm_autoclose_preview_window_after_insertion = 1

YCM配合virtualenv

 "python with virtualenv support
py << EOF
import os
import sys
if 'VIRTUAL_ENV' in os.environ:
  project_base_dir = os.environ['VIRTUAL_ENV']
  activate_this = os.path.join(project_base_dir, 'bin/activate_this.py')
  execfile(activate_this, dict(__file__=activate_this))
EOF

推荐使用virtualenvwrapper,在.zshrc最后添加如下内容:

# Other environment variables
export PROJECT_HOME=/home/marsloo/workspace
# export PROJECT_HOME=/home/marsloo/learnspace
export WORKON_HOME=/home/marsloo/Envs
if [ ! -d $PROJECT_HOME ]; then
    mkdir -p $PROJECT_HOME
fi
if [ ! -d $WORKON_HOME ]; then
    mkdir -p $WORKON_HOME
    source /usr/local/bin/virtualenvwrapper.sh
fi
YCM快捷键定义
" YCM shortcuts
map <C-n>  :YcmCompleter GoToDefinition<CR>
" map <C-?>  :YcmCompleter GoToDeclaration<CR>
map <C-m>  :YcmCompleter GoToReferences<CR>
map <C-p>  :YcmCompleter GetDoc<CR>
" invoke omni completion by pressing ctrl+/ (ctrl+/ is recognized as C-_)        
inoremap <unique> <C-_> <C-X><C-O><C-P>

Ctrl + n跳转到函数定义,然后使用Ctrl + o就能回到原来的位置。Python并没有Declaration一说,所以注释掉了。Ctrl + m可以看到所有对函数的调用。CtrlP其实是一个查找文件的vim插件,但是我没有用,所以定义了Ctrl + p是调出帮助文档。另外有些时候,可以使用Ctrl + /调用强制补全。

打开vim时,自动打开NertTreeTabs

" Start Nerdtree automatically
let g:nerdtree_tabs_open_on_console_startup=1

NertTreeTabs是最后一个串口时,不关闭NertTreeTabs

" Don't close nerdtreetabs when it is the last window
let g:nerdtree_tabs_autoclose=0

NerdTree自动忽略某些文件:如以.pyc和~结尾的文件

" Files that nerdtree will ignore
let NERDTreeIgnore = ['\\.pyc$', '\\~$']

快速显示关闭NerdTreeTabs
其实vim中,Ctrl + g是显示当前行处于整个文件的位置,因为Powerline已经有这个功能,所有把Ctrl + g的功能换掉了。

" Mapping C-g to toggle NERDTreeTabs
map <C-g> :NERDTreeTabsToggle<CR>

vim显示行号

set nu

设置一行不会超过80个字符

" Ensure one line doesn’t go beyond 80 characters
set textwidth=79

配置使用Python语法检查
" Configuration for scrooloose/syntastic plugin
set statusline+=%#warningmsg#
set statusline+=%SyntasticStatuslineFlag()
set statusline+=%*
let g:syntastic_always_populate_loc_list = 1
let g:syntastic_auto_loc_list = 1
let g:syntastic_check_on_open = 1
let g:syntastic_check_on_wq = 0

注意:需要sudo pip install flake8

vim配色自动切换
需要新增两个插件:

Plugin ‘jnurmine/Zenburn’
Plugin ‘altercation/vim-colors-solarized’

安装完成后,在.vimrc末尾增加如下判断:

if has('gui_running')
    set background=dark
    " colorscheme solarized
    " call togglebg#map("<F5>")
    colorscheme molokai
else
    colorscheme zenburn
endif

配色部分我一般用molokai,你也可以使用solarized,并且激活F5切换。


以上是关于在Ubuntu上打造方便好用的Python开发环境的主要内容,如果未能解决你的问题,请参考以下文章

写python的常用工具及设置

在 Ubuntu 中 安装python 开发环境( virtualenv 和 virtualenvwrapper)

几分钟打造超级好看又好用的zsh command line 环境

用 Python 打造你的 Eclipse

ubuntu桌面环境

ubuntu 下创建python环境