1.virtualEnv
virtualenv is a tool to create isolated Python environments.
virtualenv通過創(chuàng)建獨立Python開發(fā)環(huán)境的工具, 來解決依賴、版本以及間接權限
問題. 比如一個項目依賴Django1.3 而當前全局開發(fā)環(huán)境為Django1.7, 版本跨度過大, 導致不兼容使項目無法正在運行, 使用virtualenv可以解決這些問題.
virtualenv創(chuàng)建一個擁有自己安裝目錄的環(huán)境, 這個環(huán)境不與其他虛擬環(huán)境共享庫, 能夠方便的管理python版本和管理python庫.
- 安裝Virtualenv
使用pip安裝Virtualenv, 使用過python的都應該知道pip包管理神器吧, 即使不知道, 網站也有大把的教程, 不過推薦查看官方安裝指南
$ pip install virtualenv
//或者由于權限問題使用sudo臨時提升權限
$ sudo pip install virtualenv
- virtualenv基本使用
現在開始使用virtualenv管理python環(huán)境
-> ts$ virtualenv ENV #創(chuàng)建一個名為ENV的目錄, 并且安裝了ENV/bin/python, 創(chuàng)建了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是在當前環(huán)境是使用的python解釋器
如果在命令行中運行virtualenv --system-site-packages ENV, 會繼承/usr/lib/python2.7/site-packages下的所有庫, 最新版本virtualenv把把訪問全局site-packages作為默認行為
default behavior.
2.1. 激活virtualenv
#激活虛擬環(huán)境
-> 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生成相同的環(huán)境
2.2. 關閉virtualenv
-> ts$deactivate
2.3. 指定python版本
可以使用-p PYTHON_EXE選項在創(chuàng)建虛擬環(huán)境的時候指定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. 生成可打包環(huán)境
某些特殊需求下,可能沒有網絡, 我們期望直接打包一個ENV, 可以解壓后直接使用, 這時候可以使用virtualenv -relocatable指令將ENV修改為可更改位置的ENV
#對當前已經創(chuàng)建的虛擬環(huán)境更改為可遷移
->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(繼續(xù))
l(查找當前位于哪里)
s(進入子程序)
r(運行直到子程序結束)
!<python 命令>
h(幫助)
a(rgs) 打印當前函數的參數
j(ump) 讓程序跳轉到指定的行數
l(ist) 可以列出當前將要運行的代碼塊
n(ext) 讓程序運行下一行,如果當前語句有一個函數調用,用 n 是不會進入被調用的函數體中的
p(rint) 最有用的命令之一,打印某個變量
q(uit) 退出調試
r(eturn) 繼續(xù)執(zhí)行,直到函數體返回
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 # 繼續(xù)運行
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 # 當處于連續(xù)模式時,返回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__ # 屬性的循環(huán)可視化
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 # 啟用/禁用斷點