5

我正在处理一个旧的 Django 项目(Django 版本 1.3.2,Python 版本 2.6.6)。运行“python manage.py runserver”给了我:“ImportError: cannot import name urandom”。

在线搜索会返回一堆关于通过重新运行 virtualenv 来解决问题的结果。这没有任何意义,因为我从未安装过 virtualenv 并且之前的工作正常......所以我认为这一定是我的 python 安装有问题。

我决定按照Django 安装指南运行来删除并重新安装 Django

pip install Django

这样做django-admin.py startproject project给了我同样的 ImportError。所以我再次使用pip uninstall Django.

现在运行python启动 python2.6.6 shell,输入from os import urandom给我“ImportError:无法导入名称 urandom”消息,而在执行相同操作时python2.7不会给出这样的错误。

这里发生了什么?是什么破坏了我的 python2.6.6?

4

1 回答 1

0

虽然我不知道是否可以提供更多有用的评论可用的信息,但这里是我对失败的可能原因的尝试:

  1. 您的操作系统不再正确地为 Python 2.6.6 提供 urandom。从我在这里可以用“import random”告诉 /dev/urandom 不存在时的 OSError ,这应该导致 OSError 或 NotImplementedError (而不是 ImportError ),但文档以前是错误的。检查您是否可以进入系统的 urandom 的一个不错的方法是运行:

    from posix import urandom
    

    如果这不起作用,请尝试:

    from os import O_RDONLY
    aURandom = open("/dev/urandom", O_RDONLY)
    

    如果两者都不起作用,您可能正在处理无法以任何方式访问系统功能的问题。这可能意味着操作系统设置在某种程度上是罪魁祸首。您可能想要实际检查 urandom 在您的 Ubuntu 安装中是否真的可用,而 python 需要它 (/dev/urandom)。您的 Python 2.7 版本也可能无法访问 urandom,但会默默地失败而不是崩溃。

  2. 如果上面的代码片段有效,那么您的 os.py 文件或此类文件的编译版本就搞砸了。在这种情况下,您的 Python 安装已损坏。您需要卸载它,清除任何中间 pyc 或 pyo 文件,然后重新安装它。

鉴于 python 2.6.6 解释器无法自行找到 urandom,Django 不太可能成为问题。

于 2013-02-14T04:20:07.070 回答