PyCharm 小知识系列 - 设置(基本概念)

版权声明:所有博客文章除特殊声明外均为原创,允许转载,但要求注明出处。

很多同学对 PyCharm 设置的直观理解就是打开 Settings 对话框看到的那一大堆东西。这样理解并没有错,但是在“盖子下面”其实并不是一个简单的平面式系统,而是一个层级式的复杂体系,有点类似于 Web 中的层叠样式表(CSS),同时还有其他一些鲜为人知的内容。本文将讲述这些概念和一些特殊的设置用法。

首先我们来了解一下系统菜单中和设置相关的内容,全都在这里了:

设置相关菜单

这里的 Import/Export 含义很明显,无需讲解。Export 时会显示一个对话框,允许你选择导出哪些内容。

导出设置

Setting Repository 可能比较少人知道的一项内容。这里的主要思想是:PyCharm 所有的设置默认都是放在本机上的,而在现在网络环境下,很多时候需要在机器间同步设置(比如希望家中/办公室的电脑使用相同配置,或者团队共享设置)。虽然通过文件导入/导出也可以实现,但还是不够方便快捷,也不符合云端化的潮流。所谓 Setting Repository 就是架设一个代码仓库作为设置的存放点,目前主要是 Git,支持 Github/Bitbucket 等主流类型。所有需要同步的机器都通过共享这个仓库来同步配置,这样只要有网络的地方都能够自动同步,免去了用 U 盘拷来拷去的麻烦,而且以后有任何设置变更都可以自动同步。

需要说明的是,Setting Repository 是通过插件实现的,该插件在所有 JetBrains 产品中默认都是启用的。如果你找不到这个菜单,可以到 Settings -> Plugins 里找找这个插件是不是被关闭了。如果你不需要这个功能,并且担心它消耗系统资源的话,也可以把该插件禁用。 Settings Repository 插件

如果你希望使用 Setting Repository 的话,请按照如下步骤:

  • 到代码管理网站网站上(比如 Github)新建一个仓库;
  • 提交文件需要网站的授权,因此还要在网站上申请一个 Access token。这一步操作取决于各网站,对于 Github 来说,请参考 这里的介绍
  • 在你自己的一台机器上设置好 PyCharm 环境,然后将将设置推送到代码库;
  • 对于要同步的其他机器,将设置从代码库拉到本地环境。

上述前两步需要在代码库网站上完成,这里就不赘述了,有 Github 使用经验的同学应该很轻松搞定。实际使用的时候提醒同学,有两个地方需要注意一下: * Github 的 Access token 只会在申请成功后显示一次,请马上记下来,否则以后就看不到内容了(当然万一出错也不怕,可以重新再申请); * Github 的 access token 似乎有一个延迟,不是马上就可以使用,而是大概需要等半分钟到1分钟时间。如果在后续步骤中提交 access token 以后发生错误,请耐心等待一段时间再重试。

代码库搞定以后,从 PyCharm 菜单 File -> Settings Repository 打开设置对话框,如下图:

设置对话框

在对话框中输入远程仓库的地址。如果你想把设置推送到仓库,就选 Overwrite Remote;如果要从仓库拉取配置,就选 Overwrite Local。这里还有第三个选项 Merge 可以将远程/本地设置合并,但这样比较容易出现冲突,所以我还是建议你尽量单向操作,要么 Push 要么 Pull,不要混在一起。

选择 Overwrite Local/Remote 以后界面会提示你输入网站的 access token,把前面申请到的填上去,稍等片刻就行了。

此外,在 Settings 里面也有专门的配置去微调 Setting Repository 的行为,如下图:

Setting Repository 设置

如果选中 Auto Sync 的话,那么每次打开/关闭 PyCharm 时系统会自动同步设置。这个操作是异步执行的,一般不会影响界面速度,如果你确实在意的话,可以关闭 Auto Sync。

下面还有一个列表允许你设置 Readonly sources。所谓 Readonly sources,按照 JetBrains 官方介绍,包括 live templates, file templates, schemes, deployment options,由于它们不允许覆盖或合并,所以只能以只读的方式同步。这个功能应该使用的同学很少,如果想要深入了解的话,请参考下列官方文档:

最后我们来说明设置的层次关系:Settings 和 Default Settings。

使用 PyCharm 的同学应该都很熟悉 Settings,但就在它下面的 Default Settings(默认设置),却显得默默无闻,很多同学甚至都没有注意到过它的存在。

上文说过,PyCharm 的设置是一个层级式的系统。其实这种设计是存在于很多软件中的普遍的设计模式,例如 Git 的设置也有系统/用户/仓库三级。再进一步说,编程语言中也普遍存在这种设计,例如变量的作用域也是一个层级式的关系。这种设计带来了很大的灵活性,但也会让一些初学者犯晕。

PyCharm 的设置默认有两级,即菜单中的 Settings 和 Default Settings,你在 JetBrains 的文档中还会看到 Project Settings 和 IDE Settings 的说法,它们实际上是同一个意思,可以互换使用。某些设置(比如字体)会有更多的设置层次,这些我们后面有机会再讲。

  • Settings (Project Settings) 作用范围是当前项目,其配置信息保存在 <项目目录>/.idea 目录下。(带. 的目录在 Unix 系统中默认是隐藏的)
  • Default Settings (IDE Settings) 作用范围是当前用户的所有项目,其配置信息保存在 <用户目录>/.PyCharmXXXX.X/config 下面,其中 XX 表示 PyCharm 版本。例如在我的 Ubuntu 系统上,默认配置目录是 /home/yuhao/.PyCharm2017.2/config。
  • 项目设置会从默认设置继承。如果在项目设置留空,则使用默认设置;如果项目级别和默认级别都设置了,则使用项目级别作为当前设置。

这里要特别提到 PyCharm 的一个重要的设置项:Project Interpreter,即项目使用的 Python 解释器,如下图所示。

默认设置

之所以说它很重要,因为许多系统——特别是 Linux——会同时安装 Python2 和 Python3,如果你同时还安装了其他环境比如 Anaconda, 那么这里的选项会更多。PyCharm 会默认为你选择一个,但这未必是你希望的那个,很多同学就是没有注意到这一点,才会遇到各种莫名其妙的问题。我建议你养成这样的习惯:在创建一个新项目后,马上去检查一下设置里面 Project Interpreter 是否正确,再去编写代码。

此外,PyCharm 在运行程序时只认它自己的 Project Interpreter 设置,而从命令行运行 Python 的结果取决于系统路径的设置,这两个运行环境是不同的。有些同学发现 PyCharm 运行结果和命令行运行的结果不一样,觉得奇怪,也是因为不明白 PyCharm 的设置原理导致的。请务必理解这一点。

严格来说,Python 解释器的设置还有第三个级别—— Run Configuration。不过一般来说,同一个项目的多个运行配置都会使用同一个运行环境,需要同时在 Python2/Python3下运行的项目是少数。所以你还是应当首先保证项目级别的解释器设置正确,这样当你新建一个 Run Configuration 的时候,它会从项目级别继承解释器设置,免去你对于每个运行配置再次修改的麻烦。