我正在尝试使用pywin32中的win32ui模块(是的,我有正确的版本(。我的win32gui模块工作正常,但是ui模块给了我一个错误。我已经尝试过:重新安装python,添加PYTHON_ PATH太多系统变量,运行安装后pywin32脚本,剩下的我有点力不从心。
Python版本:3.9(64位(Pywin32版本:Pywin32-228.win-ad64-py3.9(是.exe文件名,我不知道如何找到版本(只是为了清理我唯一的代码是:
import win32ui
(这是我的第一个问题,所以我希望我做得对(
更新
对原始源应用(以下(修复程序(以及更多修复程序(,构建它们,并将.whl上传到[GitHub]:CristiFati/Prebuilded Binaries-(master(Prebuilded Binarys/PyWin32/v228
但是,由于这个bug是一种"交易破坏者;(自v228发布以来,4+个月(,我预计v229很快就会发布(在接下来的几天左右(。
有关如何安装.whls的详细信息,请查看[SO]:PyWin32和Python 3.8.0(@CristiFati的答案(的安装步骤部分。
它在上不断重复
-
Python 3.9 64位和32位
-
PyWin32 228(及更早版本(
做了一些调试(为win32ui创建了一个VStudio2015解决方案(有两个项目:用于Python 3.9和Python3.8(,结果发现这是访问违规(segfault[cfati@CFATI-5510-0:e:WorkDevGitHubCristiFatipywin32src]> sopr.bat ### Set shorter prompt to better fit when pasted in StackOverflow (or other) pages ### [prompt]> "e:WorkDevVEnvspy_pc064_03.09.00_test0Scriptspython.exe" Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import win32ui Traceback (most recent call last): File "<string>", line 1, in <module> File "c:Installpc064PythonPython 3.09.00Libctypes__init__.py", line 374, in __init__ self._handle = _dlopen(self._name, mode) OSError: [WinError 1114] A dynamic link library (DLL) initialization routine failed >>> import win32api
;最好的";部分原因是它发生在DllMain之前。最后一行是[GitHub]:mhammond/pywin32-(b228(pywin32/Pythonwin/win32RichEdit.cpp#225:
PyCCtrlView_Type PyCRichEditView::type("PyCRichEditView", &PyCCtrlView::type, &PyCRichEditCtrl::type, RUNTIME_CLASS(CRichEditView), sizeof(PyCRichEditView), PYOBJ_OFFSET(PyCRichEditView), PyCRichEditView_methods, GET_PY_CTOR(PyCRichEditView));
这是一个静态成员。由于2nd和3rd参数也是静态成员(没有注意到它们是指针的事实(,我认为这是[ISOCPP]:什么是"静态初始化顺序‘惨败’(问题("?,我还追了一些鬼。
无论如何,今天我注意到[GitHub]:mhammond/pywin32-确保我们在win32ui初始化并调用回Python时保留GIL(然后[GitHub]:mhammond/pywin32-导入它正在寻址的Python 3.9上损坏的win32ui(。
应用补丁,修复问题:
[prompt]> "e:WorkDevVEnvspy_pc064_03.09.00_test0Scriptspython.exe" Python 3.9.0 (tags/v3.9.0:9cf6752, Oct 5 2020, 15:34:40) [MSC v.1927 64 bit (AMD64)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> import win32ui >>> import win32api