当前位置: 首页 > 面试题库 >

PyWin32和Python 3.8.0

姜阳
2023-03-14
问题内容

Python 3.8.0 最近已发布(在 20191014上 ,可以从[Python]:Python
3.8.0
下载)。
PyWin32 已在[PyPI]:pywin32
225(于 20190915 发行)上 为其构建
。不幸的是,pip installing后,它不起作用。

样品:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058631512]> sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (or

other) pages ***

[prompt]> "e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe"
Python 3.7.3 (v3.7.3:ef4ec6ed12, Mar 25 2019, 22:22:05) [MSC v.1916 64

bit (AMD64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import win32api
>>> ^Z

[prompt]> "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\Scripts\python.exe"
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64

bit (AMD64)] on win32
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import win32api
Traceback (most recent call last):
File “ “, line 1, in
ImportError: DLL load failed while importing win32api: The specified
module could not be found.
>>> ^Z

注意事项

  • 对于 Python 3.7 ,我还将 PyWin32 模块升级到了最新版本,并且可以正常工作
  • 年长 PyWin32 版本在旧工作 的Python 版本( 2.73.53.6
  • 可在 64位32位 上重现 __

问题答案:

剧透警报!

应用 _ #2.2。 (从下面)到原始 .whl_ ,然后将它们发布在 [GitHub]上:CristiFati / Prebuilt-
Binaries-(主)Prebuilt-Binaries / PyWin32 /
v225
win_amd64 ,适用于 Python 3.8的 win32
)。 __

安装它们(其中之一)之后,现有代码应可以在 OOTB上运行 (就此问题而言)。

安装步骤

  1. 下载与您的 Python 架构( 64位32位 -匹配的 .whl -有关获取 Python 架构的更多详细信息。

  2. 在其上调用 PIP 安装程序([[SO]:如何在Windows 10上为特定的Python版本安装软件包)。就像是:

    (${path_to_your})python.exe -m pip ${path_to_the_downloaded_pywin32_whl}
    

例:

    "e:\Work\Dev\VEnvs\py_pc064_03.08.00_test0\Scripts\python.exe" -m pip "L:\Downloads\pywin32-225-cp38-cp38-win_amd64.whl"

该问题已在[GitHub]上报告:mhammond
/ pywin32-python 3.8。

上面的 URL 引用了另外2个:

  • [Python 3.8.Docs]:Python 3.8的新增功能-声明( 重点 是我的)Python API的更改:
* **[](https://docs.python.org/3.8/library/ctypes.html#module-

ctypes)现在可以更安全地解决 Windows扩展模块的DLL依赖关系以及
ctypes
加载的DLL的依赖性
。仅搜索系统路径,包含DLL或PYD文件的目录以及使用add_dll_directory()添加的目录以查找加载时间相关性。
具体来说,将不再使用PATH和当前工作目录,并且对它们的修改将不再对正常的DLL解析产生任何影响。**

  • [Python 3.Docs]:操作系统。 add_dll_directorypath )指出( 重点 仍然是我的):

在解析导入的扩展模块 (模块本身通过解析sys.path以及
ctypes的

依赖项时, 将使用此搜索路径。

同时,我做了一些自己的挖掘工作,发现(对于 win32api.pyd找不到pywintypes38.dll (是 .pyd 的依赖
)(我也在注释中指定了此内容)问题)。

解决方案 (实际上的解决方法(或多或少),直到发布了官方的和向后兼容的修复程序为止):

  1. 通过 在* 任何 PyWin32 模块 之前 导入它来强制 pywintypes38.dll 加载(因为它也是一个 Python 模块,在这种情况下它不属于上述规则): * __
     import pywintypes
    

    import win32api

如果使用 COM ,则需要import pythoncom

  1. pywin32_system32 添加.dll 搜索路径中(从上面遵循新模型)。有多种方法:

    1. __来自问题 URL的 v-python 的注释,提供了一个小片段(我没有对其进行测试)

    2. 我还提交了 [GitHub]:mhammond / pywin32-支持Python 3.8 ,我在 pywin32.pth 文件中执行所有操作(在解释器启动时“执行”,因此无需更改现有代码)。不幸的是, AppVeyor 自动化测试存在一个问题,该问题失败了(但由于其他一些原因),因此它已经停留了一段时间。请注意,与此同时, 关闭 PR ,并推出了另一种(类似的)方法。请注意,包含此修复程序的 v226 (于 20191110 发行)在 VirtualEnv ([[SO]:PyWin32(226)和虚拟环境上不起作用
      无论如何,在本地应用更改 _ (1) (在我的两个 _Python VirtualEnv上
      )都解决了该问题(在一个方面,而没有破坏另一个):

    [cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058631512]>

sopr.bat
Set shorter prompt to better fit when pasted in StackOverflow
(or other) pages

    [prompt]>

“e:\Work\Dev\VEnvs\py_064_03.07.03_test0\Scripts\python.exe” -c “import
win32api”

    [prompt]>

“e:\Work\Dev\VEnvs\py_064_03.08.00_test0\Scripts\python.exe” -c “import
win32api”

    [prompt]>
3. 其他方法,例如复制 _.dll_ (例如,在 _%SystemRoot%\ System32中_ )或将它们 _符号链接_ ,但是(个人)我不推荐使用

更新 #0

[PyPI]:pywin32 227 (解决了此问题),已于
20191114 发布!

脚注

  • #1 :检查[[SO]:从鼠标右键单击PyCharm Community Edition中的上下文菜单运行/调试Django应用程序的UnitTests?( 修补 utrunner 部分),了解如何应用补丁(在 Win上 )。


 类似资料:
  • Windows Pywin32允许你像VC一样的形式来使用PYTHON开发win32应用。代码风格可以类似win32 sdk,也可以类似MFC,由你选择。如果你仍不放弃vc一样的代码过程在python下,那么这就是一个不错的选择。

  • 问题内容: [PyPI]:pywin32 226已于 20191110 发行。 它 适用 于大多数 Python 安装程序( 例如, 适用于从Python下载的正式版本),但 不适 用于虚拟环境( 例如 ,使用 VirtualEnv ( v16.7.7 )和(基于进一步的研究) Python 的 venv创建 )。 我将 Python v3.8 .0和 v3.7 .3用作实验大鼠。这是前者的输出:

  • 问题内容: 我正在尝试使用pywin32随附的win32gui模块,但无法正常工作。 我已经下载了它,并进行了构建,所有内容似乎都位于站点软件包下,我在site-packages / win32 / win32gui.pyd中找到了win32gui.pyd,但是当我尝试导入时,我得到了: 我需要将dll移动到某个地方吗?如果是这样,哪一个? 问题答案: 我的猜测是win32gui依赖于不在您的系统

  • 问题内容: 我有一个简短的问题,希望有人可以帮助我。 我正在创建/计划需要跨平台运行并使用Windows中的com库的应用程序。过去,我曾使用win32py在python应用程序中运行这些com对象,但我一直在做大量的研究,以在Mac上找到解决方案,但我没有运气。理想情况下,我想留在Python中,因为我已经有了使用该库的Python 2.7的工作代码。但是,如果有另一种语言的解决方案,我想听听。

  • 我想挂一个窗口并接收它的消息 获取了(is int),但是如何将其转换为并使用?

  • 问题内容: 我正在尝试安装pywin32。我从sourceforge.net下载了它。当我跑步 它显示“无法找到vcvarsall.bat”。我在Google上搜索了一下,发现我必须安装MinGW并设置路径然后运行 但它显示 有人可以帮忙吗?(我已经安装了Visual Studio 2010 Ultimate的试用版,并且安装了MinGW C和C ++编译器。操作系统:Windows7。) 有人可