programing

잘못된 매직 넘버 오류는 무엇입니까?

newsource 2022. 10. 26. 21:05

잘못된 매직 넘버 오류는 무엇입니까?

"Bad Magic Number" ImportError는 python으로 무엇이며 어떻게 수정해야 합니까?

온라인에서 찾을 수 있는 유일한 것은 이것이 .py -> .pyc 파일을 컴파일하여 잘못된 버전의 python과 함께 사용하려고 하는 것에 기인한다는 것입니다.다만, 제 경우는, 파일이 Import 되는 경우도 있습니다만, 다른 경우는 Import 되지 않는 경우도 있어, 그 이유를 알 수 없습니다.

python이 traceback에서 제공하는 정보는 특별히 도움이 되지 않습니다(그래서 제가 여기서 물어본 것입니다). 하지만 다음과 같은 경우에 도움이 됩니다.

Traceback (most recent call last):
  File "run.py", line 7, in <module>
    from Normalization import Normalizer

매직 넘버는 UNIX 타입 시스템에서 취득한 것입니다.이 시스템에서는 파일의 처음 몇 바이트가 파일유형을 나타내는 마커를 가지고 있습니다.

은 Python에 .pyc일을만만 만만만다다

그런 다음 python interpreter는 로드 시 이 번호가 올바른지 확인합니다.

이 매직 넘버를 손상시키는 것은 당신의 문제를 야기할 것입니다.하는 것을 합니다.pyc.pyc인터프리터와는 다른 버전의 python(보통 그 이후)을 사용하고 있습니다.

고객님의 경우 pyc.pyUNIX 타입의 시스템에서는, 다음과 같이 간단하게 할 수 있습니다.

rm *.pyc

또는 다음과 같이 입력합니다.

find . -name '*.pyc' -delete

것이 , 의 것을 받아야 합니다.py를 할 수 pyc이치

간헐적인 자연현상의 원인이 될 수 있는 것 중 하나.pyc문제의 원인은 특정 조건에서만 가져올 수 있습니다.가끔 수입할 가능성은 거의 없습니다.Import가 실패했을 때 실제 전체 스택 트레이스를 확인해야 합니다.

여담이지만, 제 모든 것의 첫마지막으로2.5.1(r251:54863) pyc은 「」입니다.62131,2.6.1(r261:67517)62161는 URL에서 할 수 Python/import.c ( 답변이되었을 수 : (이후 변경되었을 수 있습니다.)

1.5:   20121
1.5.1: 20121
1.5.2: 20121
1.6:   50428
2.0:   50823
2.0.1: 50823
2.1:   60202
2.1.1: 60202
2.1.2: 60202
2.2:   60717
2.3a0: 62011
2.3a0: 62021
2.3a0: 62011
2.4a0: 62041
2.4a3: 62051
2.4b1: 62061
2.5a0: 62071
2.5a0: 62081
2.5a0: 62091
2.5a0: 62092
2.5b3: 62101
2.5b3: 62111
2.5c1: 62121
2.5c2: 62131
2.6a0: 62151
2.6a1: 62161
2.7a0: 62171

모든 .pyc 파일을 삭제하면 "Bad Magic Number" 오류가 수정됩니다.

find . -name "*.pyc" -delete

python3 중*.pycpython2로 파일하다.

pyc 파일을 윈도 머신으로 가져옵니다.임의의 16진수 편집기를 사용하여 이 pyc 파일을 엽니다.저는 프리웨어 'HexEdit'을 사용했어요.여기서 처음 2바이트의 16진수 값을 읽습니다.제 경우는 03 f3 이었어요.

16진수 및 10진수 변환을 보려면 calc를 열고 디스플레이 모드를 Programmer(XP의 Scientific)로 변환합니다.라디오 버튼에서 "16진수"를 선택합니다.먼저 두 번째 바이트로 값을 입력한 다음 첫 번째 바이트로 입력합니다. 즉, f303 이제 "Dec"(십진수) 라디오 버튼을 클릭합니다.표시되는 값은 매직 넘버인 python 버전에 대응하는 값입니다.

그래서, 이전 답변에서 제공한 표를 고려했을 때

  • 1.5 = > 20121 = > 4E99로 파일 첫 번째 바이트는 99, 두 번째 바이트는 4e로 지정됩니다.
  • 1.6 = > 50428 = > C4FC를 통해 파일의 첫 번째 바이트는 fc, 두 번째 바이트는 c4가 됩니다.

누락이 도 있습니다.__init__.py를 참조해 주세요.를 여러 하기 위해 , "Django"도.__init__.py과 같은오류가 할 수 .그렇지 않으면 다음과 같은 오류가 발생할 수 있습니다.

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'

않았다..pyc, 바이너리.mo 모듈 한 후 변환 을 이 .

find . -name \*.po -execdir sh -c 'msgfmt "$0" -o `basename $0 .po`.mo' '{}' \;

.수정해 주세요..pyc first(files first)

확장자가 .pyc인 파일 이름을 수동으로 지정한 경우에도 "Bad Magic number" 오류가 발생합니다.

매우 오래된 (1.5.2) 구현을 사용하여 Bad Magic Number 오류가 발생한 적이 있습니다..pyo 파일을 생성했더니 오류가 발생하였습니다.이상하게도 모듈 이름을 변경함으로써 문제가 해결되었습니다.문제의 이름은 sms.py 입니다.그 모듈에서 sms.po를 생성하면 Bad Magic Number 오류가 발생합니다.이름을 smst.py으로 바꾸자 오류가 사라졌습니다.sms.py이 같은 이름의 다른 모듈과 간섭을 하지 않았는지 여러 번 확인했지만 이름 충돌은 발견되지 않았습니다.이 문제의 원인은 아직 불분명하지만 모듈 이름을 변경해 볼 것을 추천합니다.

이것은 위보다 훨씬 더 효율적입니다.

find {directory-of-.pyc-files} -name "*.pyc" -print0 | xargs -0 rm -rf

서 ''는{directory-of-.pyc-files}는 컴파일된 python 파일이 저장되어 있는 디렉토리입니다.

이 문제는 (Windows의 경우) python27.dll 파일이 잘못되어 있는 경우에도 발생할 수 있습니다.python을 정확하게 대응하는 dll 버전으로 재설치(또는 추출)하기만 하면 됩니다.나도 비슷한 경험을 한 적이 있어.

방금 Fedora26에서도 6개의 매직넘버 불량으로 인해 dnf 등의 툴이 많이 고장난 문제에 직면했습니다.알 수 없는 이유로 /usr/bin/six.pyc 파일에 예기치 않은 매직 넘버가 포함되어 있습니다.이 파일을 삭제하면 문제가 해결됩니다.

저 같은 경우에는git clone통역을 가진 lib

#!/usr/bin/env python

하는 동안에python로 연결되고 있었다Python2.7비록 내 메인 코드가 python3.6과 함께 실행 중이었지만... 그것은 여전히 python3.6을 만들었다.*.pyc을 신청하다.2.7버전...

이 오류는 아마도 2.7과 3 이상의 버전이 혼재된 결과라고 할 수 있습니다.그 때문에, 청소(사용하고 있는 것을 생각할 수 있을 정도로)가 도움이 됩니다.

  • Python2x 코드 -> python 3을 조정하는 것을 잊지 마십시오.

같은 에러가 발생했습니다.ImportError bad magic number이건 10번 창문에 있었어요

이 에러는, 인스톨을 실시하기 위해서입니다.mysql-connector

그래서 나는 다음과 같이 해야 했다.

pip uninstall mysql-comnector
pip uninstall mysql-connector-python
pip install mysql-connector-python

삭제하지 마세요!!!그때까지..........

git, svn 또는 copy 폴더에서 동작하는 버전을 찾습니다.

삭제 후 모든 .pyc를 복구합니다.

그건 내 일이야.

사용자 환경의 모든 경로에서 이 명령을 실행해야 합니다.

>>> 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']

그런 다음 모든 디렉토리에서 명령을 실행합니다.

find /usr/lib/python3.6/ -name "*.pyc" -delete
find /usr/local/lib/python3.6/dist-packages -name "*.pyc" -delete
# etc...

언급URL : https://stackoverflow.com/questions/514371/whats-the-bad-magic-number-error