PyCharm 是不少 Python 開發者優先選擇的 IDE,功能強大,跨平臺,提供免費社區版,很是良心。若是你想本身給PyCharm添加一些功能怎麼辦呢?有兩個辦法:html
今天咱們說說怎麼搭建環境本身寫一個 PyCharm 插件。python
先普及一下知識,開發 PyCharm 插件和開發 IntellJ IDEA 插件須要的環境是同樣的,由於 PyCharm 自己就是 IDEA 的一個子集,說白了就是 IDEA 上套了一個 Python 語言支持的插件。其餘系列的 IDEA IDE 其實也是同樣的道理,都是套了對應語言支持的框架外加一點外觀修改,就成了新的產品,好比 WebStrom,PhpStorm,RubyMine。到這裏你應該有個印象,JetBrains 這個公司太能玩了,就一個 IDEA 能整出那麼多產品來,很厲害吧?git
開發 PyCharm 插件你須要:github
Plugin DevKit
插件,默認自帶若是你英文還能夠,也能夠閱讀官方的幫助文檔。編程
從文件菜單選擇 New Project, 選擇 IntelliJ Platform Plugin,若是你沒有配置SDK,點擊New 菜單。緩存
選擇你本地 PyCharm Community Edition(社區版)的安裝路徑做爲SDK目錄,Java SDK 選擇 1.8 以上的版本。框架
請注意,你也可使用 PyCharm Professional (旗艦版) 的安裝路徑做爲SDK目錄,不過當你調試插件碰到核心代碼時,社區版你能夠一步一步跟到最裏面,但旗艦版不行,由於旗艦版並非開源的,你拿不到源代碼。ide
回到 New Project 的界面,點擊 Next,輸入 Project name 和 Project location,點擊完成。網站
小貼士:若是你是打開別人的寫的插件,那麼你直接選擇打開工程目錄是沒有用的,由於 IntelliJ IDEA 不認爲這是個插件工程,因此你無法運行和調試這個插件,一個不怎麼優雅的辦法就是從現有代碼新建一個插件工程,StackOverflow 關於這個的吐槽問題你搜到,若是你有更好的辦法請告訴我。當你換一臺機器把插件代碼克隆下來以後應該就知道我在說什麼了。ui
一個典型的插件目錄結構就像下圖。
打開 /resources/META-INF/plugin.xml
, 更新插件信息,舉例說明。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
|
<idea-plugin version="2">
<id>com.eflabs.plugin.efcommon</id>
<name>EF Common for PyCharm</name>
<version>3.1</version>
<vendor email="toby.qin@live.com">Toby Qin</vendor>
<description><![CDATA[
<b>Able to run and debug ef common tests easily.</b><br>
<br>
<ul>
<li>Support run/debug ef-common tests via context menu.</li>
<li>Show run button in the line of test case.</li>
</ul>]]>
</description>
<change-notes><![CDATA[
<b>v3.0</b><br>
<p>Support PyCharm 171.*</p>
<p>Support nested ef-common project.</p>
<br>
<b>Early version</b><br>
<p>Bug fix: failed to get run.template in resource.</p>
<p>The baby version.</p>
<br>]]>
</change-notes>
<!-- please see http://www.jetbrains.org/intellij/sdk/docs/basics/getting_started/build_number_ranges.html for description -->
<idea-version since-build="171.1"/>
<!-- please see http://confluence.jetbrains.com/display/IDEADEV/Plugin+Compatibility+with+IntelliJ+Platform+Products
on how to target different products -->
<depends>com.intellij.modules.python</depends>
<extensions defaultExtensionNs="com.intellij">
<!-- Add your extensions here -->
<configurationType implementation="com.eflabs.efcommon.runConfiguration.EfCommonConfigurationType"
order="FIRST"/>
<runConfigurationProducer implementation="com.eflabs.efcommon.runConfiguration.EfCommonConfigurationProducer"
order="FIRST"/>
<runLineMarkerContributor
implementationClass="com.eflabs.efcommon.runLineMarker.EfCommonRunLineMarkerContributor"
language="Python"/>
</extensions>
<actions>
<!-- Add your actions here -->
</actions>
</idea-plugin>
|
這個配置文件裏有幾點要注意的:
<id>
和<version>
用於聲明你的插件惟一標識,同id和version的插件不可以重複上傳。<depends>
節點聲明瞭此插件的依賴條件,若是是PyCharm 適用的,那麼就寫 com.intellij.modules.python
<extenstions
節點用於聲明你要擴展的類,只要繼承和實現對應的接口就能夠了。<actions>
節點用於註冊你要實現的 Action,好比你先寫一些 Action,而後註冊到某個菜單。這裏我略過最核心的部分,由於每一個人的需求和代碼能力都不同,這應該去查閱Java編程規範。
簡而言之,就是根據你本身的需求用Java實現一些接口和方法。
若是你的代碼已經實現了,那麼運行和調試就比較簡單。
你能夠選擇本地發佈你的插件,也能夠選擇上傳到 JetBrains 的插件倉庫。
若是你的插件是內部小範圍使用,而且可能帶有敏感信息,那麼這樣的方式會比較適合你。從主菜單選擇 Build > Prepare plugin ‘my_plugin’ For Deployment。
若是成功那麼在工程目錄就會生成一個同名的 jar 文件。
將這個文件 copy 到目標機器就能夠經過 Install Plugin from disk … 完成安裝。廈門叉車租賃
生成插件的步驟和本地發佈是同樣的,惟一不一樣的就是你須要到 JetBrains Plugins 網站去註冊一個帳號。
登陸以後選擇 UPLOAD PLUGIN 菜單,上傳以後大概須要2個工做日審覈。
審覈經過後其餘用戶就能夠直接從 Browse Repositories… 裏搜索到你的插件並安裝。經過插件倉庫安裝的插件,一旦有新版本發佈,用戶將收到更新提示。
關於如何實現具體的插件業務代碼,一個偷懶的辦法就是去看現有功能大概是怎麼實現的,你既然能夠拿到 PyCharm Community Edition 的全部代碼,還有啥看不到的,看懂只是時間問題。再或者去 github 搜搜看,萬一有驚喜呢?
就 PyCharm 自己來講,我以爲做爲 IDE 提供的功能已經很豐富了,爲啥還要寫插件呢?對啊,哪裏來的需求,會不會是一個僞需求呢。寫插件前請你想想這個問題。