python - PyWin32 (226) 和虚拟环境
问题描述
[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] 下一代 virtualenv(重写)是一个大重构,似乎没有解决这个问题。
回顾:这个错误(在VirtualEnv上下文中):
- 也适用于其他Python版本(我可以确认v3.7.3(32bit))
- 每次解释器启动时都会发生
总之,不要在(VirtualEnv )虚拟环境中安装PyWin32 226,因为它们最终会处于损坏状态!
PyWin32(官方.whl s)“兼容性表”(没有检查Anaconda(或其他此类工具)):
- “正常”(官方)Python安装:
- v226没问题
- VirtualEnv(以及Python的标准venv):
- v22 5没问题
- 对于Python 3.8.0,[GitHub]:CristiFati/Prebuilt-Binaries - (master) Prebuilt-Binaries/PyWin32/v225应该被使用
已提交[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!
推荐阅读
- c - NTRIPClient 更新 nmea
- python - 从 Facebook 下载数据时的空事件列表
- ajax - iron-ajax 请求导致 spring boot 出现 cors 问题
- angular - Angular 5 路由器在谷歌登录回调中无法正常工作
- java - Selenium WebDriver - 单击“保存”按钮后应用程序变得无响应
- tensorflow - 对张量流的动态 rnn 版本中序列长度的混淆
- c++ - StackString 的 Chromium stack_container 不能工作(至少在 VisualC++ 中)
- java - 自动调整默认形状
- laravel - Laravel:JWT 令牌已过期
- mysql - 连接 MySQL 数据库时出错