原文链接:A Python Launcher For Windows
Mark Hammond ( pywin32 的作者以及 Windows 版 Python 的长期支持者)写了 PEP 397,描述了 Windows 下的一个新的 Python 加载器。Vinay Sanjip ( logging 模组的作者)最近实现了这个加载器,下载地址是 https://bitbucket.org/vinay.sajip/pylauncher/downloads
该加载器为 Windows 下的 Python 脚本(.py 和 .pyw 文件)提供了选择 Python 版本的功能,从而可以方便地同时使用 Python 2 和 Python 3 两个版本。
Windows 用户可以试着下载并且测试一下这个加载器,帮助 Python 开发人员解决掉剩下的问题。该加载器是以独立应用程序打包的,而且会支持目前可用的所有版本的 Python。我们的目标是一旦有了加载器的最终版,我们就将其集成到 Python 3.3 中,当然我们还会为其他版本的 Python 提供这个加载器的独立安装包。
这个加载器有两个版本,launcher.msi 会将文件安装到 Program Files 目录下,而 launchsys.msi 会将其安装到 Windows 的 System32 文件夹下。我们还为 64 位 Windows 提供了 64 位的安装包。
加载器的一些细节
PEP 397 中有对该加载器的行为的完整说明。简单概括有如下几点:
- 该加载器提供了两个可执行文件——命令行版本的 py.exe 以及 GUI 版的 pyw.exe。
- 加载器将被注册为 .py 和 .pyw 文件的默认处理工具。
- 当执行脚本时,加载器会从脚本中寻找 Unix 式样的含 #! (shebang) 的一行,它会识别出 python (系统默认的 Python 版本)、python2 (默认的 Python 2 发行版)、``python3`` (默认的 Python 3 发行版)这几个字样。你还可以为不一样的计算机和不一样的用户定制不同的加载行为。
- 单独执行 py.exe 命令会调出 Python 的交互式解释器。py.exe 提供命令行参数支持,py -2 会加载 Python 2,py -3 会加载 Python 3,而 py 则会加载系统默认的 Python 版本。
简单的使用说明
安装以后,加载器会将自己与 .py 和 .pyw 文件关联起来。除非你特别干预,脚本在运行时还是会使用默认的 Python 版本,所以你实际使用时将看不到任何变化。如果你经常使用命令行的话,你可以考虑将 .py 添加到你的 PATHEXT 环境变量中,这样你的脚本就不会在独立的命令控制台执行了。
如果要指定脚本使用 Python 2 编译器,只要将脚本的第一行写成如下格式就可以了:
#!/usr/bin/env python2
这样写和 Unix 是兼容的。如果你不需要兼容 Unix,写成 #!python2 也可以。
如果你想要指定脚本使用 Python 3,那你需要为脚本添加:
#!/usr/bin/env python3
你还可以使用下面这些命令启动 Python 解释器:
# Default version of Python py # Python 2 py -2 # Python 3 py -3
前提是你已经将 py.exe 加入了你的路径设置。launchsys 版的加载器会为你自动做这个设置,不过 launcher.msi 的安装目录(C:\Program Files\Python Launcher) 需要被手动加到路径中。
进一步阅读
下面的几个 python-dev 邮件组的讨论内容包含了一些关键的内容:
- Mark 宣布 PEP 初稿发布: http://mail.python.org/pipermail/python-dev/2011-March/109509.html
- 该 PEP 的第二版草稿发布: http://mail.python.org/pipermail/python-dev/2011-March/109786.html
- 最初 Vinay 关于用 C 实现加载器的询问: http://mail.python.org/pipermail/python-dev/2011-June/112145.html
- Vinay 宣布 C 语言实现的完成: http://mail.python.org/pipermail/python-dev/2011-July/112184.html
- Vinay 的测试号召帖: http://mail.python.org/pipermail/python-dev/2011-July/112251.html
No comments:
Post a Comment