PyWin32(226)和虚拟环境

5

[PyPI]: pywin32 22620191110发布。它适用于大多数的Python安装(例如,可以在从Python下载的官方版本上使用),但不适用于虚拟环境(例如,使用VirtualEnv v16.7.7创建的环境以及(根据进一步的研究)Pythonvenv)。我使用了Python v3.8v3.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)

在他们的代码库上提出一个问题? - r.ook
尚未测试,问题可能仍存在... 您考虑过使用Python标准的_venv_吗?(假设您迄今为止一直在使用virtualenv - sinoroc
1
@sinoroc:说实话,我没有(感谢建议!)。我会尝试一下,虽然我预计一切都会OK - CristiFati
@sinoroc:做了一些快速测试,行为与 https://dev59.com/brfna4cB1Zd3GeqPoTbL 中描述的完全相同。我更新了我提交的PR来处理这种情况。 - CristiFati
1个回答

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] The next-gen virtualenv (rewrite) 这是一个大的重构,似乎也没有解决它。

简述:这个错误(在VirtualEnv上下文中):

  • 也适用于其他Python版本(我可以证实对于v3.7.332位))

  • 每次解释器启动时都会发生

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

PyWin32(官方的.whls)“兼容性表”(没有检查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]>

更新 #0

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


1
谢谢!你至少解决了我的问题 ;) 降级pywin32版本可以解决它。 - PySaad

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接