1.virtualEnv
virtualenv is a tool to create isolated Python environments.
virtualenv通过创建独立Python开发环境的工具, 来解决依赖、版本以及间接权限
问题. 比如一个项目依赖Django1.3 而当前全局开发环境为Django1.7, 版本跨度过大, 导致不兼容使项目无法正在运行, 使用virtualenv可以解决这些问题.
virtualenv创建一个拥有自己安装目录的环境, 这个环境不与其他虚拟环境共享库, 能够方便的管理python版本和管理python库.
- 安装Virtualenv
使用pip安装Virtualenv, 使用过python的都应该知道pip包管理神器吧, 即使不知道, 网站也有大把的教程, 不过推荐查看官方安装指南
$ pip install virtualenv
//或者由于权限问题使用sudo临时提升权限
$ sudo pip install virtualenv
- virtualenv基本使用
现在开始使用virtualenv管理python环境
-> ts$ virtualenv ENV #创建一个名为ENV的目录, 并且安装了ENV/bin/python, 创建了lib,include,bin目录,安装了pip
New python executable in
Installing setuptools, pip...done.
-> ts$ cd ENV
-> ts$ ll
drwxr-xr-x 14 ts ts 476 12 8 08:49 bin
drwxr-xr-x 3 ts ts 102 12 8 08:49 include
drwxr-xr-x 3 ts ts 102 12 8 08:49 lib
· lib,所有安装的python库都会放在这个目录中的lib/pythonx.x/site-packages/下
· bin,bin/python是在当前环境是使用的python解释器
如果在命令行中运行virtualenv --system-site-packages ENV
, 会继承/usr/lib/python2.7/site-packages
下的所有库, 最新版本virtualenv把把访问全局site-packages作为默认行为
default behavior.
2.1. 激活virtualenv
#激活虚拟环境
-> ts$source ./bin/activate
#使用pip查看当前库
-> ts$pip list
pip (1.5.6)
setuptools (3.6)
wsgiref (0.1.2)
-> ts$pip freeze #显示所有依赖
-> ts$pip freeze > requirement.txt #生成requirement.txt文件
-> ts$pip install -r requirement.txt #根据requirement.txt生成相同的环境
2.2. 关闭virtualenv
-> ts$deactivate
2.3. 指定python版本
可以使用-p PYTHON_EXE选项在创建虚拟环境的时候指定python版本
-> ts$virtualenv -p /usr/bin/python2.7 ENV2.7
Running virtualenv with interpreter /usr/bin/python2.7
New python executable in ENV2.7/bin/python
Installing setuptools, pip...done.
-> ts$virtualenv -p /usr/bin/python3.4 ENV3.4
Running virtualenv with interpreter /usr/local/bin/python3.4
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.4'
New python executable in ENV3.4/bin/python3.4
Also creating executable in ENV3.4/bin/python
Installing setuptools, pip...done.
到此已经可以解决python版本冲突问题和python库不同版本的问题
- 其他
3.1. 生成可打包环境
某些特殊需求下,可能没有网络, 我们期望直接打包一个ENV, 可以解压后直接使用, 这时候可以使用virtualenv -relocatable指令将ENV修改为可更改位置的ENV
#对当前已经创建的虚拟环境更改为可迁移
->ts$virtualenv --relocatable ./
Making script ./bin/easy_install relative
Making script ./bin/easy_install-3.4 relative
Making script ./bin/pip relative
Making script ./bin/pip3 relative
Making script ./bin/pip3.4 relative
当前的ENV都被修改为相对路径, 可以打包当前目录, 上传到其他位置使用
参考链接:
virtualenv官方文档:http://virtualenv.readthedocs.org/en/latest
2. 命令行下调试python代码
ipdb 命令行调试
1.安装
pip install ipdb
2.使用
1. 直接用命令:python -m ipdb xxx.py
2. 程序代码内部加入以下代码:
from ipdb import set_trace
set_trace()
或者:
__import__("ipdb").set_trace()
然后 python xxx.py 这样就会拉起ipdb的调试程序
例如:
example 代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-
def main():
"""TODO: Docstring for main.
:returns: TODO
"""
print "Hello World!"
#设置断点
__import__('ipdb').set_trace()
print "example ipdb use!"
if __name__ == "__main__":
main()
然后:
python test.py
就会看到以下内容:

3.常用命令
ENTER(重复上次命令)
c(继续)
l(查找当前位于哪里)
s(进入子程序)
r(运行直到子程序结束)
!<python 命令>
h(帮助)
a(rgs) 打印当前函数的参数
j(ump) 让程序跳转到指定的行数
l(ist) 可以列出当前将要运行的代码块
n(ext) 让程序运行下一行,如果当前语句有一个函数调用,用 n 是不会进入被调用的函数体中的
p(rint) 最有用的命令之一,打印某个变量
q(uit) 退出调试
r(eturn) 继续执行,直到函数体返回
s(tep) 跟 n 相似,但是如果当前有一个函数调用,那么 s 会进入被调用的函数体中
3. pudb 界面式调试(结合vim界面显示代码)
1.安装
pip install pudb
2.使用pudb
1. pudb test.py ......
或者代码:
2. 在某一行想打断点的地方
__import__("pudb").set_trace()
然后 python xxx.py 这样就会拉起pudb的调试程序
像这样:

3.常用命令
Welcome to PuDB, the Python Urwid debugger.
-------------------------------------------
(This help screen is scrollable. Hit Page Down to see more.)
Keys: # 快捷键相关
Ctrl-p - edit preferences # 编辑配置
n - step over ("next") # 运行到下一行
s - step into # 运行进函数
c - continue # 继续运行
r/f - finish current function # 结束当前函数
t - run to cursor # 运行到光标处
e - show traceback [post-mortem or in exception state] # 显示traceback
H - move to current line (bottom of stack) # 移动到当前行(栈底)
u - move up one stack frame # 移动到栈的上一行
d - move down one stack frame # 移动到栈的下一行
o - show console/output screen # 显示命令行屏幕(回车返回pudb)
b - toggle breakpoint # 打断点/取消断点
m - open module # 打开python模块
j/k - up/down # 上/下
Ctrl-u/d - page up/down # 上一页/下一页
h/l - scroll left/right # 左滚动/右滚动
g/G - start/end # 跳转到首行/末行
L - show (file/line) location / go to line # 跳到指定行
/ - search # 查找
,/. - search next/previous # 查找下一个/上一个
V - focus variables # 聚焦在变量窗口
S - focus stack # 聚焦在栈窗口
B - focus breakpoint list # 聚焦在断点列表窗口
C - focus code # 聚焦在代码窗口
f1/?/H - show this help screen # 显示帮助窗口
q - quit # 退出
Ctrl-c - when in continue mode, break back to PuDB # 当处于连续模式时,返回pudb
Ctrl-l - redraw screen # 重绘窗口
Command line-related: # 命令行相关
! - invoke configured python command line in current environment # 进入命令行窗口
Ctrl-x - toggle inline command line focus # 切换命令行窗口和代码窗口
+/- - grow/shrink inline command line (active in command line history) # 增长/缩减命令行(命令行历史下激活)
_/= - minimize/maximize inline command line (active in command line history)# 最小化/最大化命令行(命令行历史下激活)
Ctrl-v - insert newline # 插入新行
Ctrl-n/p - browse command line history # 浏览命令行历史
Tab - yes, there is (simple) tab completion # 快速补齐
Sidebar-related (active in sidebar): # 工具栏相关(工具栏激活时有效)
+/- - grow/shrink sidebar # 扩大/缩减工具栏(指的是工具栏宽度)
_/= - minimize/maximize sidebar # 最小化/最大化工具栏
[/] - grow/shrink relative size of active sidebar box # 扩大/缩减激活工具栏相对大小(指的是窗口高度)
Keys in variables list: # 变量列表窗口的快捷键
\ - expand/collapse # 展开/收缩
t/r/s/c - show type/repr/str/custom for this variable # 切换type/repr/str/custom
h - toggle highlighting # 切换高亮
@ - toggle repetition at top # 切换顶部重复
* - cycle attribute visibility: public/_private/__dunder__ # 属性的循环可视化
m - toggle method visibility # 切换方法的可见性
w - toggle line wrapping # 切换换行
n/insert - add new watch expression # 添加新的watch表达式
enter - edit options (also to delete) # 编辑选项
Keys in stack list: # 栈列表窗口的快捷键
enter - jump to frame # 跳到某帧
Keys in breakpoints view: # 断点列表窗口的快捷键
enter - edit breakpoint # 编辑断点
d - delete breakpoint # 删除断点
e - enable/disable breakpoint # 启用/禁用断点
网友评论