[轉]基於Sublime Text搭建Python IDE

風之諾發表於2016-01-17

一、先按照下面的帖子安裝安裝Package Control

Package Control 安裝方法

  1.通過快捷鍵 ctrl+` 或者 View > Show Console 開啟控制檯,然後貼上相應的 Python 安裝程式碼;

  2.Sublime Text 3 安裝程式碼並回車:

import urllib.request,os; pf = 'Package Control.sublime-package'; ipp = sublime.installed_packages_path(); urllib.request.install_opener( urllib.request.build_opener( urllib.request.ProxyHandler()) ); open(os.path.join(ipp, pf),'wb').write(urllib.request.urlopen( 'http://sublime.wbond.net/' + pf.replace(' ','%20')).read())

  3.重啟Sublime Text 3;

  4.如果在Perferences->package settings中看到package control這一項,則安裝成功。

用Package Control安裝外掛的方法:

1. 按下Ctrl+Shift+P調出命令皮膚

2. 輸入install 調出 Install Package 選項並回車,然後在列表中選中要安裝的外掛。

http://zh.lucida.me/blog/sublime-text-complete-guide/

 

二、再參照下面的帖子安裝python開發的主要外掛SublimeREPL

:用於python除錯(配置參照下面的帖子)

· 1. 問題

· 2. 安裝的外掛

· 3. 優化

· SublimeREPL新增快捷鍵

· 程式碼區和編譯區分隔顯示

1. 問題

最近在使用Sublime Text 2寫Python程式碼的時候,發現了兩個小問題:

· 程式碼中如果使用了input等函式進行互動的時候,直接使用Ctrl+B進行編譯時,執行資訊欄內無法輸入互動資訊,程式會提示報錯。

· 在Win 8.1下面,使用Ctrl+B進行編譯時,執行資訊欄內不顯示編譯資訊,一片空白(這個不知道是否屬於個例、設定錯誤還是bug之類的)

2. 安裝的外掛

SublimeREPL

針對上面的兩個問題,我找到了SublimeREPL外掛,可以用於執行和除錯一些需要互動的程式,同時在Win 7和Win 8.1下面都能正常工作。

比較棒的是這個外掛可以支援多種語言,而對於Python也支援多種執行模式,我比較常用到的是PythonPython - RUN current file 。

 

 

3. 優化

SublimeREPL新增快捷鍵

SublimeREPL安裝之後沒有快捷鍵,每次執行程式必須用滑鼠去點工具欄,有些不爽,所以需要給SublimeREPL新增快捷鍵。

這裡可以看到所有Python方法的名稱及id,根據此可以自定義使用者快捷鍵,在偏好--鍵繫結–使用者中輸入:

[
  {
"keys": [
  "f5"
],
"caption": "SublimeREPL: Python - RUN current file",
"command": "run_existing_window_command",
"args": {
  "id": "repl_python_run",
  "file": "config/Python/Main.sublime-menu"
}
  },
  {
"keys": [
  "ctrl+f5"
],
"caption": "SublimeREPL: Python - PDB current file",
"command": "run_existing_window_command",
"args":
{
    "id": "repl_python_pdb",
    "file": "config/Python/Main.sublime-menu"
}
  },


  {"keys":["ctrl+alt+f5"],
    "caption": "SublimeREPL: Python",
    "command": "run_existing_window_command", 
    "args":
    {
        "id": "repl_python",
        "file": "config/Python/Main.sublime-menu"
    }}
]

 

本文僅定義了Python - RUN current file的快捷鍵,我在這裡使用的是F5,可以根據自己的需要進行靈活的調整。

  關於設定快捷鍵的詳細資料如下:

設定快捷鍵

但是每次都要去選擇tools->sublimeREPL->python->python run current file這麼一長串肯定是很讓人頭疼的,就想著能不能設定快捷鍵來執行。因為以前使用IDLE寫python,所以就打算配成F5執行。

我們知道,Sublime Text是通過json檔案進行設定的。我們開啟preferences->Key Binding-Default就能看到原來的快捷鍵的設定,是json格式的。

開啟preferences->Key Binding-User,按照上面的格式重寫需要設定的快捷鍵的的相關屬性,就能覆蓋預設設定。 
但是設定的格式不容易看懂,可以參考非官方文件

發現可以把”command”設為”run_macro_file” ,”args”設為錄製的巨集的檔名,就可以快捷地呼叫這個巨集。但是這個嘗試失敗了,可能是因為

Note that the macro buffer will remember only the latest recorded macro. Also, macros only record commands sent to the buffer: window-level commands, such creating a new file, will be ignored.

巨集不能建立新視窗之類的。

後來折騰了好久,在網上找到相關的內容,研究出瞭解決方案

1. 

開啟C:\Users\xxx(your name)\AppData\Roaming\Sublime Text 3\Packages\SublimeREPL\config\Python,根據自己的情況調整具體路徑。AppData可能是隱藏資料夾,要先設定隱藏資料夾可見才找得到。開啟Main.sublime-menu,看到裡面也是json格式的。觀察一下就發現這對應的剛好就是tools->sublimeREPL->python->下的幾個選項。caption對應的就是顯示的名字。

開啟剛剛提到的preferences->Key Binding-User,寫入以下內容


可以看出就是呼叫了id是repl_python_run的現有的視窗命令。repl_python_run是和前面Main.sublime-menu裡的內容相對應,就是tools->sublimeREPL->python->python run current file的id

這樣,就完成了Sublime Text3類似IDLE按F5鍵在可互動環境下執行python檔案的配置

 

程式碼區和編譯區分隔顯示

選擇檢視--佈局--行:2,將Sublime分割為上下兩部分,選擇F5進行程式碼編譯,編譯資訊將會顯示在下面的編譯區域。

轉載請註明:自由的風 » 基於Sublime Text搭建Python IDE

 

三 SublimeCodeIntel :用於python自動提示

如果安裝了Anaconda,此外掛可以關閉

SublimeCodeIntel user配置
{
    "codeintel_language_settings": 
    {
         "Python": {
                   "python":"D:/Python27/python.exe",
                   "pythonExtraPaths":
                   [
                    "D:/Python27",
                    "D:/Python27/DLLs",
                    "D:/Python27/Lib",
                    "D:/Python27/Lib/lib-tk",
                    "D:/Python27/Lib/site-packages"
                    ]
                }
    }

}

如何用sublimelinter和sublimecodeintel外掛對numpy進行語法檢查和程式碼提示?可以參照http://www.zhihu.com/question/28833130

 

 、anaconda 用於格式化及格式檢查,文件說明

Anaconda

Anaconda 是一個終極 Python 外掛。它為 ST3 增添了多項 IDE 類似的功能,例如:

· Autocompletion 自動完成,該選項預設開啟,同時提供多種配置選項

· Code linting 使用支援 pep8 標準的 PyLint 或者 PyFlakes。因為我個人使用的是另外的 linting 工具,所以我會在 Anaconda 的配置檔案 Anaconda.sublime-settings 中將 linting 完全禁用。操作如下: Sublime > Preferences > Package Settings > Anaconda > Settings – User: {"anaconda_linting": false}

· McCabe code complexity checker 讓你可以在特定的檔案中使用 McCabe complexity checker. 如果你對軟體複雜度檢查工具不太熟悉的話,請務必先瀏覽上邊的連結。

· Goto Definitions 能夠在你的整個工程中查詢並且顯示任意一個變數,函式,或者類的定義。

· Find Usage 能夠快速的查詢某個變數,函式或者類在某個特定檔案中的什麼地方被使用了。

· Show Documentation: 能夠顯示一個函式或者類的說明性字串(當然,是在定義了字串的情況下)

你可以在這裡,或者通過 ST3 的 Package Settings: Sublime Text > Preferences > Package Settings > Anaconda > README 來檢視所有這些特性。

http://python.jobbole.com/81312/

 用PDB庫除錯Python程式

按照 SublimeREPL中快捷鍵的配置,sublime設定快捷鍵F5為執行,Ctrl+F5除錯

然後就出現如下的pdb除錯介面。

 

然後你就可以輸出各種pdb命令進行除錯了。比如:

(Pdb) b 31              #在31行建立斷點

Breakpoint 1 at c:\work\code\workspace\test\sqlalchemy\docopt.py:31

(Pdb) r                    #執行到斷點處
> c:\work\code\workspace\test\sqlalchemy\docopt.py(31)<module>()
-> m=MyClass()

(Pdb)                       #在這個命令列下就可以執行當前上下文的python



具體命令用pdb除錯有多種方式可選:

1. 命令列啟動目標程式,加上-m引數,這樣呼叫myscript.py的話斷點就是程式的執行第一行之前
python -m pdb myscript.py

2. 在Python互動環境中啟用除錯
>>> import pdb
>>> import mymodule
>>> pdb.run(‘mymodule.test()’)

3. 比較常用的,就是在程式中間插入一段程式,相對於在一般IDE裡面打上斷點然後啟動debug,不過這種方式是hardcode的

if __name__ == "__main__":
a = 1
import pdb
pdb.set_trace()
b = 2
c = a + b
print (c)
然後正常執行指令碼,到了pdb.set_trace()那就會定下來,就可以看到除錯的提示符(Pdb)了

常用的除錯命令

h(elp),會列印當前版本Pdb可用的命令,如果要查詢某個命令,可以輸入 h [command],例如:“h l” — 檢視list命令 
l(ist),可以列出當前將要執行的程式碼塊 
(Pdb) l
497 pdb.set_trace()
498 base_data = {}
499 new_data = {}
500 try:
501 execfile(base_file_name,{},base_data)
502 -> execfile(new_file_name,{},new_data)
503 except:
504 logger.writeLog(“error! load result log error!”)
505 print “load cmp logs error!”
506 raise Exception, “load cmp logs error!”
507 

b(reak), 設定斷點,例如 “b 77″,就是在當前指令碼的77行打上斷點,還能輸入函式名作為引數,斷點就打到具體的函式入口,如果只敲b,會顯示現有的全部斷點 
(Pdb) b 504
Breakpoint 4 at /home/jchen/regression/regressionLogCMP.py:504

condition bpnumber [condition],設定條件斷點,下面語句就是對第4個斷點加上條件“a==3” 
(Pdb) condition 4 a==3
(Pdb) b
Num Type Disp Enb Where
4 breakpoint keep yes at /home/jchen/regression/regressionLogCMP.py:504
stop only if a==3

cl(ear),如果後面帶有引數,就是清除指定的斷點(我在Python2.4上從來沒成功過!!!);如果不帶引數就是清除所有的斷點 
(Pdb) cl
Clear all breaks? y

disable/enable,禁用/啟用斷點 
(Pdb) disable 3
(Pdb) b
Num Type Disp Enb Where
3 breakpoint keep no at /home/jchen/regression/regressionLogCMP.py:505

n(ext),讓程式執行下一行,如果當前語句有一個函式呼叫,用n是不會進入被呼叫的函式體中的 

s(tep),跟n相似,但是如果當前有一個函式呼叫,那麼s會進入被呼叫的函式體中 
c(ont(inue)),讓程式正常執行,直到遇到斷點 
j(ump),讓程式跳轉到指定的行數 
(Pdb) j 497
> /home/jchen/regression/regressionLogCMP.py(497)compareLog()
-> pdb.set_trace()

a(rgs),列印當前函式的引數 
(Pdb) a
_logger =
_base = ./base/MRM-8137.log
_new = ./new/MRM-8137.log
_caseid = 5550001
_toStepNum = 10
_cmpMap = {‘_bcmpbinarylog’: ‘True’, ‘_bcmpLog’: ‘True’, ‘_bcmpresp’: ‘True’}

p,最有用的命令之一,列印某個變數 
(Pdb) p _new
u’./new/MRM-8137.log’

!,感嘆號後面跟著語句,可以直接改變某個變數 
q(uit),退出除錯 
發現在命令列下除錯程式也是一件挺有意思的事情,記錄下來分享一下

w ,Print a stack trace, with the most recent frame at the bottom.An arrow indicates the "current frame", which determines the context of most commands. 'bt' is an alias for this command.

d ,Move the current frame one level down in the stack trace
(to a newer frame).

u ,Move the current frame one level up in the stack trace
(to an older frame).

使用 u 和 d 命令,我們可以在棧幀之間切換,用以獲取其相關上下文變數資訊。w可以顯示最近的一些棧幀資訊。

/////////////////////////////////

http://my.oschina.net/lionets/blog/269174

 如何去除Anocanda語法錯誤檢查提示框:

1)修改

     /*
        If 'outline' (default) anaconda will outline error lines
        If 'fill' anaconda will fill the lines
        If 'none' anaconda will not draw anything on error lines
    */
    "anaconda_linter_mark_style": "none",

2)修改

    // Set this to false to turn pep8 checking off completely
    "pep8": false,


相關文章