python - PyWin32 (226) 和虚拟环境

标签 python windows virtualenv pywin32

[PyPI]: pywin32 226已于20191110发布。它作品 大多数 Python 安装(例如,适用于从 Python 下载的官方版本),但 不是 关于虚拟环境(例如 使用 VirtualEnv (v16.7.7 ) 创建,以及(基于进一步研究)Python 的 venv )。我用 Python v3.8 .0 和 v3.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)

最佳答案

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

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

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

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

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

    PyWin32(官方 .whls)“兼容性表”(未检查 Anaconda(或其他此类工具)):
  • “正常”(官方)Python 安装:
  • v226 没问题
  • VirtualEnvs(以及 Python 的标准 venvs):
  • v22 5 没问题
  • 对于 Python 3.8.0,[GitHub]: CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/PyWin32/v225应该使用

  • 已提交 [GitHub]: mhammond/pywin32 - Workaround for virtual environments (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!

    关于python - PyWin32 (226) 和虚拟环境,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58805040/

    相关文章:

    windows - Windows(或其他操作系统)如何更新客户端的后台区域?

    python - Django 无法安装在虚拟环境中。 (允许)

    virtualenv - PyCharm - 自动设置环境变量

    python - 为什么没有用于更高级别语言的简单、跨平台、C/C++ GUI 工具包?

    python - 是否可以将 Google 服务帐户限制为项目中的特定 BigQuery 数据集?

    python - SQL ALCHEMY 关系问题 (M :1)

    c++ - 使用动态链接从 .dll 库调用函数

    python - Django 模板中的数字格式

    java - 如何删除Windows上的临时文件?

    python - 如何仅在 Python 中升级虚拟环境中的包?