我最近从Ubuntu 16.04 LTS升级到18.04 LTS,使用提示和GUI窗口以及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。
还有其他人遇到过吗?这个特殊错误是什么?重新获得虚拟环境功能的最佳解决方案是什么?
答案 0 :(得分:-1)
此问题已通过创建新的虚拟环境解决。创建新的virtualenv
时,安装的Python是2.7.15,这以前可能是问题所在。
创建新的虚拟环境并使用pip
安装所有软件包之后,我的项目特定脚本成功运行。如果您有requirements.txt
文件,这很容易;如果没有,则更麻烦!我强烈建议在Ubuntu升级之前为每个requirements.txt
创建一个virtualenv
。