我无法让 import random 工作 - python 3

isa*_*aac 2 python random python-3.x

我写了以下代码来尝试生成随机数-

import random
def main(): 
   a=random.randint(1,100)
   b=random.randint(1,100) 
   print (a)
   print (b)

main() 
Run Code Online (Sandbox Code Playgroud)

运行程序后,我收到以下消息:

文件“/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/random.py”,第 41 行,模块中

from math import log as _log, exp as _exp, pi as _pi, e as _e, ceil as _ceil

导入错误:“数学”中的错误幻数:b'\x03\xf3\r\n

aba*_*ert 5

ImportError: bad magic number in \'math\': b\'\\x03\\xf3\\r\\n\n
Run Code Online (Sandbox Code Playgroud)\n\n

幻数 b\'\\x03\\xf3\\r\\n\' 表示 Python 2.7。我不知道在哪里可以找到它,但由于你使用的是 Mac,你可以运行 Apple 预装的 Python2.7 并查看:

\n\n
$ /usr/bin/python2.7\n>>> import imp\n>>> imp.get_magic()\n\'\\x03\\xf3\\r\\n\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

所以,不知何故,你math.pyc的 上有一个 2.7 sys.path,当然 3.4 无法加载它。

\n\n
\n\n

另请注意,标准的CPythonmath模块,无论是在2.x还是3.x中,都是一个纯C扩展模块\xe2\x80\x94,也就是说,它是一个.so文件,而不是一个.py文件,所以不会有.pyc该模块。您必须在math.pyPython 2.7\xe2\x80\x94 中编写或下载一些名为\xe2\x80\x94 的模块并在某个时候使用它。

\n\n

除非您使用非 CPython 实现,在这种情况下,math.pystdlib 中可能存在 a 。如果你正在使用 PyPy,我怀疑你会知道你正在使用它,所以如果你不知道我在说什么,请追溯跳过本段。

\n\n
\n\n

它很可能就在当前目录或其__pycache__. 要找出答案,请执行以下操作:

\n\n
$ find . -name \'math*.pyc\'\n
Run Code Online (Sandbox Code Playgroud)\n\n

如果出现任何问题,那就是问题所在,您必须将其删除。但首先,您可能需要确保您仍然拥有math.py它所来自的文件,或者不需要它。(或者如果您不确定的话,可以将其移到不碍事的地方而不是删除它。)

\n\n
\n\n

但是,也有可能您已经将其安装到了不应该安装在您的系统上的某个位置,但是是\xe2\x80\x94,或者您将它与 2.7 一起安装到了应该安装在您的 3.4 上但不是您的系统sys.path上的某个位置。.path,但是是。sys.path2.7

\n\n

在 3.4+ 中,当您无法成功找到模块import并查看它时,找出模块位置的最简单方法是:

\n\n
>>> import importlib\n>>> importlib.util.find_spec(\'math\')\nModuleSpec(name=\'math\', loader=<_frozen_importlib.ExtensionFileLoader object at 0x102e065c0>, origin=\'/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload/math.so\')\n
Run Code Online (Sandbox Code Playgroud)\n\n

您将在某处找到一些名为math.pyc(或math-SOMETHING.pyc) 的文件。然后您需要弄清楚该“某处”是否不应该在您的路径上,或者该文件是否不应该位于该某处。这很可能是显而易见的,因为文件的路径中将包含 2.7 或 3.4。

\n\n

如果你想知道你的路径是什么,只需这样做:

\n\n
>>> import sys\n>>> sys.path\n
Run Code Online (Sandbox Code Playgroud)\n\n

这应该显示一个路径列表,包括\'.\'、3.4 stdlib、3.4 系统和用户站点包、与 .pth 文件一起安装的任何 Egg 等。它不应该包含任何 2.7 或未版本化的内容。

\n