我用 pip 安装破坏了嵌入式 Python 安装

I broke an embedded Python installation with a pip install

我在工作中使用的软件内置了 python 脚本。唯一的缺点是它没有提供当今许多有用的模块。查看论坛和对软件的支持,知识库中有关于如何添加新模块的说明。在某些方面一切都很好,但是在尝试安装 Pandas 时,我一直收到 Numpy 的失败依赖项,即使 Numpy 实际上在该 python 版本的站点包中。

我做了几次其他尝试,然后遇到了这行代码。

python -m pip install --user numpy scipy matplotlib ipython jupyter pandas sympy nose

我用 Python 版本的路径替换了 python 并且安装完成了。但现在 Python 版本已损坏。当我在软件中打开脚本编辑器并尝试 运行 任何代码时,我收到一条错误消息

Cannot initialize the script system: Error in line 1:PyEval_EvalFramesEx returned NULL without setting an error.

即使我尝试在控制台中 运行 那个版本的 Python,光标也只是向下移动一行,没有任何反应。我什至不能再打字了。

旧版本的软件仍然可以正常工作,我相信这是因为它使用 Python 3.4,而新版本是 运行ning Python 3.5。我什至尝试卸载并重新安装软件以进行全新安装,但我仍然遇到相同的错误,即使我在新位置重新安装也是如此。我担心它是系统范围内特定于 Python 3.5 软件版本的东西。我有一个外部 Python 3.5,我安装它只是为了检查它 运行 没问题。只是Python的软件版本现在坏了。

您已经安装了 Python 个项目,其中包含已加载到 Python 二进制文件中的已编译组件。这些组件与您的软件包的嵌入式 Python 版本冲突(可能无法加载它们)。

因为您使用了 --user 开关来安装这些软件包,所以仍然有办法恢复您的安装。这些软件包都已安装到 site.USER_SITE location,这意味着您可以再次手动删除它们。

首先,您需要 运行 Python 使用一个开关来禁用从该位置加载代码。您可以尝试使用 -s switch (which disables the USER_SITE option) or the -I switch(启用隔离模式,忽略环境变量和 USER_SITE 选项)来执行此操作,以验证禁用这些选项实际上会给您一个有效的 Python 提示:

path/to/software/python -s   # or -I

当这有效时,您可以 运行 site 模块作为脚本,打印出 USER_SITE 目录所在的位置:

path/to/software/python -s -m site   # or -I -m site

寻找 USER_SITE: <path> 行,它应该以 site-packages 结尾。然后,将该目录的 contents 移动到其他地方(作为备份保留)。然后尝试 运行 Python 没有 -s / -I 再次切换。