Python 虚拟环境因升级到 Ubuntu 18.04 而损坏

Python virtual environments broken with upgrade to Ubuntu 18.04

我最近从 Ubuntu 16.04 LTS 升级到 18.04 LTS,使用提示和 GUI windows 以及 Ubuntu 软件更新程序完成升级。

在升级之前,我有多个虚拟环境 (virtualenv),每个环境都安装了一组广泛的 Python 软件包。

当我激活 virtualenv 时,任何 Python 命令或 import 语句都会导致 ImportError: cannot import name _remove_dead_weakref。例如,pip freeze 结果:

$ pip freeze
Traceback (most recent call last):
  File "/home/pwright/virtualenvs/btac-web-plots/bin/pip", line 7, in <module>
    from pip._internal import main
  File "/home/pwright/virtualenvs/btac-web-plots/local/lib/python2.7/site-packages/pip/_internal/__init__.py", line 5, in <module>
    import logging
  File "/usr/lib/python2.7/logging/__init__.py", line 26, in <module>
    import sys, os, time, cStringIO, traceback, warnings, weakref, collections
  File "/usr/lib/python2.7/weakref.py", line 14, in <module>
    from _weakref import (
ImportError: cannot import name _remove_dead_weakref

尝试启动 ipython 会话时出现同样的错误:

$ ipython
Traceback (most recent call last):
  File "/home/pwright/virtualenvs/btac-web-plots/bin/ipython", line 7, in <module>
    from IPython import start_ipython
  File "/home/pwright/virtualenvs/btac-web-plots/local/lib/python2.7/site-packages/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "/home/pwright/virtualenvs/btac-web-plots/local/lib/python2.7/site-packages/IPython/core/application.py", line 16, in <module>
    from copy import deepcopy
  File "/usr/lib/python2.7/copy.py", line 52, in <module>
    import weakref
  File "/usr/lib/python2.7/weakref.py", line 14, in <module>
    from _weakref import (
ImportError: cannot import name _remove_dead_weakref

我的大多数虚拟环境都有 Python 2.7.12,而我的系统 Python 是 2.7.15。

有没有人遇到过这个?这个特定错误是什么?恢复虚拟环境功能的最佳解决方案是什么?

已通过创建新的虚拟环境解决此问题。创建新 virtualenv 时安装的 Python 是 2.7.15,这可能是之前的问题。

创建新的虚拟环境并使用 pip 安装所有包后,我的项目特定脚本 运行 成功。如果你有一个 requirements.txt 文件,这很容易,如果没有,那就更乏味了!我强烈建议在 Ubuntu 升级之前为每个 virtualenv 创建一个 requirements.txt