.. highlightlang:: none .. _using-on-windows: ***************************** 在 Windows 上使用 Python ***************************** .. sectionauthor:: Robert Lehmann 这份文档旨在给出一份 Python 在 Windows 特定的行为的概要, 这些是你在 Microsoft Windows 上使用 Python 应该知道的. 安装 Python ================= 不像大多 Unix 系统和服务, Windows 不原生的需求 Python, 因此不会预先安装 Python 的一个版本. 然而, 多年以来, CPython 团队为每个`发行版 `_ 编译了 Windows 安装程序 (MSI 包). Check :pep:`11` for details on all unsupported platforms. 随着 Python 持续地开发, 有些平台曾被支持但现在不在被支持 (因为缺少用户或开发者). 检查 :pep:`11` 获得所有不被支持平台的细节. * 直到 2.5, Python 还可以兼容 Windows 95, 98 和 ME (但在安装时会抛出一个警告). 在 Python 2.6 (以及所有随后版本)里, 放弃了对它们的支持, 新版本只被预期在 Windows NT 家族里工作. * `Windows CE `_ 依旧被支持. * `Cygwin `_ 安装程序同样提供 `Python 解释器 `_; 它位于 "Interpreters" 下. (cf. `Cygwin 包源 `_, `Maintainer releases `_) 参阅 `Python for Windows (和 DOS) `_ 获取有关预编译安装包的细节信息. .. seealso:: `Python on XP `_ "7 Minutes to "Hello World!"" by Richard Dooling, 2006 `Installing on Windows `_ in "`Dive into Python: Python from novice to pro `_" by Mark Pilgrim, 2004, ISBN 1-59059-356-1 `For Windows users `_ in "Installing Python" in "`A Byte of Python `_" by Swaroop C H, 2003 替代软件集 =================== 除了标准 CPython 发行版, 还有包含附加功能的修改包. 以下是一些流行的版本以及它们的关键特性: `ActivePython `_ 兼容多平台的安装包, 文档, PyWin32 `Enthought Python Distribution `_ 带有各自文档的流行模块 (如 PyWin32), 建造可扩展 Python 应用的工具包 注意, 这些包有可能安装 Python 的*老*版本. 配置 Python ================== 为了完美的运行 Python, 你可能要修改 Windows 当前的环境设置. 附录: 设置环境变量 --------------------------------------- Windows 有一个内建的对话框来更改环境变量 (下面教程使用与 XP 经典视图): 右击你的机器图标 (在桌面电脑上通常叫 "我的电脑), 选择:menuselection:`属性`. 然后打开 :guilaber:`高级` 选项卡, 点击 :guilaber:`环境变量` 按钮. 简单地说, 过程为: :menuselection:`我的电脑 --> 属性 --> 高级 --> 环境变量` 在这个对话框里, 你可以添加或更改用户和系统变量. 要改变系统变量, 你需要有机器的非限制性权限 (如 Administrator 权限). 另一个添加环境变量的方法是使用 :command:`set` 命令:: set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib 要使这个设定永久生效, 你可以把相应的命令行添加到你的 :file:`autoexec.bat` 文件. :program:`msconfig` 是这个文件的一个图形接口. Viewing environment variables can also be done more straight-forward: The command prompt will expand strings wrapped into percent signs automatically 查看环境变量可以更为直接地做到: 命令提示会自动的扩展以百分号包围的字符串:: echo %PATH% 查询 :command:`set /?` 获得它行为的更多细节. .. seealso:: http://support.microsoft.com/kb/100843 Environment variables in Windows NT http://support.microsoft.com/kb/310519 How To Manage Environment Variables in Windows XP http://www.chem.gla.ac.uk/~louis/software/faq/q1.html Setting Environment variables, Louis J. Farrugia 找到可执行的 Python ----------------------------- 除了使用开始菜单里自动创建的图标进入 Python 解释器, 你可能还要从 DOS 命令下打开 Python. 要使得这个工作, 你需要设置你的 :envvar:`%PATH%` 环境变量包含 Python 的目录, 通过分号分隔其它条目. 一个参考的变量如下所示 (假设最初两个记录是 Windows 默认的):: C:\WINDOWS\system32;C:\WINDOWS;C:\Python25 现在在命令行下键入 :command:`python` 将会打开 Python 解释器. 因此, 你也可以使用命令行选项来执行你的脚本, 参阅 :ref:`using-on-cmdline`. 找到模块 --------------- Python 通常把它的库放在安装目录下 (因此你的 site-packages 文件夹也在那里). 因此, 如果你把 Python 安装在 :file:`C:\\Python\\` 下, 默认库就放在 :file:`C:\\Python\\Lib\\` 下, 而第三方模块应该放在 :file:`C:\\Python\\Lib\\site-packages\\`. 这是 Windows 上 :data:`sys.path` 的构成: * 一个空的记录添加在开始的位置, 它对应于当前目录. * 如果存在环境变量 :envvar:`PYTHONPATH`, 如 :ref:`using-on-envvars` 所描述的, 它的条目会在接下来的地方添加. 注意在 Windows 上, 这个变量上的路径必须有分号来分隔, 以区别在盘符 (``C:\`` 等) 中使用的冒号. * 附加的 "应用路径" 可以作为 ``HKEY_CURRENT_USER`` 或 ``HKEY_LOCAL_MACHINE`` 下的 :samp:`\\SOFTWARE\\Python\\PythonCore\\{version}\\PythonPath` 的子键添加到注册表里. 用分开分隔的字符串作为默认值的子键会把每一个路径添加到 :data:`sys.path`. (注意, 所有已知的安装包只使用 HKLM, 因此一般 HKCU 是空的.) * 如果设置了环境变量 :envvar:`PYTHONHOME`, 那么它就被认为是 "Python Home". 否则, 主 Python 可执行文件的路径被用于定位一个 "地标文件" (``Lib\os.py``) 来推测 "Python Home". 如果找到了一个 Python home, 被添加到 :data:`sys.path` 的字目录 (``Lib``, ``plat-win`` 等) 就基于那个文件夹. 否则, 核心 Python 路径就通过注册表里的 PythonPath 来构建. * 如果无法定位 Python Home, 环境里没有指定 :envvar:`PYTHONPATH`, 没有注册表记录被找到, 那么就使用一个默认的相对路径 (例如, ``.\Lib;.\plat-win`` 等). 这一切的结果如下: * 当在 Python 主目录 (即可以是安装的版本, 也可以直接是 PCBuild 目录) 下运行 :file:`python.exe`, 或任意其它 .exe 文件, 核心路径就被推断出来了, 而注册表里的核心路径就被忽略. 注册表里的其它 "应用路径" 一直被读取. * 当 Python 寄宿在另一个 .exe 里 (不同的目录, 通过 COM 嵌入等), "Python Home" 不会被推断出, 因此使用注册表里的核心路径. 注册表里的其它 "应用路径" 一直被读取. * 如果 Python 无法找到它的 home, 也没有注册表 (如, 冻结的 .exe, 一些非常大的安装包) 你会得到一个默认但是相对的路径. 可执行脚本 ----------------- Python 脚本 (后缀为 ``.py`` 的文件) 默认下被 :program:`python.exe` 执行. 这个可执行文件会打开一个终端, 即使程序使用 GUI 时终端也会被打开. 如果你不想让它发生, 那么使用后缀 ``.pyw``, 这样脚本就默认由 :program:`pythonw.exe` 执行 (这两个可执行文件都位于安装 Python 的顶级目录下). 这样会在启动时阻止终端窗口的弹出. 你可能想让 ``.py`` 脚本也由 :program:`pythonw.exe` 执行, 可以在 usual facilities 里设置它, 例如 (可能需要管理员权限): #. 打开一个命令行. #. 关联 ``.py`` 脚本到正确的文件组:: assoc .py=Python.File #. 重定向所有 Python 文件到新的可执行文件上:: ftype Python.File=C:\Path\to\pythonw.exe "%1" %* 附加模块 ================== 尽管 Python 旨在所有平台上的可移植性, 但在 Windows 上还有一些独有的特性. 存在几个模块, 有标准库里的也有外部的, 和代码片段使用这些特性. Windows 独有的标准模块的文档在 :ref:`mswin-specific-services`. PyWin32 ------- Mark Hammond 的 `PyWin32 `_ 模块是高级 Windows 独有支持的模块的一个集. 包含的工具有: * `组件对象模型 `_ (COM) * Win32 API 调用 * 注册表 * 事件日志 * `Microsoft Foundation Classes `_ (MFC) 用户接口 `PythonWin `_ 是一个使用 PyWin32 装载的简单 MFC 应用. 它是一个可嵌入的 IDE, 内建有一个调试器. .. seealso:: `Win32 How Do I...? `_ by Tim Golden `Python and COM `_ by David and Paul Boddie Py2exe ------ `Py2exe `_ 是一个 :mod:`distutils` 扩展 (参阅 :ref:`extending-distutils`), 它包 Python 脚本包装成一个可执行的 Windows 程序 (:file:`{*}.exe` 文件). 但你做这点的时候, 你可以发布你的应用而无需你的用户安装 Python. WConio ------ 因为 Python 高级终端处理层 (advanced terminal handling layer), :mod:`curses`, 仅限于 Unix-like 系统, 因此在 Windows 上同样有一个独有的库: Python 在 Windows 上的控制台 I/O (Windows Console I/O for Python). `WConio `_ 是 Turbo-C 里 :file:`CONIO.H` 文件的一个包装器, 用于创建文本用户接口. 在 Windows 上编译 Python =========================== 如果你想自己编译 CPython, 你要做的第一件事情是获得 `源代码 `_. 你可以选择下载最后发布版本的源代码, 也可以抓取一个新鲜的 `checkout `_. 对与 Microsoft Visual C++, 官方 Python 发行版使用的编译器, 源代码树包含 solutions/project 文件. 参看它们各自目录下的 :file:`readme.txt` 文件: +--------------------+--------------+-----------------------+ | 目录 | MSVC 版本 | Visual Studio 版本 | +====================+==============+=======================+ | :file:`PC/VC6/` | 6.0 | 97 | +--------------------+--------------+-----------------------+ | :file:`PC/VS7.1/` | 7.1 | 2003 | +--------------------+--------------+-----------------------+ | :file:`PC/VS8.0/` | 8.0 | 2005 | +--------------------+--------------+-----------------------+ | :file:`PCbuild/` | 9.0 | 2008 | +--------------------+--------------+-----------------------+ 注意, 不是所有这些目的都被完整地支持. 阅读发行说明来, 对应你的版本, 看看相应官方发行版编译时使用的编译器版本. 检查 :file:`PC/readme.txt` 获得建造流程的常规信息. 对于扩展模块, 参阅 :ref:`building-on-windows`. .. seealso:: `Python + Windows + distutils + SWIG + gcc MinGW `_ or "Creating Python extensions in C/C++ with SWIG and compiling them with MinGW gcc under Windows" or "Installing Python extension with distutils and without Microsoft Visual C++" by Sébastien Sauvage, 2003 `MingW -- Python extensions `_ by Trent Apted et al, 2007 其它资源 =============== .. seealso:: `Python Programming On Win32 `_ "Help for Windows Programmers" by Mark Hammond and Andy Robinson, O'Reilly Media, 2000, ISBN 1-56592-621-8 `A Python for Windows Tutorial `_ by Amanda Birmingham, 2004