pycharm使用教程最详尽的PyCharm 实用教程




pycharm使用教程最详尽的PyCharm 实用教程

2022-07-21 2:24:46 网络知识 官方管理员

PyCharm是一种PythonIDE,可以帮助程序员节约时间,提高生产效率。那么具体如何使用呢?本文从PyCharm安装到插件、外部工具、专业版功能等进行了一一介绍,希望能够帮助到大家。

之前也没系统地介绍过PyCharm,怎样配置环境、怎样DeBug、怎样同步GitHub等等可能都是通过经验或者摸索学会的。在本文中,我们并不会提供非常完善的指南,但是会介绍PyCharm最主要的一些能力,了解这些后,后面就需要我们在实践中再具体学习了。

机器之心的读者应该非常了解JetBrains开发的PyCharm了,它差不多是Python最常用的IDE。PyCharm可以为我们节省大量时间,它能够管理代码,并完成大量其他任务,如debug和可视化等。

本文将介绍:

  • PyCharm安装

  • 在PyCharm中写代码

  • 在PyCharm中运行代码

  • 在PyCharm中进行代码debug和测试

  • 在PyCharm中编辑已有项目

  • 在PyCharm中搜索和导航

  • 在PyCharm中使用版本控制

  • 在PyCharm中使用插件和外部工具

  • 使用PyCharmProfessional功能,如Django支持和科学模式

本文假设读者熟悉Python开发,且计算机中已安装某个版本的Python。该教程将使用Python3.6版本,屏幕截图和demo均来自macOS系统。由于PyCharm可在所有主流平台上运行,读者在其他系统中会看到略微不同的UI元素,可能需要调整某些命令。

PyCharm安装

本文将使用PyCharmCommunityEdition2019.1版本,该版本免费且可在所有主流平台上使用。只有最后一部分「PyCharmProfessional功能」使用的是PyCharmProfessionalEdition2019.1版本。

推荐使用JetBrainsToolboxApp安装PyCharm。使用该App,你可以安装不同的JetBrains产品或者同一产品的不同版本,并在必要的情况下更新、回滚和轻松删除任意工具。你还可以在恰当的IDE及版本中快速打开任意项目。

ToolboxApp安装指南,参见JetBrains官方文档:https://www.jetbrains.com/help/pycharm/installation-guide.html#toolbox。

该App会根据你的操作系统提供合适的安装说明。如果它无法无法准确识别系统,你可以在右上角的下拉列表中找到合适的系统。

pycharm使用教程(最详尽的PyCharm实用教程)(1)

安装成功后,启动该app并接受用户协议。在Tools选项下,你可以看到一个可用产品列表。从中找到PyCharmCommunity,并点击Install。

好啦,现在你的机器上已经安装PyCharm了。如果不想使用Toolboxapp,你可以单独安装PyCharm。

启动PyCharm,你将看到导入设置弹窗。PyCharm会自动检测出这是首次安装,并为你选择「Donotimportsettings」选项。点击OK,之后PyCharm会让你选择键盘映射(keymapscheme)。保留默认设置,点击右下角的「Next:UIThemes」:

pycharm使用教程(最详尽的PyCharm实用教程)(2)

PyCharm将询问选择深色模式Darcula还是浅色模式。你可以选择自己喜欢的模式,并点击「Next:LauncherScript」:

pycharm使用教程(最详尽的PyCharm实用教程)(3)

本教程将使用深色模式Darcula。

在下一个页面上,直接保留默认设置,并点击「Next:Featuredplugins」,这时PyCharm将展示可用插件列表。点击「StartusingPyCharm」,现在你可以写代码了!

在PyCharm中写代码

在PyCharm中,你可以在「项目」中执行任意操作。因此,首先你需要创建一个项目。

安装和打开PyCharm后,你会看到欢迎页面。点击「CreateNewProject」,出现「NewProject」弹窗:

pycharm使用教程(最详尽的PyCharm实用教程)(4)

指定项目位置,打开ProjectInterpreter列表,选择创建新的项目解释器或者使用已有的解释器。选择「Newenvironmentusing」,打开其右方的下拉列表,选择Virtualenv、Pipenv或Conda。这些工具可以为不同项目单独创建Python环境,从而分别保存不同项目所需的依赖项。

你可以选择其中任意一个,本教程使用的是Virtualenv。选择后,指定环境位置,从Python解释器列表中选择要安装在系统中的baseinterpreter。通常,保持默认设置即可。下面有两个可选框:在新环境中继承全局包环境、令当前环境可以用其它所有项目,两个都不要选。

点击右下角的「Create」,创建新项目:

pycharm使用教程(最详尽的PyCharm实用教程)(5)

屏幕上出现「TipoftheDay」弹窗,在每次启动时PyCharm通过该弹窗提供trick。关掉该弹窗。

现在我们可以开始新的Python程序了。如果你使用的是Mac系统,使用Cmd+N键;如果你使用的是Windows或Linux系统,使用Alt+Ins键。然后选择PythonFile。你也可以在菜单中选择File→New。将新文件命名为guess_game.py并点击OK。你将看到如下PyCharm窗口:

pycharm使用教程(最详尽的PyCharm实用教程)(6)

至于测试代码,我们来快速写一个简单的猜谜游戏,即程序选择一个数字让用户来猜,在每一次猜测时,程序将告诉用户他猜的数字比神秘数字大还是小,用户猜中数字时游戏结束。以下是该游戏的代码:

pycharm使用教程(最详尽的PyCharm实用教程)(7)

直接键入上述代码,而不是复制粘贴。你会看到如下画面:

pycharm使用教程(最详尽的PyCharm实用教程)(8)

如上图所示,PyCharm提供IntelligentCodingAssistance功能,可以执行代码补全、代码检查、错误高亮显示和快速修复建议。比如键入main并点击tab键,PyCharm会自动补全整个main从句。

此外,如果你在条件句前忘记键入if,在该句子最后增添.if并点击Tab键,PyCharm将修复该if条件句。该用法同样适用于True.while。这即是PyCharm的PostfixCompletion功能,它可以帮助用户减少退格键使用次数。

在PyCharm中运行代码

现在你已经编码完成该游戏,可以运行了。

该游戏程序有三种运行方式:

  1. 在Mac系统中使用快捷键Ctrl+Shift+R,在Windows或Linux系统中,使用快捷键Ctrl+Shift+F10。

  2. 右键单击背景,从菜单中选择「Run『guess_game』」。

  3. 由于该程序具备__main__从句,你可以点击__main__从句左侧的绿色小箭头,选择「Run『guess_game』」。

使用以上任一方式运行该程序,窗口底部会出现终端面板(Terminalpane),显示你的代码输出结果:

pycharm使用教程(最详尽的PyCharm实用教程)(9)

你可以玩一下这个游戏,看看自己能否猜中数字。(专业建议:从50开始猜。)

在PyCharm中进行代码debug

找到神秘数字了吗?如果找到了,你可能会看到一些奇怪的东西:程序没有打印出祝贺信息和显示退出按钮,而是重新开始了。这就是bug所在。要想发现程序重新开始的原因,你需要debug。

首先,点击第8行代码左侧的空白区域,设置断点:

pycharm使用教程(最详尽的PyCharm实用教程)(10)

断点即程序运行到这一行时会自动停止,你可以探索断点处之后的代码有什么错误。接下来,从以下三种方式中选择一种开始debug:

  1. 在Mac系统中使用Ctrl+Shift+D键,在Windows或Linux系统中使用Shift+Alt+F9键。

  2. 右键单击背景,选择「Debug『guess_game』」。

  3. 点击__main__从句左侧的绿色小箭头,选择「Debug『guess_game』」。

之后,你将看到底部出现Debug窗口:

pycharm使用教程(最详尽的PyCharm实用教程)(11)

按照下列步骤执行程序debug:

  1. 注意当前行被蓝色高亮显示。

  2. Debug窗口显示random_int及其值。记录该数字。(上图中该数字为85。)

  3. 点击F8执行当前代码行,并执行到下一行代码。如有必要,你也可以使用F7跳转到当前行内的函数。随着你继续执行语句,变量的变化将自动呈现在Debugger窗口。

  4. 注意Debugger标签右侧有一个Console标签。Console标签和Debugger标签相互独立。你可以在Console中与程序进行交互,在Debugger中执行debug动作。

  5. 转向Console标签,进入猜测过程。

  6. 键入左侧Debugger标签中显示的数字,点击Enter键。

  7. 转回Debugger标签。

  8. 再次点击F8,计算if语句。注意现在你在第14行。为什么不是第11行呢?因为第10行的if语句被计算为False。那么为什么当你键入数字后它算出来为False了呢?

  9. 仔细看第10行,注意我们在对比user_guess和一个错误的项。我们应该对比用户猜测的数字和random_int,但此处我们对比的是randint(从random包导入的函数)。

  10. 将randint更改为random_int,按照同样的步骤重新开始debug。你会发现,这一次到达的是第11行,第10行算出来为True:

pycharm使用教程(最详尽的PyCharm实用教程)(12)

恭喜你,bug被修复了!

在PyCharm中进行代码测试

不经单元测试的应用都不可靠。PyCharm可以帮助你快速舒适地写单元测试并运行。默认情况下,unittest被用作测试运行器,而PyCharm还支持其他测试框架,如pytest、nose、doctest、tox和trial。例如,你可以按照以下步骤为项目选择pytest测试运行器:

  1. 打开Settings/Preferences→Tools→PythonIntegratedTools设置对话框。

  2. 在默认测试运行器字段中选择pytest。

  3. 点击OK保存该设置。

本教程的示例将使用默认测试运行器unittest。

在同一个项目中,创建文件calculator.py,并将以下Calculator类放入该文件:

pycharm使用教程(最详尽的PyCharm实用教程)(13)

PyCharm使得为已有代码创建测试变得轻而易举。打开calculator.py文件,执行以下步骤中的任意一个:

  • 在Mac系统中使用Shift+Cmd+T键,在Windows或Linux系统中使用Ctrl+Shift+T。

  • 右键单击该类的背景,选择「GoToandTest」。

  • 在主菜单中吗,选择Navigate→Test。

选择「CreateNewTest…」,得到以下窗口:

pycharm使用教程(最详尽的PyCharm实用教程)(14)

Targetdirectory、Testfilename和Testclassname这三项均保留默认设置。选中上图中两种需要测试的方法并点击OK。好了!PyCharm自动创建文件test_calculator.py,并在其中创建了以下stubtest:

pycharm使用教程(最详尽的PyCharm实用教程)(15)

使用以下方法中的任意一个运行测试:

  • 在Mac系统中使用Ctrl+R键,在Windows或Linux系统中使用Shift+F10键。

  • 右键单击背景,选择「Run『Unittestsfortest_calculator.py』」。

  • 点击测试类名称左侧的绿色小箭头,选择「Run『Unittestsfortest_calculator.py』」。

你将看到底部出现测试窗口,所有测试均失败:

pycharm使用教程(最详尽的PyCharm实用教程)(16)

注意,左侧是测试结果的层次结构,右侧是终端的输出。现在,将代码更改成以下代码,实现test_add:

pycharm使用教程(最详尽的PyCharm实用教程)(17)

重新运行测试,你会看到一个测试通过了,另一个则失败。按照如下操作探索不同选项,来展示已通过测试和被忽略测试,按照字母顺序对测试进行排序,以及按照时长对测试进行排序:

pycharm使用教程(最详尽的PyCharm实用教程)(18)

注意,上图中的sleep(0.1)方法的作用是使其中一个测试变慢,以便按时长对测试进行排序。

在PyCharm中编辑已有项目

单文件项目非常适合作为示例,但你通常需要处理较大的项目。这部分将介绍如何使用PyCharm处理较大项目。

为了探索PyCharm以项目为中心的特征,你将使用Alcazarweb框架(该框架用于学习目的)。在本地复制该repo(地址:https://realpython.com/optins/view/alcazar-web-framework/)。

当你在本地已有项目时,使用以下方法中的任意一个在PyCharm中打开项目:

  • 在主菜单中点击File→Open。

  • 在欢迎页面点击Open。

之后,在计算机中找到包含该项目的文件夹,并打开。

如果该项目包含虚拟环境,PyCharm将自动使用该虚拟环境,并将它作为项目解释器。

如果你需要配置不同的虚拟环境virtualenv,在Mac上打开Preferences,或在Windows或Linux系统中使用Ctrl+Alt+S打开Settings,找到Project:ProjectName。打开下拉列表,选择ProjectInterpreter:

pycharm使用教程(最详尽的PyCharm实用教程)(19)

从下拉列表中选择virtualenv。如果没有要选择的项,则点击下拉列表右方的设置按钮选择Add…。其余步骤和创建新项目的步骤相同。

在PyCharm中搜索和导航

在大项目中,我们很难记住每个事物的位置,因此快速导航和搜索非常重要。PyCharm可以提供这些功能。接下来,我们使用上一节中打开的项目,实践以下快捷键:

  • 在当前文件中搜索代码段:在Mac系统中使用Cmd+F键,在Windows或Linux系统中使用Ctrl+F键。

  • 在整个项目中搜索代码段:在Mac系统中使用Cmd+Shift+F键,在Windows或Linux系统中使用Ctrl+Shift+F键。

  • 搜索类:在Mac系统中使用Cmd+O键,在Windows或Linux系统中使用Ctrl+N键。

  • 搜索文件:在Mac系统中使用Cmd+Shift+O键,在Windows或Linux系统中使用Ctrl+Shift+N键。

  • 如果你不知道要搜索的是文件、类还是代码段,则搜索全部:按两次Shift键。

导航可使用以下快捷键:

  • 前往变量的声明:在Mac系统中使用Cmd键,在Windows或Linux系统中使用Ctrl键,然后单击变量。

  • 寻找类、方法或文件的用法:使用Alt+F7键。

  • 查看近期更改:使用Shift+Alt+C键,或者在主菜单中点击View→RecentChanges。

  • 查看近期文件:在Mac系统中使用Cmd+E键,在Windows或Linux系统中使用Ctrl+E键,或者在主菜单中点击View→RecentFiles。

  • 多次跳转后在导航历史中前进和后退:在Mac系统中使用Cmd+[/Cmd+]键,在Windows或Linux系统中使用Ctrl+Alt+Left/Ctrl+Alt+Right键。

更多细节,参见官方文档:https://www.jetbrains.com/help/pycharm/tutorial-exploring-navigation-and-search.html。

PyCharm中的版本控制

版本控制系统(如Git和Mercurial)是现代软件开发世界中最重要的工具之一。因此,IDE必须支持版本控制。PyCharm在这方面做得很好,它集成了大量流行的版本控制系统,如Git(和Github(https://github.com/))、Mercurial、Perforce和Subversion。

注:以下示例中使用的版本控制系统为Git。

配置版本控制系统(VCS)

要想实现VCS集成,你需要在顶部菜单点击VCS→VCSOperationsPopup…,或者在Mac系统中使用Ctrl+V键,在Windows或Linux系统中使用Alt+`键。选择EnableVersionControlIntegration…,你将看到以下窗口:

pycharm使用教程(最详尽的PyCharm实用教程)(20)

从下拉列表中选择Git,点击OK,这样你就为项目设置好了VCS。(注意,如果你打开的已有项目已经具备版本控制系统,PyCharm将会发现并自动使用该版本控制系统。)

这时如果你前往VCSOperationsPopup…,你会发现一个不同的弹窗,它具备选项gitadd、gitstash、gitbranch、gitcommit、gitpush等等:

pycharm使用教程(最详尽的PyCharm实用教程)(21)

如果你找不到所需要的选项,你可以在顶部菜单中点击VCS,选择Git,在这里你可以创建和查看pullrequest。

提交和冲突处理

这是PyCharm中VCS集成的两大特征,我个人经常使用并且非常喜欢。假如你完成了工作,打算提交,前往VCS→VCSOperationsPopup…→Commit…,或者在Mac系统中使用Cmd+K键,在Windows或Linux系统中使用Ctrl+K键。你将看到如下窗口:

pycharm使用教程(最详尽的PyCharm实用教程)(22)

在该窗口中,你可以:

  • 选择要提交的文件

  • 写下提交信息

  • 在提交前执行各项检查

  • 查看更改

  • 点击右下角Commit按钮旁边的箭头,选择CommitandPush…,从而一次性完成提交和push。

是不是感觉很神奇很迅速?特别是如果你以前经常通过命令行手动执行这些任务时。

团队合作中会出现合并冲突(mergeconflict)。当一个人对你正在处理的文件提交更改时,你们二人更改了同一行导致更改重叠,这时VCS无法决定选择你的更改还是队友的更改。那么你可以使用以下箭头和符号来解决这个问题:

pycharm使用教程(最详尽的PyCharm实用教程)(23)

看起来很奇怪,我们很难分辨应该删除哪些更改、保留哪些更改。不要怕,PyCharm来了!它可以用更好、更简洁的方法解决冲突。在顶部菜单中前往VCS,选择Git,然后选择Resolveconflicts…。选择存在冲突的文件,点击Merge,出现以下窗口:

pycharm使用教程(最详尽的PyCharm实用教程)(24)

在左侧列中,你可以查看自己做的更改。在右侧列中,可以查看队友做的更改。而中间列则显示结果。存在冲突的代码行被高亮显示,你可以在它们旁边看到X和>>/<<。点击箭头表示接受更改,点击X则表示拒绝更改。解决所有冲突后,点击Apply按钮:

pycharm使用教程(最详尽的PyCharm实用教程)(25)

在上图中,对于第一个冲突行,作者选择拒绝自己的更改,接受队友的更改。而在第二个冲突行中,作者接受了自己的更改,拒绝了队友的更改。

使用PyCharm中的VCS集成还可以执行很多操作。详情参见https://www.jetbrains.com/help/pycharm/version-control-integration.html。

在PyCharm中使用插件和外部工具

在PyCharm中你可以找到开发所需的几乎所有功能。如果没找到,那么很可能存在一个插件,向PyCharm提供你需要的功能。例如,它们可以:

  • 添加多语言和多框架支持

  • 使用快捷键提示(shortcuthint)、文件监视器(filewatcher)等提升你的生产效率

  • 利用代码练习,帮助你学习新的编程语言

例如,IdeaVim插件向PyCharm添加Vim模拟。如果你喜欢Vim,这个插件可以实现不错的结合。

MaterialThemeUI插件可将PyCharm的外观改变为MaterialDesign的外观:

pycharm使用教程(最详尽的PyCharm实用教程)(26)

Vue.js插件使PyCharm支持Vue.js项目。Markdown插件使得在IDE内可以编辑Markdown文件,并实时预览渲染后的HTML。

在Mac系统上点击Preferences→Plugins,在Windows或Linux系统中点击Settings→Plugins,你可以在Marketplace标签下找到和安装所有可用插件:

pycharm使用教程(最详尽的PyCharm实用教程)(27)

如果仍然没找到所需插件,你甚至可以自己开发一个。

如果你找不到合适的插件,又不想自己开发,因为PyPI上有可用的包,你可以将这个包作为外部工具添加到PyCharm。以代码分析器Flake8为例。

首先,在所选Terminalapp中键入pipinstallflake8,从而在虚拟环境中安装Flake8。或者也可以使用PyCharm集成的Terminal:

pycharm使用教程(最详尽的PyCharm实用教程)(28)

在Mac系统上点击Preferences→Tools,在Windows或Linux系统中点击Settings→Tools,选择ExternalTools。然后点击底部(1)处的+按钮。在弹出的窗口中,输入细节并在两个窗口中点击OK,如下图所示:

pycharm使用教程(最详尽的PyCharm实用教程)(29)

上图中,Program(2)指Flake8,你可以在虚拟环境文件夹(bin)中找到它。Arguments(3)表示你想用Flake8分析的文件。Workingdirectory表示项目目录。

你可以把这里所有项的绝对路径写死,但这就意味着你无法在其他项目中使用该外部工具,只能在一个项目中针对一个文件使用该工具。

因此你需要使用Macros。它是$name$格式的变量,根据语境而变化。例如,当你编辑first.py时,$FileName$为first.py,当你编辑second.py时,$FileName$为second.py。你可以查看它们的列表,点击InsertMacro…按钮将其中一个插入。此处你使用了macros,它们的值会根据你目前处理的项目而改变,Flake8将继续准确执行其工作。

要想使用它,你需要创建文件example.py,并在其中写入以下代码:

pycharm使用教程(最详尽的PyCharm实用教程)(30)

上述代码故意破坏了Flake8的一些规则。右键单击文件背景,选择ExternalTools→Flake8。Flake8分析结果将出现在窗口底部:

pycharm使用教程(最详尽的PyCharm实用教程)(31)

为了使效果更好,你可以为其添加快捷键。在Mac系统中选择Preferences,在Windows或Linux系统中选择Settings。然后,点击Keymap→ExternalTools→ExternalTools。双击Flake8,选择AddKeyboardShortcut,出现以下窗口:

pycharm使用教程(最详尽的PyCharm实用教程)(32)

上图中,快捷键是Ctrl+Alt+A(本教程使用该快捷键)。你可以在文本框中添加喜欢的快捷键,然后在两个窗口中点击OK。然后,你就可以用该快捷键,在Flake8的帮助下分析目前在处理的文件了。

PyCharmProfessional功能

PyCharmProfessional是PyCharm的付费版本,具备更多开箱即用的功能和集成。这部分将概览其主要功能,以及官方文档链接(其中详细介绍了每一项功能)。记住,以下功能在PyCharmCommunity版本中均不可用。

Django支持

Django是最流行和最受喜爱的Pythonweb框架,PyCharm对Django提供广泛的支持。要确保对Django的支持,需要执行以下步骤:

  1. 在Mac系统中打开Preferences,在Windows或Linux系统中打开Settings。

  2. 选择LanguagesandFrameworks。

  3. 选择Django。

  4. 检查复选框EnableDjangosupport。

  5. 应用更改。

现在确保了对Django的支持,你在PyCharm中的Django开发之旅将轻松很多。具体而言在创建项目时,你会得到一个专用的Django项目类型。这表示,当你选择该类型时,你将拥有所有必要文件和设置。这等同于使用django-adminstartprojectmysite。

你也可以在PyCharm内直接运行manage.py命令。目前支持的Django模板,包括以下一些:

  • 语法和错误高亮显示

  • 代码补全

  • 导航

  • block名称补全

  • 自定义标签和过滤器补全

  • 标签和过滤器的快速文档

  • 模板debug能力

除此之外,我们还可以在其他Django部分(如视图、URL和模型)中执行代码补全、对DjangoORM提供代码追踪支持(codeinsightsupport)、对Django模型提供模型依赖项关系图。

更多细节,参见官方文档:https://www.jetbrains.com/help/pycharm/django-support7.html。

数据库支持

现代数据库开发是一个复杂的任务,需要多个支持系统和工作流。这也是JetBrains开发独立IDEDataGrip的原因。DataGrip是独立于PyCharm的产品,二者的应用场景和授权都不相同。

但幸运的是,通过DatabasetoolsandSQL插件(该插件默认开启),PyCharm可以支持DataGrip中的所有特性。在该插件的帮助下,你可以查询、创建和管理数据库,不管数据库在本地、服务器,还是在云端。该插件支持MySQL、PostgreSQL、MicrosoftSQLServer、SQLite、MariaDB、Oracle、ApacheCassandra等。

关于该插件的更多用途,请查看文档:https://www.jetbrains.com/help/pycharm/relational-databases.html。

线程并发可视化(ThreadConcurrencyVisualization)

DjangoChannels、asyncio和近期框架(如Starlette(https://www.starlette.io/))表明异步Python编程正逐渐成为趋势。异步编程具备很多好处,但很难写,也很难debug。在此类案例中,ThreadConcurrencyVisualization就是医生,帮助你全面管理多线程应用并进行优化。

更多细节l。

Profiler

说到优化,profiling是另一种代码优化方法。profiling可以帮助你查看代码的哪一部分占用了最多的执行时间。profiler运行的优先级如下:

1.vmprof

2.yappi

3.cProfile

如果你没有安装vmprof或yappi,则运行标准cProfile。

科学模式

Python不仅是通用和web编程语言,由于NumPy、SciPy、scikit-learn、Matplotlib、Jupyter等库和工具的加持,Python成为数据科学和机器学习领域的最优工具。有了这些强大工具,你还需要一个强大的IDE来支持这些库所具备的绘图、分析等所有功能。

关于科学模式的更多详情

远程开发

很多应用出现bug的一个常见原因是,开发环境和生产环境不同。尽管在大多数情况下,开发时完美复制生产环境并不现实,但力求实现完美复刻是值得追寻的目标。

在PyCharm的帮助下,你可以使用另一台计算机(如LinuxVM)上的解释器对应用进行debug。这样,你就可以拥有与生产环境一样的解释器了,从而避免很多因开发环境和生产环境差异导致的bug。

结论

PyCharm是最好的Python开发IDE之一。它提供大量优势,帮助执行例行任务,从而节约大量时间。学完本教程,现在你知道如何利用PyCharm提高生产效率了吗?


发表评论:

最近发表
网站分类
标签列表