PyWin32 (226) 和虚拟环境

Cri*_*ati 5 python windows pywin32 virtualenv

[PyPI]: pywin32 226已于20191110发布。
适用于大多数Python安装(例如适用于从Python下载的官方版本),但不适用于虚拟环境(例如 使用VirtualEnv ( v16.7.7 )创建,以及(基于进一步研究)Pythonvenv)。
我使用Python v3.8 .0v3.7 .3作为实验室老鼠。这是前者的输出:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\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)
Run Code Online (Sandbox Code Playgroud)

Cri*_*ati 5

注意:我从[SO]: PyWin32 and Python 3.8.0 (@CristiFati's answer)分支了这个答案(以及问题,因为这是一个不同的问题。在进一步操作之前,您可能需要先检查一下。

经过一番挖掘,事实证明这是一个VirtualEnv错误(或者至少,这就是我的看法,因为VirtualEnvsite.py不包含getsitepackages - 尽管它自v2.7以来就存在于Pythonsite.py 中)。有几个问题(即)围绕着这种缺席而开放(例如[GitHub]: pypa/virtualenv - site.getsitepackages() missing),但它们似乎在没有修复的情况下关闭(其中许多是由于不活动)。另外,[GitHub]:[WIP] 下一代 virtualenv(重写)是一个很大的重构,似乎没有解决它。

回顾:这个错误(在VirtualEnv上下文中):

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

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

PyWin32(官方.whl s)“兼容性表”(没有检查Anaconda(或其他此类工具)):

已提交[GitHub]:mhammond/pywin32 - 虚拟环境的解决方法 (VirtualEnv)合并于20191114)。在本地应用更改(有关如何执行的详细信息,请查看参考问题),修复它:

[cfati@CFATI-5510-0:e:\Work\Dev\StackOverflow\q058805040]> sopr.bat
*** Set shorter prompt to better fit when pasted in StackOverflow (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]>
Run Code Online (Sandbox Code Playgroud)



更新#0

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