What's the "Bad magic number" ImportError in python, and how do I fix it?
The only thing I can find online suggests this is caused by compiling a .py -> .pyc file and then trying to use it with the wrong version of python. In my case, however, the file seems to import fine some times but not others, and I'm not sure why.
The information python's providing in the traceback isn't particularly helpful (which is why I was asking here...), but here it is in case it helps:
Traceback (most recent call last):
File "run.py", line 7, in <module>
from Normalization import Normalizer
This question is related to
python
"Bad magic number" error also happens if you have manually named your file with an extension .pyc
So i had the same error :importError bad magic number. This was on windows 10
This error was because i installed mysql-connector
So i had to; pip uninstall mysql-comnector pip uninstall mysql-connector-python
pip install mysql-connector-python
I just faced the same issue with Fedora26 where many tools such as dnf were broken due to bad magic number for six. For an unknown reason i've got a file /usr/bin/six.pyc, with the unexpected magic number. Deleting this file fix the problem
Deleting all .pyc files will fix "Bad Magic Number" error.
find . -name "*.pyc" -delete
This is much more efficent than above.
find {directory-of-.pyc-files} -name "*.pyc" -print0 | xargs -0 rm -rf
where {directory-of-.pyc-files}
is the directory that contains the compiled python files.
In my case, I've git clone
a lib which had an interpreter of
#!/usr/bin/env python
While python
was leading to Python2.7
even though my main code was running with python3.6 ... it still created a *.pyc
file for 2.7
version ...
I can say that this error probably is a result of a mix between 2.7 & 3+ versions, this is why cleanup ( in any way you can think of that you're using ) - will help here ...
Deleting all .pyc files will fix "Bad Magic Number" error.
find . -name "*.pyc" -delete
In my case it was not .pyc
but old binary .mo
translation files after I renamed my own module, so inside this module folder I had to run
find . -name \*.po -execdir sh -c 'msgfmt "$0" -o `basename $0 .po`.mo' '{}' \;
(please do backup and try to fix .pyc
files first)
Loading a python3 generated *.pyc
file with python2 also causes this error.
Take the pyc file to a windows machine. Use any Hex editor to open this pyc file. I used freeware 'HexEdit'. Now read hex value of first two bytes. In my case, these were 03 f3.
Open calc and convert its display mode to Programmer (Scientific in XP) to see Hex and Decimal conversion. Select "Hex" from Radio button. Enter values as second byte first and then the first byte i.e f303 Now click on "Dec" (Decimal) radio button. The value displayed is one which is correspond to the magic number aka version of python.
So, considering the table provided in earlier reply
In my case it was not .pyc
but old binary .mo
translation files after I renamed my own module, so inside this module folder I had to run
find . -name \*.po -execdir sh -c 'msgfmt "$0" -o `basename $0 .po`.mo' '{}' \;
(please do backup and try to fix .pyc
files first)
You will need to run this command in every path you have in your environment.
>>> import sys
>>> sys.path
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/source_code/src/python', '/usr/lib/python3/dist-packages']
Then run the command in every directory here
find /usr/lib/python3.6/ -name "*.pyc" -delete
find /usr/local/lib/python3.6/dist-packages -name "*.pyc" -delete
# etc...
This is much more efficent than above.
find {directory-of-.pyc-files} -name "*.pyc" -print0 | xargs -0 rm -rf
where {directory-of-.pyc-files}
is the directory that contains the compiled python files.
Don't delete them!!! Until..........
Find a version on your git, svn or copy folder that works.
Delete them and then recover all .pyc.
That's work for me.
This can also be due to missing __init__.py
file from the directory. Say if you create a new directory in django for seperating the unit tests into multiple files and place them in one directory then you also have to create the __init__.py
file beside all the other files in new created test directory. otherwise it can give error like
Traceback (most recent call last):
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python35\Lib\unittest\loader.py",line 153, in loadTestsFromName
module = __import__(module_name)
ImportError: bad magic number in 'APPNAME.tests': b'\x03\xf3\r\n'
Loading a python3 generated *.pyc
file with python2 also causes this error.
"Bad magic number" error also happens if you have manually named your file with an extension .pyc
I had a strange case of Bad Magic Number error using a very old (1.5.2) implementation. I generated a .pyo file and that triggered the error. Bizarrely, the problem was solved by changing the name of the module. The offending name was sms.py. If I generated an sms.pyo from that module, Bad Magic Number error was the result. When I changed the name to smst.py, the error went away. I checked back and forth to see if sms.py somehow interfered with any other module with the same name but I could not find any name collision. Even though the source of this problem remained a mistery for me, I recommend trying a module name change.
In my case, I've git clone
a lib which had an interpreter of
#!/usr/bin/env python
While python
was leading to Python2.7
even though my main code was running with python3.6 ... it still created a *.pyc
file for 2.7
version ...
I can say that this error probably is a result of a mix between 2.7 & 3+ versions, this is why cleanup ( in any way you can think of that you're using ) - will help here ...
Take the pyc file to a windows machine. Use any Hex editor to open this pyc file. I used freeware 'HexEdit'. Now read hex value of first two bytes. In my case, these were 03 f3.
Open calc and convert its display mode to Programmer (Scientific in XP) to see Hex and Decimal conversion. Select "Hex" from Radio button. Enter values as second byte first and then the first byte i.e f303 Now click on "Dec" (Decimal) radio button. The value displayed is one which is correspond to the magic number aka version of python.
So, considering the table provided in earlier reply
I had a strange case of Bad Magic Number error using a very old (1.5.2) implementation. I generated a .pyo file and that triggered the error. Bizarrely, the problem was solved by changing the name of the module. The offending name was sms.py. If I generated an sms.pyo from that module, Bad Magic Number error was the result. When I changed the name to smst.py, the error went away. I checked back and forth to see if sms.py somehow interfered with any other module with the same name but I could not find any name collision. Even though the source of this problem remained a mistery for me, I recommend trying a module name change.
This can also happen if you have the wrong python27.dll file (in case of Windows), to solve this just re-install (or extract) python with the exact corresponding dll version. I had a similar experience.
Don't delete them!!! Until..........
Find a version on your git, svn or copy folder that works.
Delete them and then recover all .pyc.
That's work for me.
I just faced the same issue with Fedora26 where many tools such as dnf were broken due to bad magic number for six. For an unknown reason i've got a file /usr/bin/six.pyc, with the unexpected magic number. Deleting this file fix the problem
You will need to run this command in every path you have in your environment.
>>> import sys
>>> sys.path
['', '/usr/lib/python36.zip', '/usr/lib/python3.6', '/usr/lib/python3.6/lib-dynload', '/usr/local/lib/python3.6/dist-packages', '/source_code/src/python', '/usr/lib/python3/dist-packages']
Then run the command in every directory here
find /usr/lib/python3.6/ -name "*.pyc" -delete
find /usr/local/lib/python3.6/dist-packages -name "*.pyc" -delete
# etc...
This can also happen if you have the wrong python27.dll file (in case of Windows), to solve this just re-install (or extract) python with the exact corresponding dll version. I had a similar experience.
This can also be due to missing __init__.py
file from the directory. Say if you create a new directory in django for seperating the unit tests into multiple files and place them in one directory then you also have to create the __init__.py
file beside all the other files in new created test directory. otherwise it can give error like
Traceback (most recent call last):
File "C:\Users\USERNAME\AppData\Local\Programs\Python\Python35\Lib\unittest\loader.py",line 153, in loadTestsFromName
module = __import__(module_name)
ImportError: bad magic number in 'APPNAME.tests': b'\x03\xf3\r\n'
So i had the same error :importError bad magic number. This was on windows 10
This error was because i installed mysql-connector
So i had to; pip uninstall mysql-comnector pip uninstall mysql-connector-python
pip install mysql-connector-python
Source: Stackoverflow.com