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 name 和 Project location,点击完成。

小贴士:如果你是打开别人的写的插件,那么你直接选择打开工程目录是没有用的,因为 IntelliJ IDEA 不认为这是个插件工程,所以你没法运行和调试这个插件,一个不怎么优雅的办法就是从现有代码新建一个插件工程,StackOverflow 关于这个的吐槽问题你搜到,如果你有更好的办法请告诉我。当你换一台机器把插件代码克隆下来之后应该就知道我在说什么了。

插件工程目录结构

一个典型的插件目录结构就像下图。

  • .idea 目录 – JetBrains IDE 生成的工程都会有这么一个目录,存放用户配置和缓存,无需关心。
  • doc 目录 – 插件的文档,可选。
  • out 目录 – 编译后的代码字节,无需关心。
  • resources 目录 – 资源存放目录,插件的配置文件在此。
  • src 目录 – 代码存放的位置。
  • *.iml 文件 – 项目的配置文件。

修改插件信息

打开 /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>

这个配置文件里有几点要注意的:

  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 提供的功能已经很丰富了,为啥还要写插件呢?对啊,哪里来的需求,会不会是一个伪需求呢。写插件前请你想一想这个问题。

如何开发一个 PyCharm 插件的更多相关文章

  1. 开发一个shopify插件

       开发一个shopify插件,shopify商城可以安装该插件:当用户在商城下单后,插件把订单数据按照指定格式传给disruptsports服务器:   https://help.shopify. ...

  2. jQuery 开发一个简易插件

    jQuery 开发一个简易插件 //主要内容 $.changeCss = function(options){ var defaults = { color:'blue', ele:'text', f ...

  3. 开发一个jQuery插件——多级联动菜单

    引言 开发中,有好多地方用到联动菜单,以前每次遇到联动菜单的时候都去重新写,代码重用率很低,前几天又遇到联动菜单的问题,总结了下,发现可以开发一个联动菜单的功能,以后想用的时候就方便多了.项目中每个页 ...

  4. 如何开发一个Jquery插件

    Jquery有两种开发插件的方法: 1.jquery.fn.extend(object); 2.jquery.extend(object); 第一种方法是给Jquery对象添加方法,jquery.fn ...

  5. 开发一个chrome插件:将百度搜索热点屏蔽掉!

    每次百度搜索,搜索结果的右边总是出现些乱七八糟的搜索热点(推的都是些什么玩意,高校替课和我有毛关系,几个悲伤的热点我用星号顶掉了). 强迫症想把它隐藏掉,我用的是chrome浏览器,受adblock( ...

  6. 如何开发一个maven插件

    maven是当下最流行的项目管理工具,其丰富的插件为我们的工作带来了很大的便利. 但是在一些情况下,开源的插件并不能完全满足我们的需求,我们需要自己创建插件,本文就从0开始带大家一起创建自己的插件. ...

  7. 如何开发和发布一个Vue插件

    前言 Vue 项目开发过程中,经常用到插件,比如原生插件 vue-router.vuex,还有 element-ui 提供的 notify.message 等等.这些插件让我们的开发变得更简单更高效. ...

  8. 如何从0开发一个Atom组件

    最近用Atom写博客比较多,然后发现一个很严重的问题..没有一个我想要的上传图片的方式,比如某乎上边就可以直接copy/paste文件,然后进行上传.然而在Atom上没有找到类似的插件,最接近的一个, ...

  9. chrome 浏览器插件开发(一)—— 创建第一个chrome插件

    最近在开发一个chrome插件,在网上找到了一些的文章,虽说按照文章可以写出对应的例子,但若要进行实际开发,发现还是有不少文章中没有的坑.下面我将结合我在开发过程中遇到的几个方面,对这些坑做一下补充. ...

随机推荐

  1. Oracle日志文件

    转载网站:Oracle技术圈 转载地址:https://www.oraclejsq.com/oraclegl/010300678.html Oracle日志文件 Oracle日志文件是Oracle数据 ...

  2. 2019年,200道面试题打造最受企业欢迎的iOS程序猿!

    在2018年底,小编混迹在各种iOS交流群中,整理出了将近两百道大厂最喜欢在面试问到的问题,今天在这里分享给大家[免费获取方式在最后]!                           小编就不在 ...

  3. docker_Dockerfile_docker hub简单使用搭建nginx

    Docker for Windows是Docker for Microsoft Windows 的Community Edition(CE).要下载Docker for Windows,请前往Dock ...

  4. 832. Flipping an Image (5月22日 )

    解答 class Solution { public: vector<vector<int>> flipAndInvertImage(vector<vector<i ...

  5. linux下安装protobuf及cmake编译

    一.protobuf 安装 protobuf版本:2.6.1 下载地址:https://github.com/google/protobuf/archive/v2.6.1.zip 解压之后进入目录 修 ...

  6. PHP+jQuery实现双击修改table表格

    <td signs="name"> <input type="text" disabled="disabled" read ...

  7. JQuery模拟网页中自定义鼠标右键菜单

    题外话.......最近在开发一个网站项目的时候,需要用到网页自定义右键菜单,在网上看了各路前辈大神的操作,头晕目眩,为了达到目的,突然灵机一动,于是便有了这篇文章. 先放个效果图(沾沾自喜,大神勿喷 ...

  8. 使用PHP生成二维码支持自定义logo

    require_once 'phpqrcode/phpqrcode.php'; //引入类库 $text = "https://www.baidu.com/";//要生成二维码的文 ...

  9. linux环境mysql的安装主从关系的配置

  10. Home Assistant系列 -- 设置界面语言与地理位置

    Home Assistant 安装的时候会自动根据你的系统语言设置默认语言,安装完成以后也可以根据需要自己设置选择语言.启动 Home Assistant ,浏览器打开web 界面,点击左上角的用户图 ...