PyWin32 和 Python 3.8.0

Cri*_*ati 7 python windows dll pywin32 python-3.8

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 "<stdin>", line 1, in <module>
ImportError: DLL load failed while importing win32api: The specified module could not be found.
>>> ^Z
Run Code Online (Sandbox Code Playgroud)

注意事项

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

Cri*_*ati 13

剧透警告!!!

应用#2.2。(从下面)到原始.whl s,并在[GitHub]上发布它们:CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/PyWin32/v225 ( win_amd64 , win32 for Python 3.8 )。

安装(其中之一)后,现有代码应该可以OOTB(关于此问题)。

安装步骤

  1. 下载与您的Python架构匹配的.whl64 位32 位- 有关获取Python架构的更多详细信息,请查看[SO]:如何确定我的 Python shell 在 OS X 上以 32 位还是 64 位模式执行?(@CristiFati 的回答) )(问题是关于OSX 的,但其他平台也包括在内)),它很可能是64 位win_amd64),来自上面的URL。 比如我在L:\Downloads下载

  2. 在其上调用PIP安装程序([SO]: How to install a package for a specific Python version on Windows 10? (@CristiFati's answer))。就像是:

    (${path_to_your})python.exe -m pip ${path_to_the_downloaded_pywin32_whl}
    
    Run Code Online (Sandbox Code Playgroud)

    例子:

    "e:\Work\Dev\VEnvs\py_pc064_03.08.00_test0\Scripts\python.exe" -m pip "L:\Downloads\pywin32-225-cp38-cp38-win_amd64.whl"
    
    Run Code Online (Sandbox Code Playgroud)


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

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

同时,我自己进行了一些挖掘,发现(对于win32api.pyd)它是pywintypes38.dll(它是.pyd的依赖)未找到(我还在对问题)。

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

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

    (${path_to_your})python.exe -m pip ${path_to_the_downloaded_pywin32_whl}
    
    Run Code Online (Sandbox Code Playgroud)

    如果使用COM,你需要import pythoncom

  2. pywin32_system32添加到.dll搜索路径(遵循上面的新模型)。有多种方式:

    1. v-python来自问题URL的评论,它提供了一个小片段(我没有测试过)

    2. 我还提交了[GitHub]: mhammond/pywin32 - Support for Python 3.8,我在pywin32.pth文件中执行所有操作(在解释器启动时“执行”,因此无需更改现有代码)。不幸的是,AppVeyor自动化测试存在一个问题,它失败了(但由于其他一些原因),所以它已经卡在那里一段时间了。请注意,在此期间,PR被关闭,另一个(类似)的方式被推倒。请注意,包含修复程序的v226(于20191110发布)不适用于VirtualEnv [SO]: PyWin32 (226) 和虚拟环境(@CristiFati 的回答))。
      无论如何,在本地应用更改(1)(在我的Python VirtualEnv 上),解决了问题(一方面,没有破坏另一个):

      "e:\Work\Dev\VEnvs\py_pc064_03.08.00_test0\Scripts\python.exe" -m pip "L:\Downloads\pywin32-225-cp38-cp38-win_amd64.whl"
      
      Run Code Online (Sandbox Code Playgroud)
    3. 其他方式,如复制.dll s(例如在%SystemRoot%\System32 中),或符号链接它们,但(个人)我不会推荐那些



更新#0

[PyPI]:pywin32 227(解决了这个问题),发布于20191114



脚注


归档时间:

查看次数:

21349 次

最近记录:

5 年 前