Python: 无法导入urandom模块(OS X)

9

我很惭愧地问出这样的问题,但我已经尝试了几个小时……似乎我无法让我的Python版本再随机一些东西了。更准确地说,它缺少模块 urandom

首先,以下是有关我的系统的一些信息:

  • OSX 版本:10.7.4
  • Python 版本: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变量没有正确设置,但我不知道如何解决。

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。

对不起,问题/答案太快了 :/

晚安!
Arnaud


嗨,Amaud,你是怎么找到那个解决方案的? - CaptainCasey
2
说实话,我有点绝望,想尝试一些东西(为了调试一个如此荒谬的问题花费了2个小时)。然后我想到了这个“hash”命令,我尝试了一下,它起作用了。我担心我没有一个很棒的故障追踪故事:/ - Arnaud Brousseau
谢谢您发布这个问题!在构建过程中遇到这个问题时,我完全被难住了(无论如何,我都不是Python专家),所以非常感谢。 :-) - Noldorin

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