This question already has answers here:
What's the bad magic number error?
                                
                                    (14个回答)
                                
                        
                                5年前关闭。
            
                    
我已经写出以下代码来尝试生成随机数-

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

main()


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


  模块中的文件“ /Library/Frameworks/Python.framework/Versions/3.4/lib/python3.4/random.py”,第41行
  
  
    从数学导入日志中以_log表示,以exp表示_exp,以pi表示_pi,以e表示_e,以ceil表示_ceil
    
    
      ImportError:“数学”中的错误魔术数字:b'\ x03 \ xf3 \ r \ n

最佳答案

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文件,而不是.py文件,因此不会有该模块的.pyc。您必须已经编写或下载了一个名为math.py的模块,并已在Python 2.7中使用它。

除非您使用非CPython实现,否则在这种情况下,stdlib中可能会有一个math.py。如果您正在使用,例如PyPy,我怀疑您会知道您正在使用它,因此,如果您不知道我在说什么,可以追溯地跳过此段。



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

$ find . -name 'math*.pyc'


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



但是,也有可能您已将其安装在不应位于sys.path上的某个位置上,或者已将2.7安装到应将其安装在3.4 sys.path上而不是2.7 sys上的某个位置.path,但是。

在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(或math-SOMETHING.pyc)的文件。然后,您需要弄清楚的是,该“某处”是否不应该放在路径上,或者该文件是否不应该在该位置上。这很有可能很明显,因为文件路径中将包含2.7或3.4。

如果您想知道您的路径是什么,只需执行以下操作:

>>> import sys
>>> sys.path


那应该显示一个路径列表,包括'.',3.4 stdlib,3.4系统和用户站点程序包,随.pth文件安装的所有egg,等等。它不应包含2.7或未版本化的任何内容。

关于python - 我无法随机导入导入-python 3 ,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25776782/

10-15 23:42