当我尝试使用 gnome 上的终端打开 Gajim 时,我得到以下信息:
Traceback (most recent call last):
File "gajim.py", line 106, in <module>
import common.configpaths
File "/usr/share/gajim/src/common/configpaths.py", line 27, in <module>
import tempfile
File "/usr/lib64/python2.6/tempfile.py", line 34, in <module>
from random import Random as _Random
File "/usr/lib64/python2.6/random.py", line 47, in <module>
from os import urandom as _urandom
ImportError: cannot import name urandom
知道如何解决这个问题吗?
我的操作系统是Mandriva 2010.1,Python是从v2.4升级到v2.6
答案1
您可能导入了错误的 os.py 模块。尝试启动 python2.6 然后
>>> import os
>>> print os.__file__
那应该是/usr/lib64/python2.6/os.py
或/usr/lib64/python2.6/os.pyc
。如果没有删除(或重命名)您找到的文件。如果是尝试:
>>> os.urandom(3)
这将为您提供一个包含 3 个字符的字符串。如果是,则gajim
说明找到了错误的os.py
模块。如果您得到与运行时相同的错误gajim
,则查看/usr/lib64/python2.6/os.py
末尾urandom
是否应该定义它是否不存在(使用该行if not _exists("urandom":
)。
如果它没有定义,就像 和 的情况一样python-2.6.5-2.5mdv2010.2.x86_64
,并且/dev/urandom
存在,您可以尝试重新添加代码:
if not _exists("urandom"):
def urandom(n):
"""urandom(n) -> str
Return a string of n random bytes suitable for cryptographic use.
"""
try:
_urandomfd = open("/dev/urandom", O_RDONLY)
except (OSError, IOError):
raise NotImplementedError("/dev/urandom (or equivalent) not found")
try:
bs = b""
while n - len(bs) >= 1:
bs += read(_urandomfd, n - len(bs))
finally:
close(_urandomfd)
return bs
也可以看看:这错误报告