9

我很惭愧提出这样的问题,但我已经尝试了几个小时......似乎我不能让我的 python 版本再做随机的事情了。更准确地说,它缺少模块urandom

首先,这里有一些关于我的系统的信息:

  • OSX 版本:10.7.4
  • 蟒蛇版本:Python 2.7.1
  • which python/opt/local/bin/python
  • import os; os<module 'os' from '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>
  • echo $PATH/opt/local/bin:/opt/local/sbin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin:/usr/X11/bin:/usr/local/git/bin
  • $ENV并且$PYTHONPATH是空的

现在,当我更深入地查看并执行vim /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/random.py时,我可以看到这个文件需要 urandom:

line 47: from os import urandom as _urandom

因此,从逻辑上讲,当我尝试运行时会失败:

>>> import random
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/random.py", line 47, in <module>
    from os import urandom as _urandom
ImportError: cannot import name urandom

有任何想法吗?urandom应该住在哪里?到目前为止,我一直在谷歌搜索但没有成功。
似乎很多 Ubuntu 用户都对 virtualenv 有这个问题,但我没有使用 virtualenv,而且我不在 Ubuntu 上。我敢打赌,不知何故我的 PATH 或 PYTHONPATH 或 ENV 变量设置不正确,但我不知道如何解决这个问题。

4

1 回答 1

16

好的,我想通了。我的终端中有一个脏哈希表。

解决方案:

hash -r  # will erase the currently used hash table

完成后,我再次运行 python 并得到:

Python 2.7.3 (default, Apr 19 2012, 00:55:09) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2335.15.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import random
>>> import os; os
<module 'os' from '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'>

请注意不同的 python 版本(之前的 2.7.3 与 2.7.1)。我认为这是由于之前通过 mac 端口安装了 python 2.3。

对不起这个问题/快速回答:/

祝你晚安!
阿尔诺

于 2012-09-30T02:46:38.010 回答