解决 Sublime Text 4 中 Python 无法运行的问题,以及交互界面无法弹出的问题

2021年5月21日,最新的 Sublime Text 4 上线了,升级后却有点糟心,原本开箱即用的 Python 被优化出了各种小毛病。

花了点时间一一修复,解决方法总结如下。

一、Python 无法运行([WinError 2] 系统找不到指定的文件)

[WinError 2] The system cannot find the file specified.
[cmd: ['py', '-u', 'C:\\Users\\Hsin\\Desktop\\test.py']]
[dir: C:\Users\Hsin\Desktop]
[path: xxx]
[Finished]

如果电脑中安装的是非官方的 Python 环境,在Ctrl+B运行Python程序的时候可能会遇到以上情况。

如,我的 Python 环境是 Miniconda(包括 Anaconda 也会有同样的问题,后面详细说),隔壁这位老哥的环境是 ArcGIS Pro,都不能成功运行。

问题来源于 Sublime Text 更新了调用 Python 的命令行指令:旧版本中调用的命令为python,而在新版中改为了py

(Sublime 的报错提示)
Sublime 的报错提示
(Sublime 的 Python 配置文件)
Sublime 的 Python 配置文件
py是个啥玩意儿?原来是 PEP 397 中提出的 Windows 特供版 Python Launcher,可以根据脚本开头的 shebang lines 自动切换该脚本的 Python 运行环境(比如自动切换 Python 2 还是 Python 3)。

看起来这个改进挺不错的,但是问题在于,前面说的那些第三方 Python 环境砍掉了这个功能,conda 的环境中根本没有py.exe这个文件,就导致了py命令无法被识别而报错。

解决方案

在 Python 的安装目录下,找到python.exe,复制到另一个地方,改名为py.exe,再拖回 Python 的安装目录。
在这里插入图片描述
注意,不要直接在根目录下新建python.exe的快捷方式然后改名,因为这样得到的文件全名其实是py.exe.lnk

以上方法其实是把原有的 Python 解释器给换了个皮,所以也不要用它去尝试 PEP 397 中给出的功能,当作一般的 Python 解释器去用就好了。

我也在 Sublime Forum 报告了以上问题,详情见此


二、Matplotlib 画图无法弹窗

这个问题还是由 Sublime 的命令行指令变更引起的。原本的命令行中的shell_cmd被修改为了cmd禁止了管道和重定向功能,导致 Matplotlib 以及依赖 Matplotlib 的相关库(比如 Pandas)的画图功能都无法正常实现,运行代码会无法弹出画图窗口。

解决方案

我尝试过把配置文件的cmd都改回shell_cmd,但是还有问题,原因不明。

目前的解决方案是在 Sublime 的 Python 配置文件中添加一行"shell": true

  1. 打开 Sublime Text 根目录下的Packages文件夹;
  2. 找到Python.sublime-package,并用压缩软件打开(如 360 压缩);
  3. 用文本文件的方式打开压缩包里面的Python.sublime-build文件,在最后添加"shell": true
  4. 将更改保存在压缩文件中并退出。

最后你的Python.sublime-build应该是这样的:

{
	"cmd": ["python3", "-u", "$file"],
	"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
	"selector": "source.python",

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

	"windows": {
		"cmd": ["py", "-u", "$file"],
	},

	"variants":
	[
		{
			"name": "Syntax Check",
			"cmd": ["python3", "-m", "py_compile", "$file"],

			"windows": {
				"cmd": ["py", "-m", "py_compile", "$file"],
			}
		}
	],

	"shell": true	// 这里是添加的内容
}

需要注意的是,"shell": true的用法已经被 deprecated,在目前仍然可以使用,但是在将来的版本中可能会出现新的问题。

有关这个问题我也提交了一个 pull request,可供参考。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值