回顾已发生的事情

回顾已发生的事情

通常会问到的一些前言事项...

OS: Ubuntu 14.04 (amd64)
Python2: /usr/bin/python -V -> Python 2.7.12
Python2default: which python -> /usr/local/bin/python
/usr/local/bin/python -V -> Python 2.7.12
dpkg: dpkg --version -> Debian `dpkg' package management program version 1.17.5 (amd64).
apt: sudo apt --version -> apt 1.0.1ubuntu2 for amd64 compiled on Apr 12 2018 10:14:36
c: gcc --version -> gcc (Ubuntu 4.8.5-4ubuntu8~14.04.2) 4.8.5
llvm: clang --version -> clang version 3.9.1-4ubuntu3~14.04.3 (tags/RELEASE_391/rc2)

到目前为止一切顺利。可能的原因理论如下:

  • 更新了 C 构建系统(注意到最近的 ubunty 更新中有一些 c 升级,预计会在这里看到 c v5,但可能正在等待安装)
  • 安装 llvm 更新至最新版本(用于其他目的,但可能会有影响,即使 llvm 为版本 6,最新的 llvm 14 仍然是 3.9.x)
  • 尝试通过构建将 /usr/local python 更新至版本 2.7.15(我注意到这倾向于重新编译 python 模块,在我看来 2.7.15 py update 有点过于宏大,可能会破坏之前安装的东西)

我不确定是哪个问题导致了这个问题,可能是我在某个时候做错了什么。我尝试了很多方法(研究了很多类似的问题)来修复我的问题并恢复包系统。

在此过程中,我了解到 Ubuntu 非常依赖 Python,这令人震惊。我梦想着可以解决这个问题的方法:

  • 专门安装了一些最小的 Python 供系统(包)使用。这里的问题是,从用户端来看,系统 Python 很容易受到攻击,只要用户想要迁移到更高版本的 Python,他就会严重影响系统功能。即使有替代方案(/usr/local/bin),用户也可能错误地干扰默认安装,从而带来很高的风险。
  • 拥有基于编译的二进制文件和一些外部脚本的打包系统,而不是使用 Python 脚本来完成工作。就像我的情况一样,损坏的 Python 阻止我安装(或修复可能损坏的)dpkg(以及可能的一些系统库)
  • 有使用不同工具工作的替代包装系统,因此可以使用替代包装安装程序重新安装正确的包装
  • 有审计系统(可以告诉用户什么地方可能出了问题 - 例如:包 pacx.x 期望 xxx 文件位于 yyy 位置。如果某些东西不匹配(因为用户安装了其他东西来使用 x-else 并弄乱了库)。
  • 有 0 安装恢复最小系统 - 用户可以通过 unix 工具安装的东西,以达到顺利运行某些包装系统的程度,直到更复杂或主要的系统恢复到位。

好啦,理论已经够多了!

步骤 1:尝试修复依赖项中出现的任何损坏:

$ sudo apt-get -f install
Reading package lists... Done
Building dependency tree       
Reading state information... Done
Correcting dependencies... Done
The following extra packages will be installed:
  python-distlib
The following NEW packages will be installed:
  python-distlib
0 upgraded, 1 newly installed, 0 to remove and 13 not upgraded.
9 not fully installed or removed.
Need to get 0 B/2,120 kB of archives.
After this operation, 559 kB of additional disk space will be used.
Do you want to continue? [Y/n] 
dpkg: error processing package dpkg (--configure):
 package is in a very bad inconsistent state; you should
 reinstall it before attempting configuration
Errors were encountered while processing:
 dpkg
E: Sub-process /usr/bin/dpkg returned an error code (1)

步骤2:建议恢复 dpkg。

$ sudo apt-get install dpkg
Reading package lists... Done
Building dependency tree       
Reading state information... Done
dpkg is already the newest version.
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 python-pip : Depends: python-distlib but it is not going to be installed
              Recommends: python-dev-all (>= 2.6) but it is not installable
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

步骤 3:重复步骤 1 - 我们得到相同的结果

步骤 4:尝试强制 dpkg 重新安装

$ sudo apt-get install --reinstall dpkg
Reading package lists... Done
Building dependency tree       
Reading state information... Done
You might want to run 'apt-get -f install' to correct these:
The following packages have unmet dependencies:
 python-pip : Depends: python-distlib but it is not going to be installed
              Recommends: python-dev-all (>= 2.6) but it is not installable
E: Unmet dependencies. Try 'apt-get -f install' with no packages (or specify a solution).

步骤5:好的好的这个讨厌的python-distlib必须先安装......

$ sudo apt-get install --reinstall python-distlib
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following NEW packages will be installed:
  python-distlib
0 upgraded, 1 newly installed, 0 to remove and 13 not upgraded.
9 not fully installed or removed.
Need to get 0 B/2,120 kB of archives.
After this operation, 559 kB of additional disk space will be used.
dpkg: error processing package dpkg (--configure):
 package is in a very bad inconsistent state; you should
 reinstall it before attempting configuration
Errors were encountered while processing:
 dpkg
E: Sub-process /usr/bin/dpkg returned an error code (1)

步骤 6:现在我的情况很糟糕。建议(重新)安装 dpkg 系统,我尝试了步骤 2、3 和 4(结果令人沮丧)

我现在能做什么?

我尝试入侵 /var/lib/dpkg/status,尝试重新创建存储库列表 /etc/apt,尝试通过从官方 python 源代码进行编译来替代安装 Python 12、14 和 15(都没有帮助所以我将其保留在 12)。

事实上,我知道还有更多损坏的软件包需要修复(示例中未列出)。有一段时间,系统损坏严重,我失去了图形环境,不得不从终端工作(幸运的是,lin-unix 不像 windows 或 osx 那样依赖图形)。我不得不重新安装 unity-desktop,这样我至少可以回到图形模式(损坏的 python 非常有影响力,甚至 ubuntu 中对图形用户界面的依赖也很容易被它或至少 unity 的依赖所消除)

我知道最后的办法是从 CD 安装相同或更新版本的 Ubuntu(14.04 或 ubuntu 16)。我宁愿留在 14,因为我想完成一些测试,而且它在这个特定的硬件上运行良好。

最后——问题是:

我还可能尝试什么方法来恢复包系统到合理的功能状态,比如使用一些替代的包安装系统或者通过获取/下载一些包并最终手动编译和/或安装它们。

我需要修复:

  • python 默认/系统安装(无论处于何种稳定状态,即使这意味着降低版本 - 据我所知,我记得安装时的原始 python 是 2.7.6(现在完全消失了)
  • 软件包

对于后人来说,这是 2018 年 7 月。

欢迎所有提示,我几乎不会让事情变得比现在更糟 - 所以请大胆提出想法 ;)


编辑1:

我发现 ppa jonathoff 可能与将 Python 2.7 更新至最新版本 2.x

可能是我自动从 ppa repo 中获取了 2.7.12。我不记得我什么时候把这个 ppa 添加到我的 repo 列表中,但我记得使用过这个配方。

目前我正在试图确定为什么我无法获取python27包文件。


编辑2:

好的。这是我目前的工作理论:

我已经添加了https://launchpad.net/~jonathonfppa 添加到我的列表中。随着时间的推移,系统 python 从 2.6 移至 2.7。直到 py 2.7.12 一切都正常。一旦 python27 移至 2.7.14 一切都变得糟糕。

我注意到 python 版本已经移动,但我认为这是正常的 ubuntu 升级。

现在,如果你探索 Jon 的项目,你会发现当前的 python2.7 实际上是 2.7.14(并且根据他的页面,很有可能是针对 ubuntu 16 的。请参阅https://launchpad.net/~jonathonf/+archive/ubuntu/python-2.7)如果python27这个版本对我来说不起作用。

我认为我尝试通过自己从源代码构建 2.7.12 来安装它,但是该版本本身虽然很好,但它是为用户/编程而制作的,并且与 ubuntu 版本的系统 python 不同(这里有一些我在其他地方读过的细微差别,但我希望这会起作用。但没有。这是一个糟糕的选择,尽管危急时刻需要采取紧急措施)。

在原始 ubuntu 档案系统中,Ubuntu14 的 python 可能仍为 2.7.6,因此即使我尝试在 ubuntu 发布档案中找到 python27,也可能找不到它。(请有人证明我错了,并告诉我在哪里可以找到不同版本的 python27)

现在的问题是,我可以在哪里找到这个 ppa 的先前存档并尝试将 python 恢复到可以运行的版本。

对我来说,最后一个与 apt 配合良好的版本是 2.7.12。

现在的问题是,哪里可以找到那个特定的档案?如果它没有随着时间而丢失的话。

答案1

您可以尝试手动修复dpkg(下载并解压到文件系统):

wget http://mirrors.kernel.org/ubuntu/pool/main/d/dpkg/dpkg_1.17.5ubuntu5.8_amd64.deb

ar x dpkg_1.17.5ubuntu5.8_amd64.deb
sudo tar -xvf data.tar.gz -C /

然后重新安装:

sudo apt-get install dpkg --reinstall

使用以下命令删除本地 Python

sudo rm /usr/local/bin/python*

删除python相关的PPA:

sudo ppa-purge ppa:jonathonf/python-2.7

从存储库安装普通 Python

sudo apt-get install --reinstall libpython-stdlib python-minimal python2.7 \
python-apt python-distlib libpython2.7-minimal libpython2.7-stdlib

并修复整个系统:

sudo apt-get install -f
sudo dpkg --configure -a

apt-get在最后阶段,使用和检查系统一致性debsums

sudo apt-get check
# debsums
sudo apt-get install debsums
sudo debsums_init
sudo debsums --changed --silent
# afterwards reinstall listed packages with
# sudo apt-get install --reinstall package-name

答案2

我在这里提供答案并不是因为 N0rbert 的答案不好。相反,N0rbert 的答案 1. 鼓舞人心,2. 对我非常有用,因此我会接受它作为问题的答案,因为本质上就是这样。感谢 N0rbert 的支持和耐心。

我的回答是阐明一些副作用和边缘情况。

我可以在问题中做到这一点,但我认为问题应该保留,因为问题和答案是两码事。由于有很多内容需要涵盖,而且我必须从我的日志中挖掘一些示例,所以这个答案在完成之前将被编辑多次,直到我找到发生了什么以及我如何克服障碍的要点。

回顾已发生的事情

我在修复的过程中学到了...

  1. 有一刻我意识到我无法在我的 Ubuntu14 上安装或更新任何东西(它可能是较新的版本)

  2. 我提出了一个可能出错的理论,因为我当时正在尝试构建一些新软件,但有些东西出现了问题,所以我尝试为该版本安装各种修复程序。但这些东西只是开始出现问题,但并没有严重损坏。

第 1 课:对问题原因有影响的因素来自不同的角度,而不是我的理论。我认为我最近安装的 LLVM 影响了 Python,而问题的罪魁祸首是我为解决其他问题而安装的 PPA 存储库。问题是我之前(1 年多)安装了有问题的 PPA,然后忘记了它在那里。Ubuntu 默默地更新了新内容(即使这并不推荐)。我这个糟糕的决定稍后会详细说明。——
教训的寓意:不要理论化它可能是什么 - 尝试仔细调查和思考事实。

  1. 尝试了各种方法,直到我陷入无法恢复的状态。本质上,我破坏了 Linux 中的两个重要的东西:1.dpkg和 2. 系统python。一瞬间,整个系统崩溃了,以至于我失去了图形环境,首先是一些应用程序开始崩溃(这种情况持续了几个月),最后在最低点,我只能从控制台终端运行我的 Ubuntu(Alt-F1Alt- F4)。在 Linux 上呆了很长时间,我最初只使用命令行。当然,当你有图形时事情就容易多了,主要是因为你可以运行浏览器来研究潜在的解决方案。我是一名程序员,我的种族以有点教条主义而闻名(教条主义 = 相信狗的自动化 :) )这意味着我会坚持某些想法而忽略潜在的事实。

lesson2:我相信当操作系统有问题时,有两种方法可以解决问题。1. 重新安装整个系统 2. 尝试修复。我过去尝试过这两种方法。最近,我意识到选项 2 更有价值。通过尝试修复问题,我学到了很多关于操作系统的知识。我在某种程度上是无知的。现在,如果我只是重新安装操作系统,我最终会遇到更麻烦的情况,最终会促使我重新安装,这意味着所有微调和各种其他数据都将丢失。——
教训的寓意:学习,不要走捷径,要大胆。最终,这是值得的。

  1. 我已经在这里沟通了问题,并与真人进行了交谈。感谢 JonathonF 对 PPA 目的的宝贵见解以及有关档案的信息。

第 3 课:在调查过程中,我了解到 Jonathon 并不推荐使用他的 PPA,如果你要使用,请自行承担风险。事实上,我的 Linux 并不是关键任务 - 它是我的业余爱好电脑(但它对我很有价值,因为我用它做各种各样的事情:从网上银行到评估软件或我将在专业上使用的编程语言。)
-- 课程的寓意:如果你不能自己弄清楚所有事情 - 请与人交谈。他们所做的和他们会告诉你的事情中有很多有价值的提示。但请尝试仔细阅读,尤其是 PPA 的目的。

康复之路

  1. 第一件有影响的事情就是修复dpkg

NOrberts 的回答开头就提到了这一点。下载.deb、提取文件并手动执行所有这些软件包工具都会自动为您执行的操作。

sudo apt-get install dpkg --reinstall

恶性循环
对我来说不起作用,因为apt在我看来,它依赖于内置的脚本python,而python模块不想通过apt(恶性循环)安装。所以在我python先修复之前,我无法修复此步骤。这里使用的声明python是一种感觉。事实上,最后我从未尝试安装/修复apt程序来使系统正常工作 - 这是有原因的。我无法证明这一点,但对我来说,它仍然是强大的自动化狗。

N0rbert 的第二部分建议删除替代方案python

我已经安装了替代方案python,因为我需要更新的版本来尝试做某事(不记得当时具体是什么)。

本质上,我安装了一堆不同的 Python,但并不清楚哪个 Python 在使用什么。这部分是由于 Ubuntu 经验,部分是由于 Python 经验。Ubuntu 运行自己的版本,原因众所周知,在某些情况下,这没有帮助,因为文档可能会误导您,直到您了解差异。问题是我不知道如何正确安装系统 Python。它是在操作系统安装期间预先安装的,建议保持不变(尽管这一政策可能会带来其他风险)。另一方面,安装程序通常倾向于不与用户交谈。即使我通过不同的配置或安装方式做错了什么,我也不知道。最重要的是,我没有在任何地方找到如何修复系统 Python 的文档。事实上,有很多方法可以告诉你怎么做:

sudo apt-get install python27

在正常情况下,这可能可以解决问题,这意味着您已经python相当顺利地工作并且apt正在为您工作。

Python 问题的第一部分是我的默认 Python 是替代 Python。无论我做什么,实际上都没有击中系统 Python。

因此,N0rbert 的另一个提示至关重要 - 删除对替代 Python 的任何引用。由于我通过编译 Python 源代码并从中安装来安装此 Python,因此此 Python 不是正常软件包系统的一部分。直接从磁盘中删除它是 N0rbert 建议的,这是我做的第一件事(如果需要,我可以轻松恢复它)。

其他一些提示建议卸载 Python。当我尝试卸载时,它列出了一长串要卸载的项目。我还没准备好——有很多应用程序和其他东西,我想——谁会重新安装所有这些以及它会做什么。稍后再谈这个。

由于无法卸载系统 Python,因此唯一的可能性就是尝试强制安装它。

为了实现这个目标,我不知道尝试了多少不同的方法。没有一个可以替代系统 Python。有那么一刻,我绝望了,因为 Python 最好的情况下是 2.7.12(代替系统 Python)。原始的 ubuntu 14 发行版硬性固定在 2.7.6。在我看来,这个版本太旧了。我原本以为 ubuntu 通过正常更新会升级到 2.7.9 或 2.7.10,但事实并非如此。如果你查看 ubuntu 档案,只显示有包的 Python 叫做 python27,实际上它是 python 2.7.6。

这就让我想到了一个问题——为什么当我尝试安装 pyton27 时得到的是无法安装的 python 2.7.14,但是当我获得 /usr/bin/python 版本(指向 python2,而 python2 又指向二进制的 python27)时,我经常得到的是 python 2.7.12。

经过几天的睡眠思考,我得出结论,我不知道 2.7.12 和尝试过的 2.7.14 来自哪里。与此同时,我尝试安装 2.7.15 作为替代方案 - 效果很好,我想 - 好吧,也许我可以用 .15 做得比以前的版本更好。这是一个错误。

有趣的是,/usr/bin无论我做什么,2.7.12 都非常有弹性,保持相同的版本。

这让我产生了怀疑,调查显示我有 Jonathon 的 PPA,而在他的 PPA 中,最新的 python27 实际上是 2.7.14。由于 2.7.12 对我来说仍然有效且副作用极小,所以我给 Jonathon 发了一封电子邮件,告诉他他是否有 python27 的早期版本,例如 2.7.10(在安装中提到过)或者 2.7.12 甚至一些我可以尝试安装的更早版本。Jonathon 很快就回复了,并给我看了他的档案(也可以在线获取),但在他的档案中我发现最早的 python27 版本实际上是 2.7.12,这就是为什么这个版本一直被保留的原因。事实上,Jonathon 提到他目前正在为 Ubuntu 16 构建,很快他将停止这样做,并从今年秋季开始为 Ubuntu 18 构建。他的档案中的 Python27 甚至不是为我的 Ubuntu 版本构建的。哇。我发现我刚才做出了错误的决定。

我从 apt 列表中删除了所有 PPA。我甚至删除了默认的 ubuntu 列表(这个决定有多糟糕,后面会讲到)

有一刻我以为我完了。没有办法再让我回到以前的状态。有一段时间我考虑了很多事情,包括安装 ubuntu16 以使用新设置进行附加。

APT 仍然有故障,待处理的 Python 部分不想安装。

然后我决定了。我将尝试以 hack 或非 hack 方式安装 ubuntu 提供的原始 python 2.7.6。要么这样做,要么什么都不做。

但事实证明,这也不是件容易的事。由于 APT 已损坏,我需要一种安装方法,于是我开始学习dpkg。显然,APT 是 DPKG 的良好前端,实际上正是它dpkg完成了艰苦的工作。

如果我有 Ubuntu CD 来安装这个操作系统,那就简单多了,但在过去几年里我多次搬家之后,这张 CD 不知道在哪里了。该死。

幸运的是,互联网是一个庞大的图书馆,因此可以通过档案网站获得帮助。这个网站派上了用场:https://pkgs.org/

我猜你需要的任何软件包都可以在包括 ubuntu 在内的多个发行版中找到。

要下载哪个 .deb?

这构成了主要问题。APT 无法工作也是因为依赖关系可能被破坏。这是任何 Linux 发行版都可以改进的 - 某种审计系统会告诉您哪个包中的哪个文件与原始包中的文件不同。

我不知道需要安装什么档案,也不知道如何安装它,但即使在最坏的情况下,由于这些 .deb 是档案,我最终会提取它们并用原件替换文件。

事实上,这并非真正必要。DPKG 可以完成这项工作(前提是它已恢复到相当好的工作状态,N0rbert 任务 #1 确保了这一点)。虽然这并不理想,但 DPKG 似乎是二进制程序,因此如果数据正常,它会运行良好。

我发现有安装dpkg选项。-i

所以我下载了.deb并且:

dpkg -i dpkg_1.17.5ubuntu5.8_amd64.deb

其实还不错。apt别再抱怨dpkg配置不好了。这已经是好风了。

值得一提的是,我并不是立即就到达了这一点,而是经过反复试验,意识到 apt-get 不会为我完成安装的清理工作。我不确定 Ubuntu 将软件包的元信息保存在哪里(我怀疑这是在 /var/lib/dpkg/status 文件中),因为侵入软件包的状态并不总是能产生适当的效果。我仍然相信应该开发某种审计工具来帮助比较文件中的实际内容与安装记录中的内容。

APT 系统是模块化的,一个东西可能不起作用,但另一个东西也可能起作用。我了解到我可以这样做:

apt-get download python

这将为你提供某个版本的 Python,但可能不是你想要的。在上述 Ubuntu 14 情况下,将为你获取 Python 2.7.5。(如果你只有系统定义的源 - 这是默认的)

此外,此功能很有意义,因为它会apt在安装前下载内容。只是我从未见过这个,我总是看到类似这样的内容wget site bla bla。我相信apt-get download这是更安全的选择。使用它。

apt-get download python27

会将一些 .deb 档案保存到您的本地磁盘。我不需要全部。

调查显示我需要这个文件/usr/bin/python27,但不是随便什么/usr/bin/python27文件,因为我的/usr/bin/python27版本是 2.7.12,我决定恢复原来的版本,即 2.7.6。现在 Ubuntu 中有大约 2000 多个 python 包,我需要包含此文件的存档。查看存档后,我意识到只有一个包包含此文件:python2.7-minimal_2.7.6-8_amd64.deb

因此我用 dpkg 安装了它:

sudo dpkg -i libpython2.7-minimal_2.7.6-8_amd64.deb 

dpkg: warning: downgrading libpython2.7-minimal:amd64 from 2.7.12-1~14.02 to 2.7.6-8
(Reading database ... 1548765 files and directories currently installed.)
Preparing to unpack libpython2.7-minimal_2.7.6-8_amd64.deb ...
Unpacking libpython2.7-minimal:amd64 (2.7.6-8) over (2.7.12-1~14.02) ...
Setting up libpython2.7-minimal:amd64 (2.7.6-8) ...

后续步骤有点令人震惊。我养成了一个习惯,sudo apt-get -f install几乎每次执行理论或试验命令后都会这样做,希望这能解决其余问题。事实上,一旦我将 2.7.6 放在原始位置(覆盖后续版本),-f 安装选项就会显示一长串应用程序和库:

0 upgraded, 3 newly installed, 556 to remove and 8 not upgraded.
10 not fully installed or removed.
Need to get 0 B/354 kB of archives.
After this operation, 1,748 MB disk space will be freed.
Do you want to continue? [Y/n] y

这是一个转折点。我要么这样做,要么选择其他选项(从头开始安装 Ubuntu)。在执行此操作之前,我在终端中对所有历史记录进行了快照,这样即使我删除了所有依赖于更高版本的 Python 的库和包,也许如果我需要其中将被删除的某些东西,至少我会有一个需要安装的名称列表。

于是我按了 Y。

做饭花了一段时间。另一个问题开始出现,一条害羞的消息:

WARNING: The following packages cannot be authenticated!
  libjack0 jackd1 jackd1-firewire
Install these packages without verification? [y/N] y

本质上我别无选择,只能不经验证就安装它。

现在,我之前提到过,删除所有软件存储库是一个糟糕的决定(决定逐个切换它们)。我选择了离我更近的镜像源站点,而不是主 Ubuntu 站点。也许是因为没有正确安装安全密钥,所以弄乱了。我永远不会知道主要原因是什么。

此时我还没有意识到这一点有多重要,所以未经身份验证的警告在后续命令中一直跟着我。但从另一个角度来看,安装正在运行,所以我并不认为这对于绝望的情况至关重要。这已经是全有或全无,所以只要它能正常工作

后来我切换来看看我是否可以运行“软件更新程序”,希望更新程序能够解决其他依赖关系。但软件更新程序很严格。它拒绝安装任何更新或修复,至少在身份验证设置不正确之前。我发现了很棒的 apt 命令,例如和,sudo apt-key update它们sudo apt-key list并不是立即有用,但在后来的某个时候它们确实变得有用。

我发现这还有其他有用的有趣方法:

apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv-keys EEA14886 

将最后一个替换为您需要的密钥。此外,还有“密码和密钥”应用程序,我发现它不是特别友好或有用(除了发现各种登录的一些旧密码)

最终,通过删除所有 .gpg 文件,这个问题得以解决/etc/apt/trusted.gpg.d/。之前我曾将它们移到其他地方进行备份,以备再次需要时使用。

这里有帮助的是:

sudo apt-get install launchpad-getkeys
sudo launchpad-getkeys
sudo apt-get update

launchpad-getkeys 是一款有趣的软件,简单但有效。首先,它会读取您丢失的所有钥匙,然后尝试检索它们。节省了大量的手动工作。

现在我可以使用 apt-get 正确地重新安装 dpkg 和 python2.7。

结束?

有人可能认为这个故事已经结束了。系统恢复了。更新工作正常。软件更新工作正常。卸载的软件列表经过一些操作并恢复了一些 ppa,重新开始运行。

但在救援工作取得显著成果的同时,骄傲自大还为时过早。

为了不让这个故事无休止地继续下去,以下是我后来修复特定用途物品时学到的几点要点:

  • mod_wsgi 实际上无法在 2.7.6 上运行(所以我渴望拥有一些更高版本,也许这就是我首先寻找系统 python 更新的原因。
  • Flask 和 Virtualenv 表现不佳。发现它们会包含一些命令,/usr/local/bin因此我必须pip uninstall删除命令,然后将其正确重新安装到系统 python 中,不是使用 pip,而是使用apt-get install python-flask...总的来说,/usr/local/与 python 相关的问题一直出现在各种地方。我以为我删除了所有与 python 相关的东西,/usr/local但 pip 安装的 python 模块有问题,所以每当我遇到问题时,我都会先执行pip uninstall然后正确安装它。
  • 我最初觉得安装 llvm(和更新 C 编译器)时出了点问题,这并非毫无根据。事实上,除了 JonathonF 的 PPA 之外,还有一个对系统 Python 进行了重大更改的 PPA:ppa:ubuntu-toolchain-r/ppa。事实上,当我重新考虑这个问题时,系统 Python 突然从 2.7.6 升级回了 2.7.12。但现在整个系统都正常工作,甚至 mod_wsgi 和 virtualenv 也是如此。最后一个(virtualenv)至关重要,我将确保在实验时更多地使用它,即使是通过虚拟环境来处理某个版本的 Python 并尝试弄乱任何东西。至少如果我弄乱了 Python,我会弄乱虚拟环境中的那个 ;)

大家好,tldr; :)

相关内容