这是 Python for Win32 (pywin32) 扩展的自述文件,它提供了从 Python 访问许多 Windows API 的权限。
请参阅 CHANGES.txt 了解最近的显着更改。
这些文档是一个漫长而悲伤的故事,但现在有一个随安装程序附带的帮助文件的在线版本(感谢@ofek!)。其中很多都是非常古老的,但有些是自动生成的并且是最新的。希望能帮助您理清文档!
请随意针对 pywin32 中的所有错误(或可疑错误)提出问题。也欢迎针对所有错误或功能提出拉请求。
但是,请不要针对一般支持请求或使用此包中的模块的问题或问题打开 github 问题- 它们将被关闭。对于此类问题,请向 python-win32 邮件列表发送电子邮件 - 请注意,在发帖之前您必须订阅该列表。
不再支持二进制版本。
Build 306 是最后一个带有 .exe 安装程序的版本。您确实不应该使用它们,但如果您确实需要它们,请在这里找到它们
您应该通过 pip 安装 pywin32 - 例如,
python -m pip install --upgrade pywin32
有一个安装后脚本(见下文)不应在虚拟环境中运行;它应该只在“全局”安装中运行。
对于未发布的更改,您可以下载 github actions 所做的构建 - 从main
分支中选择任何“工作流程”并下载其“工件”)
在虚拟环境之外,您可能想要安装 COM 对象、服务等。您可以通过执行以下命令来完成此操作:
python Scripts/pywin32_postinstall.py -install
从 Python 安装的根目录。
如果您使用普通权限执行此操作,则这对于您的用户来说将是全局的(一些文件将被复制到 Python 安装的根目录,并对 HKCU 进行一些更改)。如果您从提升的进程执行此操作,则它将是机器的全局操作(文件将被复制到 System32、HKLM 将被更改等)
要作为服务运行,您可能需要从提升的命令提示符全局安装 pywin32 - 参见上文。
您还需要确保 Python 安装在运行服务的用户有权访问安装并能够加载pywintypesXX.dll
和pythonXX.dll
位置。特别是, LocalSystem
帐户通常无权访问本地%USER%
目录结构。
如果您在升级过程中遇到如下问题:
The specified procedure could not be found
Entry-point not found
它通常意味着以下两件事之一:
您已经升级了之前运行过安装后脚本的安装。所以你应该再次运行它:
python Scripts/pywin32_postinstall.py -install
这将进行一些小的尝试来清理旧的冲突安装。
您的系统中还安装了其他 pywin32 DLL,但位置与新的不同。这种情况有时会发生在预装 pywin32 的环境中(例如 anaconda?)。
这里可能的解决方案是:
pywintypesXX.dll
和pythoncomXX.dll
的所有其他副本(其中XX
是 Python 版本 - 例如“39”) 安装 Visual Studio 2019(稍后可能会起作用,但选项可能会有所不同),按照您安装的版本的构建环境中的说明进行操作。
(免费编译器可能也可以工作,但尚未经过测试 - 让我知道您的经验!)
setup.py
是标准的 distutils 构建脚本,因此您可能需要:
python setup.py install
或者
python setup.py --help
有些模块需要晦涩难懂的 SDK 来构建 - setup.py
应该成功,并优雅地告诉您为什么构建失败 - 如果构建实际上因您的配置而失败,请提出问题。
制作新版本时执行以下步骤 - 这主要是为了形成一个清单,这样 @mhammond 就不会忘记要做什么:)
自构建 307 以来,发布过程基于 Github 操作创建的工件。
确保 CHANGES.txt 包含所有值得注意的内容。更新标头以反映即将发布的版本和日期,然后提交。
使用新的内部版本号更新 setup.py。更新 CHANGES.txt 为下一个未发布版本提供新的标题部分。 (即,一个新的、空的“即将在版本 XXX 中推出,尚未发布”部分)
将这些更改推送到 github,等待操作完成,然后从该运行中下载工件。
将 .whl 工件上传到 pypi - 我们在推送标签之前执行此操作,因为它们可能会因无效README.md
而被拒绝。通过py -3.? -m twine upload dist/*XXX*.whl
。
为发布创建一个新的 git 标签。
使用新的内部版本号 +“.1”(例如 123.1)更新 setup.py,以确保未来的测试版本不会被误认为是真正的版本。
确保所有内容都推送到 github,包括标签(即git push --tags
)
发送邮件到 python-win32
这是使用本地开发环境创建构建时使用的旧流程。 Build 306 是使用此过程的最后一个版本。
确保 CHANGES.txt 包含所有值得注意的内容。更新标头以反映即将发布的版本和日期,然后提交。
使用新的内部版本号更新 setup.py。
执行make_all.bat
,永远等待,测试工件。
将 .whl 工件上传到 pypi - 我们在推送标签之前执行此操作,因为它们可能会因无效README.md
而被拒绝。通过py -3.? -m twine upload dist/*XXX*.whl
。
提交 setup.py (因此新的内部版本号位于存储库中),创建一个新的 git 标签
将 .exe 安装程序上传到 github。
使用新的内部版本号 +“.1”(例如 123.1)更新 setup.py,以确保未来的测试版本不会被误认为是真正的版本。
确保所有内容都推送到 github,包括标签(即git push --tags
)
发送邮件到 python-win32