在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 | sudo apt-get install build-essential python-dev python-numpy python-setuptools python-scipy libatlas-dev |
虚拟环境
配置virtualenv
- 安装virtualenv和virtualenvwrapper
sudo pip install virtualenv virtualenvwrapper
- 配置virtualenvwrapper
vim ~/.bashrc
- 在~/.bashrc中添加
1 | if [ -f /usr/local/bin/virtualenvwrapper.sh ]; then |
- 运行该脚本
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 | pip install numpy |
自定义的python3_env环境
1 | pip3 install numpy |
IPython用法
启动
1 | ipython |
Accessing help
1 | `?` # 打开IPython帮助 |
Shell Assignment
前面加上!
,如!pwd
,可用$variable
或{variable}
读取当前环境的变量,如:
1 | file = 'myfile.txt' |
!
在=
后时,命令的输出结果会被分割成一个list传给左边变量。如:
1 | my_files =! ls ~/ |
和系统相关的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``logstate
和logstop
。
开启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) | 打印当前位置的完整栈跟踪(包括上下文参考代码) |
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进行数据分析