导入错误:无法导入名称“urandom”。

19

当我在运行虚拟环境(workon django1.2)时,尝试运行我的任何项目时,我遇到了这个错误:

错误信息:

ImportError: cannot import name "urandom"

在研究了这个问题之后,我发现这里有警告:

警告:Python修补程序版本2.6.8、2.7.3、3.1.5和3.2.3包含的更改会导致“import random”在任何在早期版本的Python 2.6/2.7/3.1/3.2上创建的 Unix主机上的virtualenv上失败,如果底层系统的Python已经升级。这是因为virtualenv使用系统Python的标准库, 但包含它自己的Python解释器副本,所以升级系统Python会导致Python解释器版本和标准库版本不匹配。 可以通过删除$ENV/bin/python并在相同的目标目录中使用升级的Python重新运行virtualenv来解决此问题。

但是运行ENV/bin/python给了我这个结果:

bash: ENV/bin/python: No file or directory of this type

我应该在哪里找到我的virtualenv目录?

我对virtualenv知之甚少,请多包涵。

谢谢。


2
请注意,$ENV 是一个 shell 变量,代表您的虚拟环境的位置,它并不是字面上的 ENV - Pedro Romano
@PedroRomano 但我不知道我的workon在哪里,我使用workon +虚拟环境的名称来激活它。 - Armance
@PedroRomano,它起作用了,我删除了Python目录,现在我不知道如何执行第二步:可以通过删除$ENV/bin/python并在升级的Python上重新运行virtualenv来修复它。 - Armance
4
这是一个很有用的问题,有一个有用的回答。我想发表一个回答:主要的Python二进制文件和虚拟环境中的二进制文件不同步。只需复制它:激活有问题的虚拟环境,然后执行 cat /usr/bin/python2.6 > \which python``。 - Paulo Scardine
你可以投票以重新开放问题。 - Armance
显示剩余3条评论
1个回答

32

您需要重新创建您的虚拟环境。

我猜测以下事件发生了:

  1. 您创建了一个虚拟环境
  2. 在以后的某个时间点,系统的Python安装被更新了urandom安全性修复程序。
  3. 由于您在问题中提到的问题,您的虚拟环境(从先前的Python版本发布中创建)不再起作用。

最简单的解决方法是删除您的虚拟环境并创建一个新的虚拟环境:

$ rm -r VIRTUALENVDIR
$ virtualenv VIRTUALENVDIR
$ . VIRTUALENVDIR/bin/activate

# then pip install any required packages, if your project has a requirements.txt file,
# this is simply:
$ pip install -r requirements.txt

# otherwise, you will have to install each package
$ pip install packagename
$ pip install packagename==version

关于“无法打开文件manage.py”的错误:是哪个命令行导致了这个错误?你是否运行了:“$ python manage.py runserver”? - codeape
1
关于重新创建虚拟环境: 您可以使用pip freeze命令列出虚拟环境中安装的软件包。将该命令的输出保存到文本文件中,并在新环境中使用pip install -r filename.txt进行安装。 - codeape
你可以使用 rmvirtualenv 命令来删除一个虚拟环境。 - dusan
3
简单解决方法:使用 cdvirtualenv 命令,然后执行 cat /usr/bin/python2.6 > bin/python 命令。该操作会使 Python 版本更改为 2.6。 - Paulo Scardine
最简单的通常是最好的。谢谢! - Ctrl-C
显示剩余4条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接