如何开发一个 PyCharm 插件[通俗易懂]

如何开发一个 PyCharm 插件[通俗易懂]PyCharm是很多Python开发者优先选择的IDE,功能强大,跨平台,提供免费社区版,非常良心。如果你想自己给PyCharm添加一些功能怎么办呢?有两个办法:通过提需求实现,到JetBrains的github去提issue或者自己发PullRequest请他们merge。通过安装插件实现,你可以查找现有的插件仓…

大家好,又见面了,我是你们的朋友全栈君。

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 菜单。

idea-plugin-sdk-1

选择你本地 PyCharm Community Edition(社区版)的安装路径作为SDK目录,Java SDK 选择 1.8 以上的版本。

请注意,你也可以使用 PyCharm Professional (旗舰版) 的安装路径作为SDK目录,不过当你调试插件碰到核心代码时,社区版你可以一步一步跟到最里面,但旗舰版不行,因为旗舰版并不是开源的,你拿不到源代码。

idea-plugin-sdk-2

回到 New Project 的界面,点击 Next,输入 Project nameProject location,点击完成。

idea-new-project

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

插件工程目录结构

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

idea-project-structure

  • .idea 目录 – JetBrains IDE 生成的工程都会有这么一个目录,存放用户配置和缓存,无需关心。

  • doc 目录 – 插件的文档,可选。

  • out 目录 – 编译后的代码字节,无需关心。

  • resources 目录 – 资源存放目录,插件的配置文件在此。

  • src 目录 – 代码存放的位置。

  • *.iml 文件 – 项目的配置文件。

修改插件信息

打开 /resources/META-INF/plugin.xml, 更新插件信息,举例说明。

<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

idea-deploy-local

如果成功那么在工程目录就会生成一个同名的 jar 文件。

idea-deploy-local-2

将这个文件 copy 到目标机器就可以通过 Install Plugin from disk … 完成安装。

发布插件到 JetBrains Plugin 仓库

生成插件的步骤和本地发布是一样的,唯一不同的就是你需要到 JetBrains Plugins 网站去注册一个账号。

登录之后选择 UPLOAD PLUGIN 菜单,上传之后大概需要2个工作日审核。

idea-deploy-remote

审核通过后其他用户就可以直接从 Browse Repositories… 里搜索到你的插件并安装。通过插件仓库安装的插件,一旦有新版本发布,用户将收到更新提示。

写在最后

关于如何实现具体的插件业务代码,一个偷懒的办法就是去看现有功能大概是怎么实现的,你既然可以拿到 PyCharm Community Edition 的所有代码,还有啥看不到的,看懂只是时间问题。再或者去 github 搜搜看,万一有惊喜呢?

就 PyCharm 本身来说,我觉得作为 IDE 提供的功能已经很丰富了,为啥还要写插件呢?对啊,哪里来的需求,会不会是一个伪需求呢。写插件前请你想一想这个问题。

关于作者:

Toby Qin, Python 技术爱好者,目前从事测试开发相关工作,转载请注明原文出处。

欢迎关注我的博客 https://betacat.online,你可以到我的公众号中去当吃瓜群众。

Betacat.online

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/152621.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • vm15激活码(JetBrains全家桶)

    (vm15激活码)2021最新分享一个能用的的激活码出来,希望能帮到需要激活的朋友。目前这个是能用的,但是用的人多了之后也会失效,会不定时更新的,大家持续关注此网站~https://javaforall.cn/100143.htmlIntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,上面是详细链接哦~BI…

  • PyCharm安装配置谷歌浏览器驱动[通俗易懂]

    PyCharm安装配置谷歌浏览器驱动[通俗易懂]PyCharm配置安装Chorme驱动下载驱动查看Chorme的版本这是我的谷歌浏览器版本去网站下载对应的驱动软件下载后进入下载的目录,解压然后把这个文件放入Python的Scripts文件夹(首先你的Python环境变量已经配置过)驱动下载地址:http://chromedriver.storage.proxy.ustclug.org/index.html安装驱动进入设置,按照步骤点击安装selenium包然后会出现安装进程,添加完成之后开始测试驱动测试驱动创建一个Pyth

  • ES6 类的使用(class)

    ES6 类的使用(class)

  • c语言的stl库_c语言string库

    c语言的stl库_c语言string库今天推荐一个函数库glib注意不是glibc https://developer.gnome.org/glib/一直在抱怨,标准C中为什么没有类似于STL的标准容器,让全世界的程序员在数以万次的重复实现它们。不过,还算走运,有了glib,恶梦在此终结了。glib提供了动态数组、单/双向链表、哈希表、多叉树、平衡二叉树、字符串等常用容器,完全是面向对象设计的,实现得非常精致。

    2022年10月15日
  • 成为java架构师需要具备那些技能?

    成为java架构师需要具备那些技能?架构师定义百度百科,系统架构师是一个既需要掌控整体又需要洞悉局部瓶颈并依据具体的业务场景给出解决方案的团队领导型人物。架构师工作职能软件架构师在整个软件开发过程中都起着重要的作用,并随着开发进程的推进而其职责或关注点不断地变化,在需求阶段,软件架构师主要负责理解和管理非功能性系统需求,比如软件的可维护性、性能、复用性、可靠性、有效性和可测试性等等,此外,架构师还要经常审查客户及市场人员

  • Golang小技巧

    Golang小技巧

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号