如何開發一個 PyCharm 插件

tsxh5249 7年前發布 | 18K 次閱讀 PyCharm Python開發

PyCharm 是很多 Python 開發者優先選擇的 IDE,功能強大,跨平臺,提供免費社區版,非常良心。如果你想自己給PyCharm添加一些功能怎么辦呢?有兩個辦法:

  1. 通過提需求實現,到 JetBrains 的 github 去提issue或者自己發Pull Request請他們merge。
  2. 通過安裝插件實現,你可以查找現有的 插件倉庫 ,或者,自己寫一個。

今天我們說說怎么搭建環境自己寫一個 PyCharm 插件。

前期準備

先普及一下知識,開發 PyCharm 插件和開發 IntellJ IDEA 插件需要的環境是一樣的,因為 PyCharm 本身就是 IDEA 的一個子集,說白了就是 IDEA 上套了一個 Python 語言支持的插件。其他系列的 IDEA IDE 其實也是一樣的道理,都是套了對應語言支持的框架外加一點外觀修改,就成了新的產品,比如 WebStrom,PhpStorm,RubyMine。到這里你應該有個印象,JetBrains 這個公司太能玩了,就一個 IDEA 能整出那么多產品來,很厲害吧?

開發 PyCharm 插件你需要:

  • 對 Java 語言有一定了解,因為你只能用 Java 開發插件
  • 安裝最新版的 IntelliJ IDEA
  • 安裝 PyCharm Community Edition 到本地
  • 確保 IntelliJ 安裝并啟用了 Plugin DevKit 插件,默認自帶
  • 配置 IntelliJ Platform SDK, 下文會涉及相關步驟
  • (非必需)將 IntellJ IDEA Community Edition 的代碼克隆到本地,方便調試

如果你英文還可以,也可以閱讀官方的幫助文檔。

新建插件工程

從文件菜單選擇 New Project , 選擇 IntelliJ Platform Plugin ,如果你沒有配置 SDK ,點擊 New 菜單。

選擇你本地 PyCharm Community Edition(社區版)的安裝路徑作為SDK目錄,Java SDK 選擇 1.8 以上的版本。

請注意,你也可以使用 PyCharm Professional (旗艦版) 的安裝路徑作為SDK目錄,不過當你調試插件碰到核心代碼時,社區版你可以一步一步跟到最里面,但旗艦版不行,因為旗艦版并不是開源的,你拿不到源代碼。

回到 New Project 的界面,點擊 Next ,輸入 Project nameProject location ,點擊完成。

小貼士:如果你是打開別人的寫的插件,那么你直接選擇打開工程目錄是沒有用的,因為 IntelliJ IDEA 不認為這是個插件工程,所以你沒法運行和調試這個插件,一個不怎么優雅的辦法就是 從現有代碼新建一個插件工程 ,StackOverflow 關于這個的吐槽問題你搜到,如果你有更好的辦法請告訴我。當你換一臺機器把插件代碼克隆下來之后應該就知道我在說什么了。

插件工程目錄結構

一個典型的插件目錄結構就像下圖。

  • .idea 目錄 – JetBrains IDE 生成的工程都會有這么一個目錄,存放用戶配置和緩存,無需關心。
  • doc 目錄 – 插件的文檔,可選。
  • out 目錄 – 編譯后的代碼字節,無需關心。
  • resources 目錄 – 資源存放目錄,插件的配置文件在此。
  • src 目錄 – 代碼存放的位置。
  • *.iml 文件 – 項目的配置文件。

修改插件信息

打開 /resources/META-INF/plugin.xml , 更新插件信息,舉例說明。

<idea-pluginversion="2">
    <id>com.eflabs.plugin.efcommon</id>
    <name>EFCommonfor PyCharm</name>
    <version>3.1</version>
    <vendoremail="toby.qin@live.com">TobyQin</vendor>
    <description><![CDATA[
      <b>Ableto runand debugefcommontestseasily.</b><br>
      <br>
      <ul>
      <li>Supportrun/debugef-commontestsviacontextmenu.</li>
      <li>Showrunbuttonin thelineoftestcase.</li>
      </ul>]]>
    </description>
    <change-notes><![CDATA[
      <b>v3.0</b><br>
      <p>SupportPyCharm 171.*</p>
      <p>Supportnestedef-commonproject.</p>
      <br>
 
      <b>Earlyversion</b><br>
      <p>Bugfix: failedto getrun.templatein resource.</p>
      <p>Thebabyversion.</p>
      <br>]]>
    </change-notes>
    <!-- pleaseseehttp://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
    <idea-versionsince-build="171.1"/>
    <!-- pleaseseehttp://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
        onhowto targetdifferentproducts -->
    <depends>com.intellij.modules.python</depends>
    <extensionsdefaultExtensionNs="com.intellij">
        <!-- Addyourextensionshere -->
        <configurationTypeimplementation="com.eflabs.efcommon.runConfiguration.EfCommonConfigurationType"
                          order="FIRST"/>
        <runConfigurationProducerimplementation="com.eflabs.efcommon.runConfiguration.EfCommonConfigurationProducer"
                                  order="FIRST"/>
        <runLineMarkerContributor
                implementationClass="com.eflabs.efcommon.runLineMarker.EfCommonRunLineMarkerContributor"
                language="Python"/>
    </extensions>
 
    <actions>
        <!-- Addyouractionshere -->
    </actions>
 
</idea-plugin>

這個配置文件里有幾點要注意的:

  1. <id> 和 <version> 用于聲明你的插件唯一標識,同id和version的插件不能夠重復上傳。
  2. <depends> 節點聲明了此插件的依賴條件,如果是PyCharm 適用的,那么就寫 com.intellij.modules.python
  3. <extenstions 節點用于聲明你要擴展的類,只要繼承和實現對應的接口就可以了。
  4. <actions> 節點用于注冊你要實現的 Action,比如你先寫一些 Action,然后 注冊到某個菜單 。

實現具體的業務代碼

這里我略過最核心的部分,因為每個人的需求和代碼能力都不一樣,這應該去查閱Java編程規范。

簡而言之,就是根據你自己的需求用Java實現一些接口和方法。

運行和調試你的插件

如果你的代碼已經實現了,那么運行和調試就比較簡單。

  • 使用 Run | Run 菜單來運行你的插件,這時候會啟動一個新的PyCharm,默認安裝好你的插件。
  • 使用 Run | Debug 菜單來調試你的插件,你可以設置斷點進行調試。

發布你的插件

你可以選擇本地發布你的插件,也可以選擇上傳到 JetBrains 的插件倉庫。

本地發布安裝

如果你的插件是內部小范圍使用,并且可能帶有敏感信息,那么這樣的方式會比較適合你。從主菜單選擇 Build > Prepare plugin ‘my_plugin’ For Deployment

如果成功那么在工程目錄就會生成一個同名的 jar 文件。

將這個文件 copy 到目標機器就可以通過 Install Plugin from disk … 完成安裝。

發布插件到 JetBrains Plugin 倉庫

生成插件的步驟和本地發布是一樣的,唯一不同的就是你需要到 JetBrains Plugins 網站去注冊一個賬號。

登錄之后選擇 UPLOAD PLUGIN 菜單,上傳之后大概需要2個工作日審核。

審核通過后其他用戶就可以直接從 Browse Repositories… 里搜索到你的插件并安裝。通過插件倉庫安裝的插件,一旦有新版本發布,用戶將收到更新提示。

寫在最后

關于如何實現具體的插件業務代碼,一個偷懶的辦法就是去看現有功能大概是怎么實現的,你既然可以拿到 PyCharm Community Edition 的所有代碼,還有啥看不到的,看懂只是時間問題。再或者去 github 搜搜看,萬一有驚喜呢?

就 PyCharm 本身來說,我覺得作為 IDE 提供的功能已經很豐富了,為啥還要寫插件呢?對啊,哪里來的需求,會不會是一個偽需求呢。寫插件前請你想一想這個問題。

 

來自:http://python.jobbole.com/87660/

 

 本文由用戶 tsxh5249 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!