1. 程式人生 > >配置便捷的開發環境(PyCharm & Jupyter)

配置便捷的開發環境(PyCharm & Jupyter)

由於在PyCharm中進行統計整理資料、畫圖等操作有諸多的不便。在本地的jupyter notebook進行處理又顯得步驟繁瑣(傳輸檔案),故萌生在伺服器搭建jupyter notebook的想法。兩種工具優勢互補,從而最大程度上集中注意力在專案本身,提升開發效率。

原文釋出於個人部落格(好望角),並在部落格持續修改更新,此處可能更新不及時。

“工欲善其事,必先利其器”,接下來看看如何用PyCharm和Jupyter配置最便捷的python開發環境。

PyCharm

image

一開啟軟體介面,滿滿的科幻感迎面撲來。用色塊構建的魔幻畫面好似一張變形金剛的面龐。最新的版本加入了預設的Vim編輯模式,讓強大的PyCharm更如猛虎添翼一般。

基礎配置

開啟設定介面的快捷鍵是Ctrl+Alt+S

  • 背景色:軟體預設的背景是白色的,這顯然不符合我們廣大程式設計師的審美。File -> Appearance &Behaior -> Appearance 中可以修改, Darcula 是常用的黑色主題。

  • 字型:不出意外的話,你會認為它的字型有些小。File -> Editor -> Font 中可以放大,console中的程式碼和編輯區的程式碼設定方式類似。

  • 主題:如果對預設主題的配色不滿意,可以在 File -> Editor -> Color Scheme 中修改。

  • 程式碼風格:在 File -> Editor -> Code Style

    中,可以對不同型別的程式碼檔案可以分別進行個性化設定。

程式碼模板

懶人改變世界,而程式設計師往往都很懶。。。能讓計算機手工完成的內容絕對不會自己動手重複新增。

不難發現,在程式開發過程中,有一些程式碼基本沒有變化,而且我們會經常性的重複使用。那麼,這種傻傻很麻煩的事情最適合計算機來自動完成了。顯然,開發PyCharm的程式設計師小哥想到了這一使用者痛點。

File -> Editor -> File and Code Templates 中,我們可以將常用的檔案型別中的一些常用程式碼寫入該型別檔案的預設模板中,例如。

# -*- coding: utf-8 -*-

除此之外,還可以在檔案開頭新增一些註釋資訊。如下所示:

image

版本控制

一個好的開發環境不可能沒有版本控制系統。

PyCharm內建了CVS、Git、Mercurial、Subversion等多種版本控制工具,我們只需要簡單的配置即可使用。

從github上Clone 程式碼,上傳儲存,進行版本控制,多人協同開發,統統可以在軟體內輕鬆地完成。

遠端除錯

這是一個超級良心的免費功能,我相信即使這個功能收費,也會有很多程式設計師小哥繼續使用PyCharm。在其他的地方寫程式碼,我們都需要在本地除錯好,再上傳伺服器。出問題後,再次修改,再次上傳,非常浪費時間。那麼如何簡化原生代碼和伺服器程式碼之間的溝通工作呢?PyCharm也幫我們內建好了。

Tools -> Deployment -> Configurtion中可以配置好多臺伺服器,如果伺服器中的python環境配置良好,我們就不需要再單獨在本地配置一遍。配置如下所示:

image

在對應的位置填寫好伺服器的位置,自己的使用者名稱和密碼,以及想要開啟的根目錄(節省重複開啟資料夾的時間)。

第二個選項卡Mappings中配置本地專案和伺服器專案對應的對映關係。這裡有個需要注意的地方,建議只將程式碼和訓練語料分開儲存,不要使訓練語料成為對映專案的一部分,加快載入速度。在第一次配置好開發環境的時候,需要將伺服器的一些檔案下載到本地,需要稍等幾分鐘,以後就很幸福了!

Tools -> Deployment -> Configurtion中選擇本地檔案的上傳方式,我這裡將Ctrl+S設定為本地儲存並上傳伺服器。

Jupyter-notebook

對於jupyter notebook來說,它的缺點還是十分明顯的。沒有一個很好的框架,不能清晰的構建大型專案。也不曾擁有IDECtrl+點選函式名就可以跳轉的方便功能,導致閱讀程式碼吃力。

但同樣的,它的對於PyCharm的優點也是無可替代的。

  • PyCharm簡直是一個科學計算的神奇,在做資料探勘的時候,程式碼和報告(支援latex公式)高度融合,無需二次撰寫。

  • 在處理資料的時候,所有中間結果不會被擦除,都顯示在對應的cell下面。方便除錯,減輕記憶的工作量。

  • 方便的圖表展示,不像PyCharm那樣,會新彈出一個視窗展示圖片,圖文融合在一起。

  • 等等……

雖然優點眾多,但如果只能在本地執行也只能算是雞肋。經常將工程中的部分檔案從伺服器傳輸到本地再分析,這是一件很累人的事情。

伺服器jupyter搭建

  • 首先保證我們的linux伺服器的python(Anaconda)環境已經配置好了。

  • 開啟Ipython,輸入如下兩行程式碼後,會生成一個字串,例如”sha1:9305015210b4:32cad364c85e7f7a13b9efa137cfadf633cc62d“。請複製出來暫時儲存,稍後會使用。

from notebook.auth import passwd
passwd()
  • 如果~/.jupyter路徑下沒有 jupyter_notebook_config.py ,則輸入如下命令新建它。
jupyter notebook --generate-config
  • 新產生的檔案中的所有內容都以註釋的形式存在,直接在檔案末尾加入如下幾行程式碼,並根據自己的環境調整路徑。
c.NotebookApp.ip = '*'  # 允許訪問此伺服器的 IP,星號表示任意 IP
c.NotebookApp.password = u'sha1:xxx:xxx' # 之前生成的密碼 hash 字串
c.NotebookApp.open_browser = False # 執行時不開啟本機瀏覽器
c.NotebookApp.port = 12035 # 使用的埠
c.NotebookApp.enable_mathjax = True # 啟用 MathJax
  • 由於大家公用的伺服器,我並沒有管理員許可權,不能將jupyter notebook新增為系統級別的服務。我們只需執行如下命令就可以方便的在本地呼叫jupyter notebook了(伺服器不會經常重啟)。
nohup jupyter notebook > notebook.file 2>&1 &

呼叫方式:在本地瀏覽器中輸入伺服器地址:設定的埠號即可。例如:165.32.65.109:7060

Jupyter 優化

  • 更換主題

    • 對於程式設計師來說,Jupyter預設的白色背景不是很友好,為了和黑色的Pycharm更加搭配,可以先執行如下命令安裝其他主題 pip install jupyterthemes --user
    • 安裝好之後的操作很簡單,如下例所示。
    # list available themes
    # onedork | grade3 | oceans16 | chesterish | monokai | solarizedl | solarizedd
    # 列出所有可用的主題
    jt -l
    
    # select theme...
    # jt -t 主題名
    jt -t chesterish
    
    # restore default theme
    # NOTE: Need to delete browser cache after running jt -r
    # If this doesn't work, try starting a new notebook session.
    # 恢復預設主題
    jt -r
    
  • 自動程式碼補全

    • 雖然Jupyter也可以程式碼補全,但是總是需要多此一舉的按一個Tab鍵,與PyCharm風格不搭配。

    • 方法一:執行ipython profile create 命令, vim ~/.ipython/profile_default/ipython_config.py,修改成如下樣子。重啟jupyter後生效

      ## Activate greedy completion PENDING DEPRECTION. this is now mostly taken care
      #  of with Jedi.
      #
      #  This will enable completion on elements of lists, results of function calls,
      #  etc., but can be unsafe because the code is actually evaluated on TAB.
      c.Completer.greedy = True
      
      ## Experimental: restrict time (in milliseconds) during which Jedi can compute
      #  types. Set to 0 to stop computing types. Non-zero value lower than 100ms may
      #  hurt performance by preventing jedi to build its cache.
      c.Completer.jedi_compute_type_timeout = 400
      
      ## Experimental: Use Jedi to generate autocompletions. Off by default.
      c.Completer.use_jedi = True
      
    • 方法二:安裝如下外掛,如果報錯,還需要更新配置一些包環境:

pip install jupyter_contrib_nbextensions --user
pip install jupyter_nbextensions_configurator --user
pip install --upgrade ipykernel --user
chmod 777 ~/.local/share/jupyter/
pip install --upgrade --user nbconvert
pip install --upgrade jupyter_core jupyter_client --user

總結

至此,PyCharm 和 Jupyter 都已經配置完畢。今後PyCharm仍然是主力的程式碼編輯工具。但在工程構建過程中,免不了許多中間結果需要分析和檢視,這個時候Jupyter就可以派上用場。進行輕量的模組化分析任務。另外,Jupyter也可以開啟文字檔案進行編輯(可以自由選擇Vim/Sublime等編輯模式),這樣就不用使用WinSCP來單獨檢視檔案;Jupyter也可以開啟Terminal,這樣我們就不用再單獨使用Xshell,Xming等軟體。釋放本地記憶體,

我們只需要開啟瀏覽器和PyCharm就可以方便互動伺服器,進行程式碼的版本控制,以及進行資料分析。接下來可以更加愉快的幹活了!