【问题标题】:I broke an embedded Python installation with a pip install我用 pip install 破坏了嵌入式 Python 安装
【发布时间】:2018-08-04 13:13:42
【问题描述】:

我在工作中使用内置了 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 而这个新版本运行的是 Python 3.5。我什至尝试卸载并重新安装该软件以进行全新安装,但即使我在新位置重新安装,我仍然会遇到相同的错误。我担心它是特定于 Python 3.5 软件版本的系统范围内的东西。我安装了一个外部 Python 3.5,只是为了检查它运行良好。现在损坏的只是 Python 的软件版本。

【问题讨论】:

  • 了解virtualenv.pypa.io/en/stable中的virtualenv,并使用它来隔离对libs和python版本有不同要求的应用程序。
  • @progmatico:我怀疑 OP 希望访问 嵌入 Python 的软件包中的更新包,此时 virtualenv 将无济于事。 --user 开关确实有助于隔离已安装的软件包,这很有帮助。
  • 这到底是什么软件包?也许有一些选项可以让您的附加软件包正常工作(与第一次修复安装不同的步骤)。
  • @MartijnPieters 感谢您的指点。我读错了,我认为 OP 通过在系统 Python 中安装更新的库来破坏 Python 应用程序。我现在明白该应用程序具有 Python 脚本。在这里帮不上忙。

标签: python pandas numpy pip python-3.5


【解决方案1】:

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

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

首先,您需要使用禁用从该位置加载代码的开关来运行 Python。您可以尝试使用-s switch(禁用USER_SITE 选项)或-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 移动到其他位置(作为备份)。然后尝试在没有-s / -I 开关的情况下再次运行 Python。

【讨论】:

  • 你……已经……救了……我!大声笑我真的不能感谢你。我正在竭尽全力试图纠正我的错误。我对 python 和我的第一个脚本语言只有大约 2 年的时间。虽然我在那两年里走了很长一段路,但我仍然不知道很多。我会非常小心地尝试新事物。有人建议使用 virtualenv 或虚拟机。我不确定我的工作是否会购买虚拟机软件,但如果有任何其他关于测试包安装的建议或提示,他们不会被忽视。非常感谢。
  • @Scolli03:虚拟机很容易安装:lifehacker.co.uk/2010/12/19/…。如果软件不是 GUI,而是针对服务器环境,请考虑使用容器(特别是 docker.com)来创建隔离安装。无论哪种方式,都更容易试验和撤消错误。
  • @Scolli03:对于 Python 外部包,virtual environment 很棒。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-07-17
  • 2012-01-12
  • 1970-01-01
  • 2018-10-24
  • 2012-07-17
相关资源
最近更新 更多