在Ubuntu下搭建Python编程环境

在Ubuntu下搭建Python编程环境,综合来说是Python2/3+virtualenv+pip+packages+IPython,也即配置多个不同的VirtualEnv,在其中为不同的Python版本用pip安装各自必要的扩展包,然后用IPython进行开发。
这篇博文主要是为了自己将来还原开发环境。

基本

可以用python -V查看当前python版本。最基本的sudo apt-get install build-essential

python2

sudo apt-get install python-dev

python3

sudo apt-get install python3-dev

pip

sudo apt-get install python-pip

其他一些全局安装了的包(Optional)

1
2
3
4
5
6
7
sudo apt-get install build-essential python-dev python-numpy python-setuptools python-scipy libatlas-dev
sudo apt-get install libpng-dev libfreetype6-dev libjpeg8-dev python-matplotlib
sudo apt-get install libxext-dev
sudo apt-get install python-qt4 qt4-dev-tools
sudo apt-get install cmake qt4-qmake qt-sdk
sudo apt-get install libhdf5-serial-dev
sudo apt-get install python-pygraphviz

虚拟环境

配置virtualenv

  • 安装virtualenv和virtualenvwrapper
    sudo pip install virtualenv virtualenvwrapper
  • 配置virtualenvwrapper
    vim ~/.bashrc
  • 在~/.bashrc中添加
1
2
3
4
if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then
export WORKON_HOME=$HOME/.virtualenvs
source /usr/local/bin/virtualenvwrapper.sh
fi
  • 运行该脚本
    source ~/.bashrc
  • 之后可以创建虚拟环境
    针对python2,mkvirtualenv python2_env
    针对python3,先查看python3安装位置which python3,再创建mkvirtualenv -p /usr/bin/python3 python3_env
  • 进入某个虚拟环境时
    workon python2_env
  • 查看该虚拟环境中特有包的版本
    pip freeze
  • 退出该虚拟环境
    deactivate
  • 删除某虚拟环境
    rmvirtualenv python2_env

自定义的python2_env环境

自选,只是我自己会用到的包。进入虚拟环境python2_env后。

1
2
3
4
5
6
7
8
9
10
11
12
13
pip install numpy
pip install scipy
pip install scikit-learn
pip install matplotlib
pip install ipython
pip install tornado
pip install pyzmq
pip install pandas
pip install PySide
pip install jupyter
pip install tables
pip install plotly
pip install geopy

自定义的python3_env环境

1
2
3
4
5
6
7
8
9
10
11
12
13
pip3 install numpy
pip3 install scipy
pip3 install scikit-learn
pip3 install matplotlib
pip3 install ipython
pip3 install tornado
pip3 install pyzmq
pip3 install pandas
pip3 install PySide
pip3 install jupyter
pip3 install tables
pip3 install plotly
pip3 install geopy

IPython用法

启动

1
2
3
ipython
jupyter qtconsole
jupyter notebook

关于notebook

Accessing help

1
2
3
4
`?`		# 打开IPython帮助
`object?` # 显示关于这个object的信息
`object??` # 关于这个object的更多信息
`*int*??` # 搜索名字与int匹配的object的信息

Shell Assignment

前面加上!,如!pwd,可用$variable{variable}读取当前环境的变量,如:

1
2
file = 'myfile.txt'
!mv $file {file.upper()}

!=后时,命令的输出结果会被分割成一个list传给左边变量。如:

1
2
3
4
5
my_files =! ls ~/
b = "backup file"
for i,file in enumerate(my_file):
raw = !echo $backup $file
!cp $file {file.split('.')[0]+'.bak'}

和系统相关的IPython的魔术命令:

命令 说明
!cmd 在系统shell中执行cmd
output=!cmd args 执行cmd,并将stdout存放在output中
%alias alias_name cmd 为系统shell命令定义别名
%bookmark 使用IPython的目录书签系统
%cd directory 将系统工作目录更改为directory
pwd 返回系统的当前工作目录
%pushd directory 将当前目录入栈,并转向目标目录
%popd 弹出栈顶目录,并转向该目录
%dirs 返回一个含有当前目录栈的列表
%dhist 打印目录访问历史
%env 以dict形式返回系统环境变量

Magics

%开始的命令,常见的如:

命令 说明
%quickref 显示IPython的快速参考
%magic 显示所有魔术命令的详细文档
%debug 从最新的异常跟踪的底部进入交互式调试器
%hist 打印命令的输入(可选输出)历史
%pdb 在异常发生后自动进入调试器
%paste 执行剪贴板中的Python代码
%cpaste 打开一个特殊提示符以便手工粘贴待执行的Python代码
%reset 删除interactive命名空间中的全部变量/名称
%page OBJECT 通过分页器打印输出OBJECT
%run scipt.py 在IPython中执行一个Python脚本文件
%prun statement 通过cProfile执行statement,并打印分析器的输出结果
%time statement 报告statement的执行时间
%timeit statement 多次执行statement以计算平均执行时间。对那些执行时间非常小的代码很有用
%who``%who_ls``whos 显示interactive命名空间中定义的变量,信息级别/冗余度可变
%xdel variable 删除variable,并尝试清楚其在IPython中的对象上的一切引用

History

___记录了最近的两个输出结果。输入的文本保存在名为_iX的变量中,其中X是输入行的行号。
%logstart可以开始记录整个控制台会话的日志,配套命令有%logoff``logon``logstatelogstop

开启matplotlib

在Shell里,显示matplotlib的图要执行ipython --pylab=qt
在QtConsole里,执行matplotlib inline
More

debug

IPython调试器增强了pdb。
错误发生后执行%debug会跳转到引发异常的那个stack frame。%pdb可以让IPython在出现异常之后自动调用调试器。在运行时使用%run -d scripy.py可以直接但不执行代码。

调试器命令:

命令 功能
h(elp) 显示命令列表
help command 显示command的文档
c(ontinue) 恢复程序的执行
q(uit) 退出调试器,不再执行任何代码
b(reak) number 在当前文件的第number行设置一个断点
b path/tofile.py:number 在指定文件的第number行设置一个断点
s(tep) 单步进入函数调用
n(ext) 执行当前行,并前进到当前级别的下一行
u§/d(own) 在函数调用栈中向上或向下移动
a(rgs) 显示当前函数的参数
debug statement 在新的(递归)调试器中调用语句statement
l(ist) statement 显示当前行,以及当前栈级别上的上下文参考代码
w(here) 打印当前位置的完整栈跟踪(包括上下文参考代码)

More

Ref:
[1] https://nextdime.wordpress.com/2014/07/03/how-to-set-up-python-development-environment-ubuntu-14-04/
[2] http://stackoverflow.com/questions/9829175/pip-install-matplotlib-error-with-virtualenv
[3] Learning scikit-learn: Machine Learning in Python
[4] http://stackoverflow.com/questions/1961997/is-it-possible-to-add-pyqt4-pyside-packages-on-a-virtualenv-sandbox
[5] http://jupyter.readthedocs.io/en/latest/install.html
[6] 利用Python进行数据分析

更多书籍