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

Arn*_*eau 9 python python-import importerror

我很惭愧地问这样一个问题,但我已经尝试了几个小时......似乎我不能让我的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
Run Code Online (Sandbox Code Playgroud)

所以,从逻辑上讲,我尝试运行时失败了:

>>> 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
Run Code Online (Sandbox Code Playgroud)

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

Arn*_*eau 16

好的,我明白了.我的终端里有一个脏哈希表.

解:

hash -r  # will erase the currently used hash table
Run Code Online (Sandbox Code Playgroud)

一旦完成,我再次运行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'>
Run Code Online (Sandbox Code Playgroud)

注意不同的python版本(2.7.3 vs 2.7.1之前).我认为这是由于早期安装python 2.3通过mac端口.

对不起,问题/快速回答:/

祝你晚安!
阿尔诺

  • 老实说,我有点绝望的事情我可以尝试(2个多小时调试这样一个荒谬的问题).然后想到这个`hash`命令,我试了一下,它有效.我恐怕在这里没有一个很棒的bug追逐故事:/ (2认同)