我已经写出以下代码来尝试生成随机数 -
import random
def main():
a=random.randint(1,100)
b=random.randint(1,100)
print (a)
print (b)
main()
运行程序后,我收到了这条消息:
File" /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/random.py" ;,第41行,在模块中
从数学导入日志为_log,exp为_exp,pi为_pi,e为_e,ceil为_ceil
ImportError:' math':b' \ x03 \ xf3 \ r \ n
中的错误幻数
答案 0 :(得分:2)
ImportError: bad magic number in 'math': b'\x03\xf3\r\n
幻数b'\ x03 \ xf3 \ r \ n'表示Python 2.7。我不确定在哪里可以找到它,但是因为你在Mac上,你可以运行Apple预装的Python2.7并查看:
$ /usr/bin/python2.7
>>> import imp
>>> imp.get_magic()
'\x03\xf3\r\n'
所以,不知怎的,你math.pyc
上有一个2.7 sys.path
,当然3.4无法加载它。
另请注意,2.x和3.x中的标准CPython math
模块是纯C扩展模块 - 也就是说,它是.so
文件,而不是{{1文件,因此该模块没有.py
。您必须编写或下载一些名为.pyc
的模块,并在某些时候在Python 2.7中使用它。
除非你使用非CPython实现,否则在stdlib中可能会有math.py
。如果你正在使用PyPy,我怀疑你知道你正在使用它,所以如果你不知道我在说什么,请追溯跳过这一段。
很可能只是在当前目录或其math.py
中。要找到答案,请执行以下操作:
__pycache__
如果出现任何问题,那就是问题,你必须将其删除。但首先,您可能希望确保您仍然拥有它来自的$ find . -name 'math*.pyc'
文件,或者不需要它。 (或者,如果您不确定,可能只是将其移到某处,而不是删除它。)
但是,您也可以将它安装在math.py
上不应该安装的地方,或者安装在2.7以下的地方({1}} sys.path
但不是你的sys.path
sys.path,而是。
当您无法成功2.7
并在3.4+中查看模块时,找出模块所在位置的最简单方法是:
import
您将在某处找到名为>>> import importlib
>>> importlib.util.find_spec('math')
ModuleSpec(name='math', loader=<_frozen_importlib.ExtensionFileLoader object at 0x102e065c0>, origin='/Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/lib-dynload/math.so')
(或math.pyc
)的文件。你需要弄清楚的是,“某处”是否应该在你的路径上,或者该文件是否应该在某个地方。这很有可能是显而易见的,因为文件的路径中将包含2.7或3.4。
如果您想知道自己的路径是什么,请执行以下操作:
math-SOMETHING.pyc
这应该显示一个路径列表,包括>>> import sys
>>> sys.path
,3.4 stdlib,3.4系统和用户站点包,任何与.pth文件一起安装的鸡蛋等。它不应包含任何内容2.7或未版本控制。