pywin32
这是Python for Win32(pywin32)扩展的自述文件,它提供了从Python访问许多Windows API的功能。
有关最近的重要更改,请查看CHANGES.txt。
文档
文档的情况一直不太理想,但现在有了一个在线版本,这是随安装程序一起提供的帮助文件(感谢@ofek!)。其中很多内容都很旧,但有些是自动生成的最新内容。我们非常欢迎大家帮助整理文档!
支持
欢迎为pywin32的所有bug(或疑似bug)创建问题。我们也欢迎针对所有bug或功能提出拉取请求。
但是,请不要为一般支持请求或使用本包中模块时遇到的问题或疑问创建GitHub问题,这些问题会被关闭。对于此类问题,请发送邮件到python-win32邮件列表 - 请注意,发帖前必须先订阅该列表。
二进制文件
二进制发布版本已被弃用。 虽然仍然提供,但可以在这里找到它们
通过PIP安装
你应该通过pip安装pywin32 - 例如,
python -m pip install --upgrade pywin32
有一个安装后脚本(见下文),它不应该在虚拟环境中运行;它应该只在"全局"安装中运行。
对于未发布的更改,你可以下载由github actions制作的构建 -
从main
分支中选择任何"工作流程"并下载其"构件")
全局安装
在虚拟环境之外,你可能想要安装COM对象、服务等。你可以通过执行以下命令来实现:
python Scripts/pywin32_postinstall.py -install
从Python安装的根目录执行。
如果你以正常权限执行此操作,它将对你的用户全局生效(一些文件将被复制到Python安装的根目录,并对HKCU进行一些更改)。如果你从提升权限的进程执行此操作,它将对机器全局生效(文件将被复制到System32,HKLM将被更改等)
作为Windows服务运行
要作为服务运行,你可能需要从提升权限的命令提示符全局安装pywin32 - 请参见上文。
你还需要确保Python安装在运行服务的用户可以访问的位置,并且能够加载pywintypesXX.dll
和pythonXX.dll
。特别是,LocalSystem
帐户通常无法访问你的本地%USER%
目录结构。
故障排除
如果你在升级时遇到以下问题:
找不到指定的过程
找不到入口点
这通常意味着以下两种情况之一:
-
你升级了一个之前已运行安装后脚本的安装。 所以你应该再次运行它:
python Scripts/pywin32_postinstall.py -install
这将尝试清理旧的冲突安装。
-
系统中安装了其他pywin32 DLL, 但位置与新的不同。这有时会发生在预装了pywin32的环境中(例如,anaconda?)。
可能的解决方案是:
- 运行上面提到的"post_install"脚本。
- 否则,找到并删除所有其他
pywintypesXX.dll
和pythoncomXX.dll
的副本 (其中XX
是Python版本 - 例如,"39")
从源代码构建
安装Visual Studio 2019(更新版本可能也可以,但选项可能不同), 选择"使用C++的桌面开发",然后选择以下选项:
- Windows 10 SDK(最新提供的版本?在撰写时为10.0.18362)
- "用于...的C++ MFC"
- 如有必要,安装ARM构建工具。
(免费编译器可能也可以使用,但尚未测试 - 请告诉我你的经验!)
setup.py
是一个标准的distutils构建脚本,所以你可能想要:
python setup.py install
或
python setup.py --help
一些模块需要冷门的SDK才能构建 - setup.py
应该能够成功执行,并优雅地告诉你为什么构建失败 - 如果构建在你的配置下实际失败,请创建一个问题。
发布流程
在制作新版本时,需要执行以下步骤 - 这主要是为了形成一个清单,以便@mhammond不会忘记该做什么:)
-
确保CHANGES.txt包含所有值得注意的内容。更新标题以反映即将发布的构建版本和日期,提交它。
-
在setup.py中更新新的构建号。
-
执行
make.bat
,等待很长时间,测试生成的构件。 -
将.whl构件上传到pypi - 我们在推送标签之前这样做,因为它们可能因为无效的
README.md
而被拒绝。通过py -3.? -m twine upload dist/*XXX*.whl
完成。 -
提交setup.py(以便新的构建号在仓库中),创建一个新的git标签
-
将.exe安装程序上传到github。
-
在setup.py中更新新的构建号 + ".1"(例如,123.1),以确保 未来的测试构建不会被误认为是真正的发布版本。
-
确保所有内容都推送到github,包括标签(即,
git push --tags
) -
向python-win32发送邮件