文章目录
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 有六大功能,刚好暗合六脉神剑:
- 工程管理——少商剑:石破天惊
- 环境管理——商阳剑:难以捉摸
- 模板管理——中冲剑:气势雄迈
- 代码编辑——少冲剑:轻灵迅速
- 代码调试——少泽剑:变化精微
- 版本控制——关冲剑:拙滞古朴
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时,会显示如下界面:
在此界面中,有三种方式创建工程:
-
Create New Project:
点击【Create New Project】后,弹出创建工程对话框:
左侧选择工程的类型,右侧填写工程选项。工程选项有三部分组成- Location:工程代码目录的路径
- Project Interpreter:工程所需的Python环境信息,此部分可选择为该工程创建虚拟环境或使得现有环境,如无特殊需要,请选择使用现有环境。如果所选的工程不需要Python环境,此部分不显示
- More Settings:根据左侧工程的不同,显示该类型特有的选项。如有特有选项,此部分不显示。
-
Open:
这种方式非常简单,只需要选择一个目录,PyCharm会自动创建工程。 -
Check out from Version Control:
从版本服务器签出并创建工程。
如果已经创建了工程,PyCharm可能不会弹出这个对话框。你可以在【File】菜单中选择【New Project】或【Open】进行创建。
如果在安装的时候选择了【Add “Open Folder As Project”】,恭喜你,你获得了创建工程最简单的方式!只需要在要创建工程的目录上,点击右键,选择【Open Folder As PyCharm Project】,就大功告成了。
2.1.2 切换工程
PyCharm默认会记录上次打开的工程,如果要进行切换,可以使用如下方式:
- 【File】菜单中选择【Open Recent】然后选择其他的工程
- 点击【File】->【Open Recent】->【Manage Projects】,在弹出的对话框中选择其他工程
- 你是不是对PyCharm默认打开上次工程的行为感到反感?在【File】菜单中选择【Settings】,在弹出的对话框中搜索last,如图:
取消右侧被圈出的选项,PyCharm再启动时就不会再自动打开上次的工程了,而是打开了下面的对话框:
在这里面,你可以随意打开或创建工程了。 - 还有一种最为简单的方式,你想到了吗?在代码目录上,点击右键,选择【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中设置文件模板,使新创建的文件拥有以上内容。
- 点击【FIle】菜单,选择【settings】;
- 在弹出的窗口左侧选择【Editor】->【File and Code Templates】;
- 在中部文件类型列表中选择【Python Script】;
- 在右侧的文本框中输入上面的文件内容;
- 点击【Apply】和【OK】
以后新建Python文件就会自动应用设置的模板。PyCharm支持的文件种类非常多,你可以根据需要为不同的文件创建不同的模板。
2.3.2 Live Templates
先来体验一下Live Templates的威力:
PyCharm过去的版本中,内置了很多Live TempLates,比如最常用的def、class等。不知道为什么,现在的PyCharm不再内置这些Live TempLates了。不过没关系,我们可以手工添加回来。
- 点击【FIle】菜单,选择【settings】;
- 在弹出的窗口左侧选择【Editor】->【Live Templates】;
- 在右侧的树上选择Python,点击右侧的【+】,选择【Live Templates】;
- 在下方【Abberviation】中输入“class”,在【Template text】中输入如下内容:
#================================================================================ class $class$($base$): """ $memo$ """ #-------------------------------------------------------------------------------- def __init__($pram$): """ $class$的构造函数 """ $end$
- 再次添加一个【Live Templates】,在【Abberviation】中输入“def”,在【Template text】中输入如下内容:
#-------------------------------------------------------------------------------- def $name$($pram$): $end$
- 将这两个Live Template的使用的时机设置为Python的类或其他
- 点击【Apply】和【OK】
2.3.3 docstring
代码即文档已经成为一种时尚,清晰的函数docstring让别人很容易明白函数的功能和参数的含义。PyCharm可以很方便的帮你生成函数docstring。
如上图示意的那样,只需要在函数名下面输入三个双引号,回车即可。
PyCharm还内置了多种docstring的模板可以选择:
- 点击点击【FIle】菜单,选择【settings】,
- 左侧选择【Tools】->【Python Integrated Tool]】
- 从【Docstring format】的下拉列表中选择一个模板
2.4 代码编辑——少冲剑:轻灵迅速
2.4.1 自动补全
PyCharm提供了强大的代码补全功能。当你输入某单词时,它会根据语义列出单词选项供你选择,并且会根据你使用的频次自动调整列表的顺序。
这里向大家推荐一款比PyCharm内置的补全功能还强大的自动补全工具——Kite。为什么说它更强大呢?因为它是使用AI推测你要输入的代码内容,然后向你提供补全选项。
kite由服务程序和PyCharm插件组成。点此下载kite的安装包。
- 安装过程中,Kite飞越代码海洋,来到你的电脑中:
- 安装完成后,你需要使用邮件登录,当然,你也可以像我一样选择
Continue without email
- kite自动检测你安装的编辑器,为你安装好插件。即使你在安装完kite之后又安装了新的编辑器,kite也会检测到并帮你把插件安装好。
- 安装了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’】
- 第二种方法比较复杂,但可以应对诸如输入启动参数等情景。
- 在菜单栏中点击【Add Configuration】
- 在弹出窗口中根据要调试的文件类型,选择一个模板
- 根据这实际情况填写如下参数:
- Script Path:要启动的脚本路径
- Parameters: 要传递给脚本的参数
- 点击【Apply】和【OK】
- 在菜单栏中点击【Add Configuration】
无论用哪种方法,下次启动调试时都可以直接点击工具栏上的按钮启动调试:
2.5.1 断点调试
调试之前,首先要打断点,程序运行到断点所在的代码行时,PyCharm会中断。
我们在第23行的行号后点击左键:
如果想改变断点的属性,如是否可用,添加中断条件,可以断点处点击右键:
启动调试后,PyCharm发生了中断,并标记出代码执行到了哪一行:
中断后,PyCharm下方在Debug窗口如下:
-
调试工具栏
调试工具栏有多个按钮,从上到下依次为:- 重启调试
- 继续运行到下一断点
- 中断
- 停止调试
- 查看所有断点
- 禁用/启用所有断点
-
单步调试工具栏
单步调试工具栏有多个按钮,从左到右依次为:- 下一步(跳过函数调用)
- 下一步(进入调用的函数内)
- 下一步(如果当前行调用了自定义的函数,则进入;如果调用的函数为系统函数,则跳过)
- 下一步(强制进入调用的函数内)
- 跳出函数调用
- 执行到光标所在的行
- 异常评估
-
调试器与控制台切换
两个工具栏之间还有一块区域,可以在调试器与程序输出控制台之间进行切换 -
调用堆栈区
调用堆栈区显示函数调用列表,点击列表项可切换调用堆栈 -
变量监视区
可查看程序当前拥有的变量的值
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作业辅导员”。
来源:CSDN
作者:天元浪子
链接:https://blog.csdn.net/xufive/article/details/103491898