What's the Python Launcher?
Look! Python launcher
你可能在他处见到过这鬼东西,when you install or uninstall python, and so on。那么你肯定与我一样对这个鬼东西起了一丝"xing"趣!


question
由于Python2.x版本的脚本和Python3.x版本的脚本在语法上会有不兼容的情况。那么,必须使用不同的策略来允许【py】脚本使用基于脚本指定的Python解释器版本来选择合适的Python解释器!这句话相当的拗口!说人话,就是我有个test脚本需要Python2.x版本的解释器来执行。
python test.py
你如何确保执行该脚本的解释器版本就是我需要的解释器!也就是,如何确定你就是我需要的那个姑娘!上面的“python”命令,是系统在PATH中找到的。而PATH中Python变量,有可能被我们手动修改,抛开这个不谈,一般的,‘python’命令是调用Python3.x版本的解释器。但这不完全可靠,因为当系统在PATH中找‘python’命令时,如果Python2.x版本的在Python3.x的前面,那么, Python的默认解释器将变为2.x版本,因为系统找到一个就返回了(系统在Python2.x的安装目录中找到了python.exe)。想想你的Python解释器的安装目录内。不管是哪个版本都有这些:

针对这个弊端,又有了另一个约定:
python2将引用Python 2.x的某些版本
python3将引用Python 3.x的某些版本
要了解更多的关于Python在‘python’命令方面的其他的约定,请参考PEP 394
in linux
在Linux中(基于Unix的系统中),通过软连接的方式来绑定指定的Python解释器。比如:

这些软连将不同的python命令指向一个实际位置的Python解释器的启动目录。而这些在哪用到呢,被【Shebang】用到了,也就是俗称的文件头(这里只聊shebang关于Python文件头的部分)。通过文件头系统就去软连中找到对应的那个‘python’命令,而该命令有绑定到一个具体的Python解释器。
#!/usr/bin/python2
in windows
上述问题也存在与Windows系统中,那么我们也希望在Windows中和Unix中同样运行【Shebang】的能力,并且——没有什么是又好使又不需要发明新的语法或者约定来描述更让人愉快的事情了!经过后来的完善,在PEP 397中正式出现并伴随Python3.3版本发布。它叫【Python Launcher】
What's the python launcher?
Python launcher是用于Windows中的一个实用程序,可帮助我们定位和执行不同版本的Python解释器。它允许脚本或者命令行指示特定的Python版本的首选项,并将定位并执行该版本。mmp,还是这么拗口!说人话就是它很智能的区分开是你想要手动指定解释版本执行py脚本,还是想使用脚本文件指定的解释器。你手动的选择Python解释器,这是调用了你在【PATH】中的Python变量。举个例子。你在Windows下的cmd中,使用Python3.7版本的解释器,执行一个文件:
python3.7 test.py
这么执行发生了什么?Windows会在PATH中寻找python3.7这个解释器。找到并执行test.py文件。而这个test.py(你从未打开过该文件)文件呢,其实它需要python2.7版本的解释器来执行。这样是不是就有问题了。我们用Python launcher来解决这个问题,这玩意儿它会正确的选择最合适的Python版本。
install Python launcher
一般的,从3.3版本开始,Python launcher会伴随解释器的安装而可选安装,在安装步骤的可选项中可勾选。如本博客的第一个图所示。它会被放在系统的PATH中(Python3.6版本开始是这样的,之前版本稍有变动,参见Python3.3版本新功能),如果你不手动添加的话。
另一种方式是单独安装。如本博客的第一个图所示,你可以单独勾选该项使之单独安装。在多个版本Python中,Python launcher只需安装一次,并且兼容所有的Python版本。所以,如果在安装3.6版本是,选择Python launcher选项,那么如果你在安装3.7版本,该项则就无法选中,因为已经安装了。
python launcher versions
Python launcher有两个版本,一个是控制台程序,另一个是‘windows’(即GUI)程序。这两个程序对应我们Python安装目录中的‘python.exe’和‘pythonw.exe’这两个可执行文件。
控制台程序被命名为‘py.exe’,而windows程序则命名为‘pyw.exe’,并且pyw.exe将定位并执行pythonw.exe。
M:\>where py
C:\Windows\py.exe M:\>where pyw.exe
C:\Windows\pyw.exe
这里仅用控制台程序举例。
How to use Python launcher?
如果你安装Python launcher,那么你可以在任意的目录打开cmd测试。

默认的,Python launcher打开了你最新版本的解释器。可以正常的使用和退出。而不是你最近安装的某个版本的解释器。
如果你的系统环境中有多个版本的Python解释器,那么,要想启动,则可以这样:

当然,Python launcher可以帮我们解决某些问题。比如现在有个test.py文件,我们用Python launcher来启动。
#! python2.7 import sys
print(sys.version) # --------- 以上为文件内容, 以下为执行结果 --------------
M:\>py test.py
2.7.14 (v2.7.14:84471935ed, Sep 16 2017, 20:19:30) [MSC v.1500 32 bit (Intel)]
可以看到,Python launcher根据文件头自动帮我们调用了指定版本的解释器来执行该文件。我们修改下文件头再来测试。
#! python3 import sys
print(sys.version) # --------- 以上为文件内容, 以下为执行结果 --------------
M:\>py test.py
3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)]
这样,Python launcher帮我们找到我们想要的那个姑娘。再来看个没有文件头的。
import sys
print(sys.version) # --------- 以上为文件内容, 以下为执行结果 --------------
M:\>py test.py
3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)]
结果,Python launcher默认使用最新版本的解释器来执行。我们也可以绕过文件头,使用我们指定版本的Python解释器。
#! python2 import sys
print(sys.version) # --------- 以上为文件内容, 以下为执行结果 --------------
M:\>py -3 test.py
3.7.0 (v3.7.0:1bf9cc5093, Jun 27 2018, 04:06:47) [MSC v.1914 32 bit (Intel)] M:\>py -3.5 test.py
3.5.4 (v3.5.4:3f56838, Aug 8 2017, 02:07:06) [MSC v.1900 32 bit (Intel)]
如上所示,我们还可以指定版本来执行脚本。
Python社区从多方面考虑下才有的Python launcher,方便我们在windows下使用Python。如果现在的我们用不到它,只需大概知道是干嘛就行,不求甚解。
以上为我个人对Python launcher的理解。如有错误,还望斧正。
see also:https://docs.python.org/3/using/windows.html#launcher # Python launcher for windows,Python3.3版本中的新功能
see also:https://www.python.org/dev/peps/pep-0397/ # PEP 397:Python launcher for windows # 详细讲解
that's all
What's the Python Launcher?的更多相关文章
- python环境准备
一.环境准备. 1.安装python3.5.2(勾选环境变量),python2.7.12 2.设置环境变量 (要求命令行输入python,进入python2命令行,打python3时,进入python ...
- Python - Python2与Python3合理共存Windows平台
Install Python2 and Python3 Python 2.7.13 - Windows x86-64 MSI installer Python 3.6.0 - Windows x86- ...
- [python]_ELVE_pip2和pip3如何共存
作者:匿名用户链接:https://www.zhihu.com/question/21653286/answer/95532074来源:知乎著作权归作者所有,转载请联系作者获得授权. 想学习Pytho ...
- Python 虚拟环境 pyenv、venv(pyvenv)、virtualenv之间的区别
请参考连接 https://blog.zengrong.net/post/2167.html https://blog.csdn.net/lanonjj/article/details/5105021 ...
- 用homebrew 升级安装python3.7 之后系统的python版本还是旧的怎么办
mac 中安装了多个版本的python$ brew install python3 Updating Homebrew... Warning: python is already installed, ...
- Python之虚拟环境管理
Python本身有很多个版本,第三方的Python包又有很多可用的版本,所以经常会遇到下面的问题: 运行不同的Python程序,需要使用不同版本的Python(2.x或3.x). 在同一中Python ...
- Installing Python Modules
Email: distutils-sig@python.org As a popular open source development project, Python has an active s ...
- Python/Anaconda多版本共存的解决方案
博客中的文章均为 meelo 原创,请务必以链接形式注明 本文地址 虽然Python2大势已去,众多项目都已经支持Python3,但总有一些教程和项目只支持Python2.通常情况是计算机里既装着Py ...
- Mac下各种编程环境的配置问题(python java)
首先,去官网下载安装包.直接运行安装.安装完成后,启动器中会多两个应用程序IDLE和Python Launcher. 如果,你习惯在IDLE,直接运行即可. 但你在Terminal中运行python3 ...
随机推荐
- Vue Cli 3.x项目如何部署到IIS子站点下
Vue Router在IIS下的部署参考:https://router.vuejs.org/zh/guide/essentials/history-mode.html#%E5%90%8E%E7%AB% ...
- mock---前端搭建模拟服务
在做前端开发接口的时候,往往接口都是从后端来的,这让前端很苦恼,但是有了 MockServer ,前端也可以搭建API服务了. server-mock是什么? 是一款nodejs的应用,用于搭建web ...
- gym 101873
题还没补完 以下是牢骚:删了 现在只有六个...太恐怖了,我发现四星场我连300人的题都不会啊. C:最短路加一维状态就好了叭..嗯,一开始没看到输出的那句话 那个 "."也要输 ...
- Java模版方法的另一种实现
面试荔枝FM杯具,遂死磕AQS途中发现一个有趣的模版用法,记下来. 模版方法是很重要的设计模式,在数据访问层.众多的插件接口都可见其影子,一般的实现都是在模版中定义抽象方法并使用其方法进行算法,让具体 ...
- ubuntu下安装go环境
1.官网下载go语言安装包 地址:https://studygolang.com/dl 2.服务器上安装go 将下载下来的安装包解压到/usr/local下 tar xf go1.12.1.linux ...
- 编写函数求整形数组a中存储的m个不重复的整数的第k大的整数(其中m>=1,1<=k<=m)很简单的一个思路是酱紫的:管他辣么多干啥,上来一把排序然后直接得答案
/** * @author:(LiberHome) * @date:Created in 2019/2/28 20:38 * @description: * @version:$ *//*编写函数求整 ...
- 实现Linux下的ls和ls-l
ls的C语言代码实现 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #includ ...
- [转载] apache ab压力测试报错(apr_socket_recv: Connection reset by peer (104))
遇见相同的问题. https://www.cnblogs.com/felixzh/p/8295471.html -------------------------------------------- ...
- [java] 在linux+chrome/firefox上使用java applet
我现在的浏览器用不了java applet,我的环境是archlinux + chrome or firefox. java网站的指引是这样说的 按照这些说明操作,以便在 Ubuntu Linux 上 ...
- mysql新建数据库、新建用户及授权操作
1.创建数据库create database if not exists test176 default charset utf8 collate utf8_general_ci; #utf8_gen ...