Linux与Windows下Shebang的执行

起初是看到《Python编程:从入门到实践(第2版)》新增内容,本来是想试验一下Pyhton3.8 以上版本的 f 字符串功能,但过程中学到了各种各样的东西就记录一下。本片为第一篇 Shebang 相关的文章。

Shebang

Shebang 就是放在 .py 文件头的 #! /usr/bin/env python3.10 这一行,用来指定解释器的路径以及版本。

Linux

起初是没打算在电脑上装新版本 Python 的,所以借用的在线 Python 环境——谷歌的 Colaboratory(以下简称Colab) ,Colab提供的是 Ubuntu 环境。

Linux 下 Shebang 的执行并没有什么大问题。需要注意的有两件事,一个是行结尾的格式(实际上是 Colab 的问题);一个是执行文件时命令选择 ./<filiname> 而不是 python <filename>

以下为 Colab 上的操作流程:

首先安装 Pyhton3.10 和 dos2unix 。Colab 中保存的文件行结尾是 \r\n 格式,需要用 dos2unix 转换成 Unix 格式下的 \n
! 是在Colab 中运行 bash 命令的前缀,和 Shebang 中的 ! 本质相同。

!apt install python3.10
!apt install dos2unix

建立一个名为 test.py 的文件,内容如下:

#! /usr/bin/env python3.10
#-*- coding: UTF-8 -*-
import sys
print(sys.version)

先用 dos2unix 转换文本格式。
执行文件时使用 ./test.py 指令,不要使用 python test.py。后者会先选择默认解释器,再打开文件,Shebang 行就无法发挥作用。

!dos2unix test.py
!./test.py

输出如下:

3.10.1 (main, Dec 21 2021, 18:59:49) [GCC 7.5.0]

Windows

2.1. 命令行运行

在 Windows 的 Shell 中可以直接输入 py <filename>,Windows 下的 py 命令会先打开一个启动器,这个启动器在读到 #!usr/bin/env python 等格式的 Shebang 行时,并不会把 usr/bin/env 当作一个严格路径。

Pyhton 启动器 py.exe#! /usr/bin/env python3.10#!py -3.10#!python3.10 等指令都视为可执行的虚拟命令,并由启动器管理打开的解释器版本。Python官方文档:Shebang Lines

注:在 Windows 的 shell 中,仅Windows Store 安装的 Python 版本支持命令 python3.10。安装包版本下 pyhton 命令不支持指定 Python 版本,仅支持启动器命令 py -3.10

2.2. 编辑器运行

Windows 下的编辑器我用的是 VS Code,VS Code 下的 Python、Code Runner 插件都提供了代码运行功能。

Code Runner

Code Runner 插件目前无法识别 Linux 格式 Shebang。

解决方法一是禁用掉 Shebang,在设置中将 "code-runner.respectShebang" 设为 false

解决方法二是使用 Windows 命令行格式 Shebang,#!py -3.10

Pyhon插件

首先将设置中的默认解释器路径从 python 改为 py ("python.defaultInterpreterPath": "py"),和 Linux 相同,python 指令会先选择解释器再执行文件,py 指令在 Windows 环境下会先打开启动器读取 Shebang 行。

然后按键Ctrl/Command + Shift + P打开 VS Code 命令,输入python.setInterpreter,选择 【Python:选择解释器】->【<当前工作区名称>】->【使用默认Pyhton解释器路径】(应显示为 py)。

Python 插件同时支持 Linux 和 Windows 格式的 Shebang:#! /usr/bin/env python3.10#!py -3.10

注:本质上, VS Code 两个插件的区别在于:Code Runner 插件实际上是先将 Shebang 行交给了 shell 运行,因而仅支持 Windows 下 shell 可识别的命令;
而 Python 插件是先打开启动器 py.exe(通过设置),将 Shebang 行(以及整个文本)交给了启动器运行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值