python開發(fā)環(huán)境

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庫.

  1. 安裝Virtualenv
    使用pip安裝Virtualenv, 使用過python的都應該知道pip包管理神器吧, 即使不知道, 網站也有大把的教程, 不過推薦查看官方安裝指南
    $ pip install virtualenv
    //或者由于權限問題使用sudo臨時提升權限
    $ sudo pip install virtualenv
  1. 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庫不同版本的問題

  1. 其他
    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就會看到以下內容:

image.png

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的調試程序

像這樣:

image.png

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                              # 啟用/禁用斷點
最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容