我已经在 Debian 11 上运行 VMWare Workstation Player 15(最近是 16)大约 2.5 年了,更新 Player 或 Tools 从未成功过。抛出的错误是字符串编码问题,我心想“不用问了,很快就会修复”。由于 Google 上仍然没有找到任何相关信息,我想是时候了。也许很简单。
https://i.stack.imgur.com/Rd3S8.png
VMWare Player 以 .bundle 形式提供,尽可能接近一键安装程序。这意味着我与更新程序的交互几乎不存在。我得到的只是错误。但是,如果可能的话,我可以复制此时的任何 /tmp/ 文件并重新启动安装程序。
查看源代码,它似乎正在解析一些路径。愚蠢地使用捆绑的 python 运行 site.py 会打印一些内容,但这些内容都没有 ascii 问题。
如果有人
- 知道发生了什么,并能提供解决方案或变通方法
- 了解正在扫描的路径,并能提供查找 ascii 问题的指针
- 知道如何重新启动安装程序,从而可能允许对 ascii 编解码器文件进行 monkeypatch
- 有一些其他的输入,不需要手动下载并重新安装所有更新。
编辑:我找到了 VMWare 存储库的链接(http://softwareupdate.vmware.com/cds/vmw-desktop/ws/16.1.2/17966106/linux/packages/),我在其中为我的 Windows VM 下载了 .tar。由于 vmware-installer 是已安装的二进制文件,因此 vmware-installer --install-component xxx.component.tar 应该可以工作。但是,我遇到了与以前相同的 ascii 问题。只是现在我可以在调试器中运行它了。
答案1
我的理论是,VMWare Workstation Player 嵌入的 Python 版本与您安装的版本不同。
当 python 启动时,它会尝试导入site
模块来调整查找模块的路径。
模块的位置site
由环境变量决定
PYTHONPATH
。该变量指向/usr/lib64/python<version>
,并且它从这里获取模块site
。
简而言之,嵌入式 python 版本尝试导入site
不兼容版本的模块,并失败。
最简单的解决方案(以及对我的理论的检验)是PYTHONPATH
在运行安装之前删除环境变量,这样它就不会使用其嵌入的模块之外的模块:
$ export PYTHONPATH=''
答案2
多年后,我终于解决了这个问题。剧透:这不是编码问题。
VMWare 在很少的 中构建了自己的 PYTHONPATH init.sh
,如果 Python 真的使用它(并且只使用它),那就太好了。安装程序找到它不理解的东西的原因是它.pth
在自己的安装目录中查找文件,但也无意中在本地 Python 安装中查找文件。我有一个easy_install.pth
闲置的,安装程序试图加载它,这导致它失败。我删除了,.pth
现在安装程序、更新程序和编译器都可以工作了。
更多的:https://olgabotvinnik.com/blog/pythonpath-is-a-liar-site-py-and-easy-install-pth-tell/