如何开发一个 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)
blank

相关推荐

  • cde网站_zaqxswcde

    cde网站_zaqxswcde给定一个 m x n 整数矩阵 matrix ,找出其中 最长递增路径 的长度。对于每个单元格,你可以往上,下,左,右四个方向移动。 你 不能 在 对角线 方向上移动或移动到 边界外(即不允许环绕)。示例 1:输入:matrix = [[9,9,4],[6,6,8],[2,1,1]]输出:4 解释:最长递增路径为 [1, 2, 6, 9]。示例 2:输入:matrix = [[3,4,5],[3,2,6],[2,2,1]]输出:4 解释:最长递增路径是 [3, 4, 5, 6]。注意

  • jenkins自动触发构建_秒级定时触发器

    jenkins自动触发构建_秒级定时触发器前言跑自动化用例每次用手工点击jenkins出发自动化用例太麻烦了,我们希望能每天固定时间跑,这样就不用管了,坐等收测试报告结果就行。jenkins的定时任务是用的crontab语法定时构建语法

  • ShFileOperation函数详解

    ShFileOperation函数详解[WinAPI]ShFileOperation函数详解2010-04-1110:24ShFileOperation只有一个参数是LPSHFILEOPSTRUCT型的相当于delphi中的TSHFileOpStruct;  c语言定义为:  typedef struct _SHFILEOPSTRUCT{   HWND         hwnd

  • 物联网是随着智能化技术的发展_嵌入式物联网开发

    物联网是随着智能化技术的发展_嵌入式物联网开发&#13;&#13;&#13;&#13;&#13;&#13;&#13;从谷歌的AlphaGo将人工智能推进大众视野起,在可预见的未来,人工智能会涉及到我们生活的各个方面,…

  • 一、数据库表设计规范「建议收藏」

    一、数据库表设计规范「建议收藏」一、三范式为了建立冗余较小、结构合理的数据库,设计数据库时必须遵循一定的规则。在关系型数据库中这种规则就称为范式。范式是符合某一种设计要求的总结。要想设计一个结构合理的关系型数据库,必须满足一定的范式。1.第一范式确保每列保持原子性列不可分 有主键根据实际需求来定。比如某些数据库系统中需要用到“地址”这个属性,本来直接将“地址”属性设计成一个数据库表的字段就行。但是如果系统经常…

  • 嵌入式工程师岗位要求_fae和研发哪个工资高

    嵌入式工程师岗位要求_fae和研发哪个工资高FAE,嵌入式行业苦涩的职位FAE,也叫现场技术支持工程师大学招聘季的时候,憨娃娃一个,一心想找个嵌入式的职位,幻想着成为IronMan,左焊电路,右敲代码,打造属于自己的一身铁皮,成为村里走出去最科技的那个仔。现在想来,着实可笑了些。佩剑尚未佩好,出门就掉巨坑。“你要去的部门是我们公司最核心的部门,我们公司的主营业务都在那边。”HR的自豪我现在竟然还记得。“看起来我还是蛮优秀的嘛。”…

    2022年10月27日

发表回复

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

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