PyWin32 (226) 和虚拟环境

PyWin32 (226) and virtual environments

[PyPI]: pywin32 226 has been released on 20191110.
It works on most of the Python installations (e.g. works on the official versions downloaded from Python),但在虚拟环境中不是例如 使用VirtualEnv (v16.7.7),以及(基于进一步研究)Pythonvenv)。
我用了Pythonv3.8.0v3.7.3 作为实验鼠。这是前者的输出:

[cfati@CFATI-5510-0:e:\Work\Dev\Whosebug\q058805040]> "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\Scripts\python.exe" -c "import win32api"
Fatal Python error: init_import_size: Failed to import the site module
Python runtime state: initialized
Traceback (most recent call last):
  File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site.py", line 769, in <module>
    main()
  File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site.py", line 746, in main
    paths_in_sys = addsitepackages(paths_in_sys)
  File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site.py", line 279, in addsitepackages
    addsitedir(sitedir, known_paths)
  File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site.py", line 202, in addsitedir
    addpackage(sitedir, name, known_paths)
  File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site.py", line 170, in addpackage
    exec(line)
  File "<string>", line 1, in <module>
  File "e:\Work\Dev\VEnvs\py_064_03.08.00_test0\lib\site-packages\win32\lib\pywin32_bootstrap.py", line 14, in <module>
    for maybe in site.getsitepackages():
AttributeError: partially initialized module 'site' has no attribute 'getsitepackages' (most likely due to a circular import)

注意:我从 分支了这个答案(以及问题),因为这是一个不同的问题。在继续之前,您可能需要检查一下。

经过一番挖掘,发现这是一个 VirtualEnv bug(或者至少,我是这么看的,因为 VirtualEnvsite.py 不包含 getsitepackages - 虽然它存在于 Pythonsite.pyv2.7)。
有几个问题(曾经)围绕这种缺席展开(例如 [GitHub]: pypa/virtualenv - site.getsitepackages() missing), but they appear to be closed without a fix (many of them due to inactivity). Also, [GitHub]: [WIP] The next-gen virtualenv (rewrite),这是一个很大的重构,似乎没有解决它。

Recap: 这个错误(在VirtualEnv上下文):

  • 也适用于其他Python版本(我可以确认v3.7.332bit ))
  • 每次解释器启动时发生

总而言之,不要在 (VirtualEnv) 虚拟环境中安装 PyWin32 226,因为它们最终会处于崩溃状态!

PyWin32(官方.whls)"compatibility table"(没查Anaconda(或其他此类工具)):

已提交 [GitHub]: mhammond/pywin32 - Workaround for virtual environments (VirtualEnv)合并于 20191114)。在本地应用更改(查看参考问题以获取有关如何操作的详细信息),修复它:

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

[prompt]> ".\venv_py_064_030800\Scripts\python.exe" -m pip list
Package    Version
---------- -------
pip        19.3.1
pywin32    226
setuptools 41.6.0
wheel      0.33.6

[prompt]> ".\venv_py_064_030800\Scripts\python.exe" -c "import win32api"

[prompt]>



更新#0

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