7

最近发布了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

备注

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

2 回答 2

14

剧透警告!!!

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

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

安装步骤

  1. 下载与您的Python架构相匹配的.whl64bit32bit - 有关获取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}
    

    例子:

    "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 个:

同时,我自己进行了一些挖掘,发现(对于win32api.pyd)它是pywintypes38.dll(它是.pyd的依赖项)没有找到(我也在评论中指定了这一点问题)。

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

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

     import pywintypes
     import win32api
    

    如果使用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上)解决了问题(在一个上,并且没有破坏另一个):

      [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中)或symlink,但(个人)我不推荐那些



更新#0

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



脚注

于 2019-10-30T19:21:07.700 回答
-3

设法在 python 3.8 上安装 pywin32 v225 和 pycharm。

在win32api之前导入pywintypes

import pywintypes
import win32api
于 2019-11-01T05:22:33.087 回答