Python2.6无法导入urandom

Asy*_*Asy 5 python django ubuntu

我正在研究一个旧的Django项目(Django版本1.3.2,Python版本2.6.6).运行"python manage.py runserver"给我:"ImportError:无法导入名称urandom".

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

我决定通过运行Django安装指南删除并重新安装Django

pip install Django

django-admin.py startproject project了给我相同的ImportError.所以我再次使用卸载Django pip uninstall Django.

现在运行python启动python2.6.6 shell,打字from os import urandom给我"ImportError:无法导入名称urandom"消息,同时做同样的事情python2.7并没有给出这样的错误.

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

Nam*_*mey 0

虽然我不知道是否可以提供更多有用的信息,但以下是我对此次失败的可能原因的分析:

  1. 您的操作系统不再向 Python 2.6.6 正确提供 urandom。据我所知,当 /dev/urandom 不存在时, OSError 带有“import random”,这应该会导致 OSError 或 NotImplementedError (而不是 ImportError),但文档之前就错了。检查是否可以获取系统 urandom 的一个不错的方法是运行:

    from posix import urandom
    
    Run Code Online (Sandbox Code Playgroud)

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

    from os import O_RDONLY
    aURandom = open("/dev/urandom", O_RDONLY)
    
    Run Code Online (Sandbox Code Playgroud)

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

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

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