剑客之剑系列续篇:六脉神剑——PyCharm使用宝典

泪湿孤枕 提交于 2019-12-15 05:08:15


1. 前言

前些日子,我在 CSDN 博客平台上以《剑客之剑》作为系列篇名,一口气分享了三款编辑器的使用体验。这篇三文章分别是:

《剑客之剑——君子剑(Notepad++)》
《剑客之剑——倚天剑(Vim)》
《剑客之剑——玄铁重剑(VS Code)》

原计划 PyCharm 是《剑客之剑》系列的第四篇,本想一鼓作气写完的,无奈因短时间内发力过猛,气血不足,无以为继,只好先闭关修炼了两周。今日出关,终于可以继续聊聊 PyCharm 了。

事实上,PyCharm 和其他三款编辑器完全不是同一个层面的工具。Notepad++ 和 Vim 是纯粹的编辑器,VS Code 自称是“最像 IDE 的编辑器”,而 PyCharm 则是一款真正的 IDE。所谓 IDE(Integrated Development Environment,集成开发环境),是指集代码编写功能、分析功能、编译功能、调试功能为一体的、用于提供程序开发环境的应用程序,一般包括代码编辑器、编译器、调试器和图形用户界面等工具。

2. PyCharm的六脉神剑

PyCharm 是 JetBrains 公司出品的一款经典产品,功能非常强大,强大到足以藐视所有的 Python IDE。从这一点上讲,PyCharm 倒是和金庸武侠世界里的六脉神剑非常相似。 PyCharm 有六大功能,刚好暗合六脉神剑:

  1. 工程管理——少商剑:石破天惊
  2. 环境管理——商阳剑:难以捉摸
  3. 模板管理——中冲剑:气势雄迈
  4. 代码编辑——少冲剑:轻灵迅速
  5. 代码调试——少泽剑:变化精微
  6. 版本控制——关冲剑:拙滞古朴

PyCharm有社区版和专业版两个版本。社区版是开源免费的,但是却少一些功能;专业版功能全面但价格不菲。当然,你可以……(想什么呢,我说的是试用30天)。

两个版本在功能上有如下区别:

Professional Edition Community Edition
Intelligent Python editor
Graphical debugger and test runner
Navigation and Refactorings
Code inspections
VCS support
Scientific tools
Web development
Python web frameworks
Python Profiler
Remote development capabilities
Database & SQL support

2.1 工程管理——少商剑:石破天惊

2.1.1 创建工程

工程是代码运行和调试的管理单位。要想使用PyCharm开发程序,首先要创建工程。第一次运行PyCharm时,会显示如下界面:

在此界面中,有三种方式创建工程:

  1. Create New Project:
    点击【Create New Project】后,弹出创建工程对话框:

    左侧选择工程的类型,右侧填写工程选项。工程选项有三部分组成

    • Location:工程代码目录的路径
    • Project Interpreter:工程所需的Python环境信息,此部分可选择为该工程创建虚拟环境或使得现有环境,如无特殊需要,请选择使用现有环境。如果所选的工程不需要Python环境,此部分不显示
    • More Settings:根据左侧工程的不同,显示该类型特有的选项。如有特有选项,此部分不显示。
  2. Open:
    这种方式非常简单,只需要选择一个目录,PyCharm会自动创建工程。

  3. Check out from Version Control:
    从版本服务器签出并创建工程。

如果已经创建了工程,PyCharm可能不会弹出这个对话框。你可以在【File】菜单中选择【New Project】或【Open】进行创建。

如果在安装的时候选择了【Add “Open Folder As Project”】,恭喜你,你获得了创建工程最简单的方式!只需要在要创建工程的目录上,点击右键,选择【Open Folder As PyCharm Project】,就大功告成了。

2.1.2 切换工程

PyCharm默认会记录上次打开的工程,如果要进行切换,可以使用如下方式:

  1. 【File】菜单中选择【Open Recent】然后选择其他的工程
  2. 点击【File】->【Open Recent】->【Manage Projects】,在弹出的对话框中选择其他工程
  3. 你是不是对PyCharm默认打开上次工程的行为感到反感?在【File】菜单中选择【Settings】,在弹出的对话框中搜索last,如图:

    取消右侧被圈出的选项,PyCharm再启动时就不会再自动打开上次的工程了,而是打开了下面的对话框:

    在这里面,你可以随意打开或创建工程了。
  4. 还有一种最为简单的方式,你想到了吗?在代码目录上,点击右键,选择【Open Folder As PyCharm Project】,如果已经创建了工程,PyCharm就会打开它,如果没有创建PyCharm就会先创建再打开它。

2.2 环境管理——商阳剑:难以捉摸

在【File】菜单中选择【Settings】,在弹出的对话框的配置树上选择【Project】->【Project Interpreter】,如图:

在此对话框中,你可以对Python环境进行如下管理:

2.2.1 切换Python环境

如果你的系统中安装了多个Python环境,使用直接打开目录的方式创建工程,PyCharm有可能会选择错环境,你可以在环境管理中修改它。

2.2.2 添加环境

一般情况下,PyCharm可以自动的搜索出系统中安装的各Python环境,如果找不到,你可以手动添加。
点击下图右侧的配置按钮,并选择【Add】:

弹出如下对话框:

对话框的左侧为环境的分类,包括:

  • Virtualenv Environment: 可添加通过virtualenv创建的Python虚拟环境
  • Conda Environment: 可添加通过Conda安装的Python环境
  • System Interpreter: 可添加直接在系统中安装的Python解释器
  • Pipenv Environment:可添加通过pipenv创建的Python虚拟环境
  • SSH Interpreter:可添加通过SSH命令使用的Python环境
  • Vagrent:可添加通过Vagrent创建的Python虚拟环境
  • WSL: 可添加win10的Linux子系统中的Python环境
  • Docker:可添加使用Docker安装的Python环境
  • Docker Compose: 可添加使用Docker Compose管理的Python环境

你可以根据你的情况选择不同的分类并设置属性添加。
看到这里,不得不感慨PyCharm的强大。

2.2.3 Python模块管理

安装了多个Python环境,pip就会显示比较混乱,很难弄清楚命令行中的pip属于哪个环境。没关系,PyCharm可以帮你解决这个问题。
选择Python环境后,下方显示此环境的模块列表,如图:

  • 卸载模块
    点击列表右侧的【-】图标,即可卸载已经安装的模块。

  • 升级模块
    如果模块有新的版本,则最新版本前会显示【▲】,点击即可新该模块升级到最新版本。

  • 安装模块
    点击列表右侧的【+】图标,弹出模块安装对话框:

    上方可输入模块名称进行搜索,搜索显示在列表中,选择列表中的模块,点击下方的【Install Package】即可安装。
    如果需要指定模块的版本,可勾选【Specify Version】,并填写版本号。

2.3 模板管理——中冲剑:气势雄迈

2.3.1 文件模板

工程准备好了,我们就该创建Python文件了。一般的Python,有以下几部分组成:

  • 文件头
    Python文件头一般由两行组成, 如:

    #!/usr/bin/env python
    # -*- coding: utf-8 -*-
    

    第一行说明使用哪个Python解释器执行(Windows无效),第二行说明文件的格式为utf-8

  • 文件docstring
    在PEP约定文件开头需要有docstring说明本文件的功能等

如果是工程的主文件,还需要有main函数等,所以一般空的Python文件是这样的:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

"""

"""

def main():
    """
    主函数
    """
    
    pass
    
 if __name__ == "__main__":
    main()
 

可以在PyCharm中设置文件模板,使新创建的文件拥有以上内容。

  1. 点击【FIle】菜单,选择【settings】;
  2. 在弹出的窗口左侧选择【Editor】->【File and Code Templates】;
  3. 在中部文件类型列表中选择【Python Script】;
  4. 在右侧的文本框中输入上面的文件内容;
  5. 点击【Apply】和【OK】

在这里插入图片描述
以后新建Python文件就会自动应用设置的模板。PyCharm支持的文件种类非常多,你可以根据需要为不同的文件创建不同的模板。

2.3.2 Live Templates

先来体验一下Live Templates的威力:

PyCharm过去的版本中,内置了很多Live TempLates,比如最常用的def、class等。不知道为什么,现在的PyCharm不再内置这些Live TempLates了。不过没关系,我们可以手工添加回来。

  1. 点击【FIle】菜单,选择【settings】;
  2. 在弹出的窗口左侧选择【Editor】->【Live Templates】;
  3. 在右侧的树上选择Python,点击右侧的【+】,选择【Live Templates】;
  4. 在下方【Abberviation】中输入“class”,在【Template text】中输入如下内容:
    #================================================================================
    class $class$($base$):
        """
        $memo$
        """
        
        #--------------------------------------------------------------------------------
        def __init__($pram$):
            """
            $class$的构造函数
            """
            
            $end$
        
    
  5. 再次添加一个【Live Templates】,在【Abberviation】中输入“def”,在【Template text】中输入如下内容:
    #--------------------------------------------------------------------------------
    def $name$($pram$):
        $end$
    
  6. 将这两个Live Template的使用的时机设置为Python的类或其他
  7. 点击【Apply】和【OK】

在这里插入图片描述

2.3.3 docstring

代码即文档已经成为一种时尚,清晰的函数docstring让别人很容易明白函数的功能和参数的含义。PyCharm可以很方便的帮你生成函数docstring。

如上图示意的那样,只需要在函数名下面输入三个双引号,回车即可。
PyCharm还内置了多种docstring的模板可以选择:

  1. 点击点击【FIle】菜单,选择【settings】,
  2. 左侧选择【Tools】->【Python Integrated Tool]】
  3. 从【Docstring format】的下拉列表中选择一个模板

在这里插入图片描述

2.4 代码编辑——少冲剑:轻灵迅速

2.4.1 自动补全

PyCharm提供了强大的代码补全功能。当你输入某单词时,它会根据语义列出单词选项供你选择,并且会根据你使用的频次自动调整列表的顺序。
这里向大家推荐一款比PyCharm内置的补全功能还强大的自动补全工具——Kite。为什么说它更强大呢?因为它是使用AI推测你要输入的代码内容,然后向你提供补全选项。

kite由服务程序和PyCharm插件组成。点此下载kite的安装包。

  1. 安装过程中,Kite飞越代码海洋,来到你的电脑中:
  2. 安装完成后,你需要使用邮件登录,当然,你也可以像我一样选择Continue without email
  3. kite自动检测你安装的编辑器,为你安装好插件。即使你在安装完kite之后又安装了新的编辑器,kite也会检测到并帮你把插件安装好。
  4. 安装了kite后,在自动补全的下拉列表里有风筝图标的,为kite提供的选项,不带的为PyCharm提供的。

2.4.2 代码重构

  • 重命名
    在变量名、函数名、类名、文件名上点击右键,选择【Refactor】->【Rename】,或按快捷键Shift+F6可以对其进行改名操作。PyCharm自动将其和引用的地方全部改名。以变量名为例:

    安全起见,如果修改函数、类名或文件名,PyCharm会先列出所有引用该函数名或模块名的代码。确认无误后PyCharm才会进行重命名操作。

  • 修改签名
    修改签名,也可以起到修改命名的作用。对与函数名,不但能修改函数名,还可以同时修改函数的参数。
    在函数名上点右键,选择【Refactor】->【Change signature】,或按快捷键Ctrl+F6,弹出如下对话框:

    可修改【Name】,并使用右侧的按钮添加、删除参数,修改参数的顺序等。

  • 函数重组
    功能相近的函数,散落在多个py文件里,会影响代码的可读性,有没有简单的办法将这些函数移动到一个文件里?这个可以有。

在这里插入图片描述

函数移走以后还自动帮你添加上目标文件的引用,是不是很贴心呢。

2.4.3 代码纠错

PyCharm可以分析代码,如果代码有错误,会在错误的地方使用红色波浪线标记。点击被标记的代码,会有错误提示,并给出几种解决方案供开发人员选择。

  • 没有安装库
    当我的代码里引用了没有安装的库,比如tornado,点击旁边的灯泡,如图:

    选择安装tornado,后PyCharm就可以自动安装好tornado。

  • 没有定义变量/函数
    引用了一个没有定义的变量或函数,PyCharm也可以提供解决方案:

    点击后,PyCharm自动生成了如下代码:

    def main():
        pass
    
    
    if __name__ == '__main__':
        main()
    

出错的情况有太多太多,这里无法一一列举,但PyCharm可以为每一种错误提供解决方案。

2.4.4 代码规范

代码走查时,第一个要检查的就是代码规范。PyCharm支持PEP8代码规范检查,并根据问题的严重程序,使用不同颜色的波浪线标记出不符合规范的代码。当鼠标放在时,会显示出代码的问题:

当然,如果某些规范不适合你的项目时,你也可以选择是否启用:
在这里插入图片描述

2.4.5 超级滚动条

PyCharm的滚动条融合了滚动、代码纠错、代码规范的功能,在滚动条上用多种颜色标记出代码的各种问题。鼠标放在颜色块上时,PyCharm显示出色块对应的代码以及代码的问题,非常清晰。
在这里插入图片描述

2.5 代码调试——少泽剑:变化精微

我们用numpy生成100*100个0~10之间的随机整数,统计每个数字出现的次数,并绘制数据分布直方图。代码如下:

#! /usr/bin/env python
# -*- coding: utf-8 -*-

"""
 通过Numpy生成随机数并统计数据的分布直方图
"""

import numpy as np
import matplotlib.pyplot as plt


def get_data_distribution():
    """
    生成100*100个随机数并统计直方图

    :return: 直方图数据
    """

    # 生成随机的numpy数组
    data = np.random.randint(0, 10, (100, 100))

    # 统计数字出现的个数
    x = np.arange(0, 10)
    y = np.bincount(data.reshape(-1))
    # y, x = np.histogram(data, np.arange(0, 10))

    return x, y


def draw_distribution(x, y):
    """
    绘制直方图

    :param x: X轴数据
    :param y: Y轴数据
    """

    width = 0.5
    fig, ax = plt.subplots()
    ax.bar(x - width/2, y, width)

    fig.tight_layout()
    plt.show()


def main():
    """
    主函数
    """

    x, y = get_data_distribution()

    draw_distribution(x, y)


if __name__ == "__main__":
    main()

将上述代码保存distribution.py,要启动调试,有两种方法:

  • 简单的方法是在代码的任意位置点击右键,选择【Debug ‘distribution’】
  • 第二种方法比较复杂,但可以应对诸如输入启动参数等情景。
    1. 在菜单栏中点击【Add Configuration】
    2. 在弹出窗口中根据要调试的文件类型,选择一个模板
    3. 根据这实际情况填写如下参数:
      • Script Path:要启动的脚本路径
      • Parameters: 要传递给脚本的参数
    4. 点击【Apply】和【OK】

无论用哪种方法,下次启动调试时都可以直接点击工具栏上的按钮启动调试:

2.5.1 断点调试

调试之前,首先要打断点,程序运行到断点所在的代码行时,PyCharm会中断。
我们在第23行的行号后点击左键:
在这里插入图片描述
如果想改变断点的属性,如是否可用,添加中断条件,可以断点处点击右键:

启动调试后,PyCharm发生了中断,并标记出代码执行到了哪一行:

中断后,PyCharm下方在Debug窗口如下:

在这里插入图片描述

  • 调试工具栏
    调试工具栏有多个按钮,从上到下依次为:

    1. 重启调试
    2. 继续运行到下一断点
    3. 中断
    4. 停止调试
    5. 查看所有断点
    6. 禁用/启用所有断点
  • 单步调试工具栏
    单步调试工具栏有多个按钮,从左到右依次为:

    1. 下一步(跳过函数调用)
    2. 下一步(进入调用的函数内)
    3. 下一步(如果当前行调用了自定义的函数,则进入;如果调用的函数为系统函数,则跳过)
    4. 下一步(强制进入调用的函数内)
    5. 跳出函数调用
    6. 执行到光标所在的行
    7. 异常评估
  • 调试器与控制台切换
    两个工具栏之间还有一块区域,可以在调试器与程序输出控制台之间进行切换

  • 调用堆栈区
    调用堆栈区显示函数调用列表,点击列表项可切换调用堆栈

  • 变量监视区
    可查看程序当前拥有的变量的值

2.5.2 SciView

如果要调试的代码里使用了numpy,PyCharm会有如下提示:

选择【Use scientific mode】,PyCharm会出现【SciView】窗口:

【SciView】窗口有两个Tab页,【Data】用于查看numpy数组的值,【Plots】用于查看matplotlib绘图。

  • numpy
    在变量监视区的numpy数组后点击【View as Array】,可在【Data】中查看numpy数组的值。
    PyCharm会自动的根据数据的大小,为单元格标记不同的底色:

    PyCharm只能显示一维和二维的数据,如果多于二维,可以窗口下方以切片的方式对数组进行切片显示,同时也可以控制显示的格式。

  • matplotlib
    如果代码中绘制了matplotlib的图像,PyCharm可以自动的将每一副图像,保存在【Plots】窗口中,你可以切换图像进行比较。

2.5.3 自动中断

如果代码在调试过程中发生了异常,PyCharm可以自动捕获并中断,中断后可以查看异常发生时各变量的值以定位异常发生的原因。如将上述代码的23、24行注释并放开25行。

#! /usr/bin/env python
# -*- coding: utf-8 -*-

"""
 通过Numpy生成随机数并统计数据的分布直方图
"""

import numpy as np
import matplotlib.pyplot as plt


def get_data_distribution():
    """
    生成100*100个随机数并统计直方图

    :return: 直方图数据
    """

    # 生成随机的numpy数组
    data = np.random.randint(0, 10, (100, 100))

    # 统计数字出现的个数
    # x = np.arange(0, 10)
    # y = np.bincount(data.reshape(-1))
    y, x = np.histogram(data, np.arange(0, 10))

    return x, y


def draw_distribution(x, y):
    """
    绘制直方图

    :param x: X轴数据
    :param y: Y轴数据
    """

    width = 0.5
    fig, ax = plt.subplots()
    ax.bar(x - width/2, y, width)

    fig.tight_layout()
    plt.show()


def main():
    """
    主函数
    """

    x, y = get_data_distribution()

    draw_distribution(x, y)


if __name__ == "__main__":
    main()

启动调试后,PyCharm捕获了异常,并自动中断。

PyCharm标记出了发生异常的位置,但有时候不是我们自己代码,可以从调用堆栈中找到自己的代码切换堆栈(PyCharm会用不同的颜色进行标记)。
在这里插入图片描述

然后可以根据这时各变量的值判断异常发生的原因。

2.6 版本控制——关冲剑:拙滞古朴

2.6.1 本地版本控制

作为单打独斗的程序员,还需要自己建立一套版本控制体系吗?不用想那么多,PyCharm已经帮你准备好了。

  • 查看本地历史
    在代码或文件树上点击右键,选择【Local History】->【Show History】,如图:
    在这里插入图片描述
    弹出如下对话框:

    左侧显示出了我文件的修改历史,真是不看不知道,一看吓一跳,原来我已经修改过那么多次了。而且,我使用PyCharm和重构功能也被标记了出来,真是太赞了。
    选择左侧的一个版本,右侧显示出该版本与当前版本的对比:

    对比的结果非常清晰,点击不同点中间的【>>】按钮即可进行合并。清晰度和易用性甩Beyond Compare几条街。

  • 版本还原
    对比完后,点击窗口左上角的【Revert】按钮,可以还原到之前的版本,不用担心当前版本丢失,PyCharm会帮你记录下来的。

  • 添加标签
    如果你觉得当前版本比较重要,可以选择【Local History】->【Put Lable】,并输入标签内容:

    完成后查看本地版本,就可以看到刚才添加的标签。
    在这里插入图片描述
    PyCharm也会自动帮你添加标签,比如我刚才将9:35的版本提交到了Git,PyCharm也忠实的记录了下来。

2.6.2 Git和SVN

Git和SVN是现在最流行两大版本控制工具,PyCharm不仅仅是支持这两大版本控制工具,而且具有很高的易用性,使用体验远远超过了TortoistGIT和TortoistSVN。
Git使用起来比SVN要复杂一些,这里以Git为例,说明一下PyCharm版本控制的使用。 SVN的使用方式和Git类似,这里就不再赘述了。

  • 查看文件状态
    PyCharm在工程树上用不同的颜色标记出每个文件的状态,如:

    颜色在不同的主题下有不同的定义,在我的主题下,各颜色的含义为:

    • 白色:表示文件与版本服务器相同
    • 蓝色:表示文件已经被修改,与服务服务器不同
    • 红色:表示文件没有添加到版本控制中
    • 绿色:表示文件已经添加到版本控制中,但没有提交

    还可以在PyCharm下方的【Version Control】窗口中查看所有修改过的和没有添加到管理的文件列表:

  • 添加(Add)
    想要将文件添加到版本控制,可以在工程树上右击该文件,选择【Git】->【Add】

    也可以在【Version Control】窗口中右击该文件,选择【Add to VCS】
    在这里插入图片描述

  • 提交(Commit)
    想要提交文件到服务器,可以在工程树上点击,选择【Git】->【Commit Directory】

    也可以在【Version Control】窗口看点击左侧的【√】按钮。还可以直接在工具栏上点击【√】按钮:

    上面三种方式都会打开下面的对话框:
    在这里插入图片描述
    对话框中可以选择进行提交的文件、填写提交注释、查看文件对比等,需要特别说明的是,在对比中可以选择提交哪一个修改。

  • 推送(Push)
    与SVN不同,Git的提交只是提交到本地,提交完后,还需要推送到服务器。
    推送到服务器可以在工程树点击右键,选择【Git】->【Repository】->【Push】

    PyCharm默认的工具栏上没有推送按钮,我们可以添加上。
    在设置里找到【Menu And Toolbars】->【Main Toolbar】->【Main Toolbar Settings】->【VCS Actions】,并点击想要添加的位置:

    点击上面的【+】并选择【Add Action】,弹出下面的对话框,然后搜索Push:

    点击【OK】后,工具栏中就有了【Push】按钮:

    通过上面的两种方式都可以打开推送窗口:
    在这里插入图片描述

    点击【push】即可推送到远程服务器。

  • 拉取(Pull)
    拉取与推送相似,有两种方式。通过这两种方式,都可以打开拉取对话框:

    将【Update Type】改为【Merge】,点击【OK】即可。

  • 解决冲突(Conflicts)
    拉取的过程中,有时候,会有冲突发生:

    你可以慎重的选择【Accept Yours】(用你的代码覆盖别人的)、【Accept Theirs】(用别人的代码覆盖你的),最安全的是选择【Merge】:

    这个窗口最左侧显示你的代码,最右侧显示别人的代码,中间为合并后的代码。你可以点击【>>】、【<<】将代码合并,点击[X]放弃某处修改,完成后点击【Apply】即可。

  • 分支(Branch)
    分支是Git最具有代表性的功能,也是最容易让人头晕的功能。使用PyCharm可以轻松管理分支。
    在PyCharm右角的状态栏中,显示了当前的分支:

    点击【Git:master】,弹出下面的菜单:

    点击【New Branch】,可以创建分支:

    创建后PyCharm显示为:

    以后的修改和提交都会在test分支上进行,test提交后,可以将修改合并到master分支上。
    首先,检出master分支,点击master分支,选择【Checkout】

    再点击test分支,选择【Merge Into Current】
    在这里插入图片描述
    PyCharm提示合并成功,可以删除test分支了

    点击上图中的【Delete test】,或在右下角点击test分支,选择【Delete】

    test分支被删除。

  • 查看日志(Log)
    在【Version Control】窗口中,可以查看Git的提交日志,查看每次提交了哪些文件,并可以进一步查看每个文件所做的改动。
    在这里插入图片描述

3. 后记

近期有很多朋友通过私信咨询有关Python学习问题。为便于交流,我在CSDN的app上创建了“Python作业辅导”大本营,面向Python初学者,为大家提供咨询服务、辅导Python作业。欢迎有兴趣的同学使用微信扫码加入。

在这里插入图片描述

从博客到公众号,每一篇、每一题、每一句、每一行代码,都坚持原创,绝不复制抄袭,这是我坚守的原则。如果喜欢,请关注我的微信公众号“Python作业辅导员”。

在这里插入图片描述

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!