sublime text3 python编程环境配置踩坑记录

目录

踩坑记录

相信使用sublimetext3来配置编程环境的人都是深受各种IDE的龟速启动之苦。虽说现在VScode性能和效果也是相当的好,但是喜欢定制和个性化的人还是愿意尝试sublimetext这种类型的。ST的各种功能强大的插件足以支持正常的开发活动,当然特别炫酷的效果可能需要高手自己定制写插件。但是在安装使用插件的过程中,有一些坑让人非常难受,下面是相关的记录(ST版本号:version 3.2.2)。

1.插件的安装

  1. 在ST上在线安装:点击Preference->Package Control,找到package control:install package并点击,可以通过输入pcip这样的简写迅速找到。然后输入要下载的插件并点击安装耐心等待即可。这种方式会从Preference->Package Settings->Package Control->settings里面的那个配置文件里的channel对应的url上下载一个json文件,该文件包括了ST支持的各种插件的包括下载地址在内的安装信息。该json文件有一个有效期,在有效期内不会重新下载。过了有效期会重新下载,然后就会在点击package control:install package的时候因为要下载该json文件而停留好几秒,给人卡顿的感觉。而且最坑的是这个有效期根据本人体验,比较短,没安装两个插件又要重新下载json文件了。这样的好处是能保证插件信息是最新的,但如果没有对最新版插件的追求的话,建议自行从默认url里下载下来放到本地,然后将默认url改为本地的地址。以后如果发现插件信息过时了(比如下载地址更新了,但这个概率非常小),再改回默认url或者重新手动下载json文件。
  2. 本地离线安装: 离线安装是指自己从GitHub上将该插件包下载下来然后放到ST的package目录上(点击Preferences->browse packages就能知道在哪里),然后重启ST即可。我们从package control的官网上搜索要下载的插件,点击查看详细信息,这里会告诉你该插件的安装方式。一般都会提供在线安装和离线安装两种方式,其中我们要的GitHub地址就在这个详细信息里。有的插件使用在线安装方式会一直出错,这个时候就需要离线安装的方式。 在线安装出错的原因应该有这么一条:上文提到的json文件里各种插件的下载地址非常杂乱,而且有相当一部分都是国外的服务器,在国内的大环境下有的确实……另外我发现ST插件没有国内的镜像。这个时候从GitHub上下载就很奈斯了。

2. sublimeREPL ipython启动异常之bad file descriptor

这个是ST的一个脚本解释器。ST上运行python脚本是无法手动输入的。而sublimeREPL提供了一个交互式的运行环境,可以输入,同时支持python,ipython交互式运行环境。 但是,我安装好之后启动ipython启动不了。有三个报错,前两个报错均是版本问题。比如 The IPython.config package has been deprecated since IPython 4.0. You should import from traitlets.config instead.。找到sublimeREPL安装的包,里面有config文件夹,进入后找到python,进去发现ipy_repl.py。查看源代码,按照报错提示,将过时的包换成报错里面推荐用的包即可。网上还有人写了个适配各种ipython版本的代码,有需要的可以自行搜索或者自行修改。
但是除了该报错外,我还出现了bad file descriptor!,报错的文件名还是一个不存在的文件名,我都不知道代码是如何生成我的文件系统里不存在的地址的。理论上插件应该是获取系统环境变量然后进行一系列操作。查看源码,网上各种搜索无果,直到在遇到某个评论区看到有人说他出现问题的原因是系统用户名是中文这几个字,虽然和我的并不是同一个问题,只是个别关键字一样,但我还是试了一试,最后发现这个奇怪的问题就解决了……

3. Anaconda插件的python builder运行时中文输出乱码

这里的Anaconda是指将ST变成一个IDE的插件(官方介绍是这么说的),虽然和另一个Anaconda重名了。我是为了它的代码提示等功能。但是最后我用的时候发现,用Anaconda python Builder构建来运行我的python脚本的时候输出的中文是乱码。但我用ST自带的python来运行的话输出的中文就不是乱码。这就很奇怪。它们启动的都是我系统上的python解释器,但是一个能用,一个不能用。anaconda的那个报的错是gbk不能……非常疑惑为什么anaconda的pythonbuilder会使用gbk编码,难道是用的系统默认编码?通过查看anaconda插件源码,最后找到了解决方案:
ST有自己的定义项目的方式,会生成一个xxx.sublime-project的文件,对于python项目,该文件定义了项目里的python脚本执行的相关配置。而anaconda包里面,anaconda_lib\builder\python_builder.py里面唯一的类AnacondaSetPythonBuilder,就是定义这个构建信息的。发现它从templates\python_build.tpl文件里面加载模板信息,而它所传入的仅仅是python解释器的路径信息。查看python_build.tpl模板文件:

{
	"name": "Anaconda Python Builder",
	"shell_cmd": "\"${python_interpreter}\" -u \"$file\"",
	"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
	"selector": "source.python",
}

我们要做的就是修改它,加入编码信息。

"env": {"PYTHONIOENCODING": "utf-8"}

这个是ST内置的python的builder里面定义的。需要查看的可以打开ST安装目录下的packages,找到python的,然后备份一份,将备份的后缀名sublime-package修改为rar(Windows)然后解压打开,会找到一个后缀名包含build的可疑文件,打开它就能发现这就是要找的ST内置的python builder的配置文件。

上一篇:Python的环境安装


下一篇:使用sublime text3搭建Python编辑环境