잘못된 매직 넘버 오류는 무엇입니까?
파이썬에서 "나쁜 마법 번호"ImportError는 무엇이며 어떻게 수정합니까?
내가 온라인에서 찾을 수있는 유일한 것은 이것이 .py-> .pyc 파일을 컴파일 한 다음 잘못된 버전의 python과 함께 사용하려고 시도했기 때문입니다. 그러나 필자의 경우 파일은 잘 가져 오는 것으로 보이지만 다른 파일은 가져 오지 않는 것 같습니다. 왜 그런지 잘 모르겠습니다.
파이썬이 트레이스 백에서 제공하는 정보는 특별히 도움이되지 않지만 (여기서 묻는 이유는 ...) 여기 도움이되는 경우입니다.
Traceback (most recent call last):
File "run.py", line 7, in <module>
from Normalization import Normalizer
매직 번호는 파일의 처음 몇 바이트가 파일 유형을 나타내는 마커를 보유한 UNIX 유형 시스템에서 나옵니다.
파이썬은 pyc
파일을 만들 때 비슷한 마커를 파일에 넣 습니다.
그런 다음 파이썬 인터프리터는이 숫자를로드 할 때 올바른지 확인합니다.
이 매직 넘버를 손상시키는 것은 문제를 일으킬 것입니다. 여기에는 pyc
파일을 편집 하거나 pyc
인터프리터와 다른 버전의 파이썬 (보통 나중에)에서 실행하려고하는 것이 포함됩니다 .
그것들이 당신의 pyc
파일 이라면, 그것들을 삭제하고 인터프리터가 py
파일을 다시 컴파일하게 하십시오. UNIX 유형 시스템에서는 다음과 같이 간단 할 수 있습니다.
rm *.pyc
또는:
find . -name '*.pyc' -delete
그들이 당신의 것이 아닌 경우, py
재 컴파일을 위해 파일을 가져 오거나 pyc
해당 특정 마법 값으로 파일을 실행할 수있는 인터프리터를 가져와야합니다.
간헐적 인 성격을 유발할 수있는 한 가지. pyc
문제를 일으키는 것을는 특정 조건 하에서 만 수입 할 수있다. 때때로 가져올 가능성은 거의 없습니다. 가져 오기가 실패 할 때 실제 전체 스택 추적을 확인해야합니까?
여담으로, 내 모든의 첫 번째 단어 2.5.1(r251:54863)
pyc
파일은 62131
, 2.6.1(r261:67517)
이다 62161
. 모든 매직 넘버의 목록은에서 찾을 수 있으며 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
*.pyc
python2 로 python3 생성 파일을 로드 하면이 오류가 발생합니다.
pyc 파일을 Windows 시스템으로 가져 가십시오. 16 진수 편집기를 사용하여이 pyc 파일을여십시오. 프리웨어 'HexEdit'을 사용했습니다. 이제 처음 2 바이트의 16 진 값을 읽으십시오. 제 경우에는 03 f3입니다.
calc를 열고 디스플레이 모드를 프로그래머 (XP의 과학)로 변환하여 16 진 및 10 진 변환을보십시오. 라디오 버튼에서 "Hex"를 선택하십시오. 먼저 두 번째 바이트로 값을 입력 한 다음 첫 번째 바이트로 입력하십시오. 예를 들어 f303 "Dec"(Decimal) 라디오 버튼을 클릭하십시오. 표시되는 값은 매직 넘버 일명 파이썬 버전에 해당하는 값입니다.
따라서 이전 답변에 제공된 표를 고려하면
- 1.5 => 20121 => 4E99이므로 파일의 첫 바이트는 99이고 두 번째 바이트는 4e입니다
- 1.6 => 50428 => C4FC이므로 파일의 첫 바이트는 fc이고 두 번째 바이트는 c4입니다.
확장명이 .pyc 인 파일의 이름을 수동으로 지정한 경우 "잘못된 매직 번호"오류도 발생합니다.
아주 오래된 (1.5.2) 구현을 사용하여 이상한 Magic Number 오류가 발생했습니다. .pyo 파일을 생성했으며 오류가 발생했습니다. 기 묘하게도 문제는 모듈 이름을 변경하여 해결되었습니다. 문제의 이름은 sms.py입니다. 해당 모듈에서 sms.pyo를 생성하면 Bad Magic Number 오류가 발생했습니다. 이름을 smst.py로 변경하면 오류가 사라졌습니다. sms.py가 같은 이름의 다른 모듈을 방해하는지 확인하기 위해 앞뒤로 확인했지만 이름 충돌을 찾을 수 없었습니다. 이 문제의 원인이 여전히 미쳤지 만 모듈 이름을 변경하는 것이 좋습니다.
__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'
이것은 위보다 훨씬 더 효율적입니다.
find {directory-of-.pyc-files} -name "*.pyc" -print0 | xargs -0 rm -rf
{directory-of-.pyc-files}
컴파일 된 python 파일이 들어있는 디렉토리는 어디에 있습니까 ?
내 경우에는 내 모듈의 이름을 바꾼 후 .pyc
오래된 이진 .mo
번역 파일이 아니기 때문에이 모듈 폴더 내에서 실행해야했습니다.
find . -name \*.po -execdir sh -c 'msgfmt "$0" -o `basename $0 .po`.mo' '{}' \;
(백업하고 .pyc
파일을 먼저 수정 하십시오)
잘못된 python27.dll 파일 (Windows의 경우)이있는 경우에도 해당 dll 버전으로 python을 다시 설치하거나 추출하십시오. 나는 비슷한 경험을했다.
방금 Fedora26과 같은 문제에 직면했습니다. 여기서 dnf와 같은 많은 도구가 6의 잘못된 마법 번호로 인해 손상되었습니다. 알 수없는 이유로 /usr/bin/six.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...
제 경우 git clone
에는 통역사 가 있는 lib가 있습니다.
#!/usr/bin/env python
반면 python
에 이끌고 Python2.7
내 주요 코드는 python3.6 실행에도 불구하고 ... 그것은 여전히 생성 *.pyc
의 파일 2.7
버전을 ...
나는이 오류가 아마도 2.7과 3+ 버전의 혼합의 결과라고 말할 수 있습니다.
- 그 Python2x 코드를 조정하는 것을 잊지 마십시오-> python 3 ...
삭제하지 마십시오 !!! 까지..........
git, svn 또는 copy 폴더에서 작동하는 버전을 찾으십시오.
그것들을 삭제하고 모든 .pyc를 복구하십시오.
그것은 나를 위해 일한 것입니다.
참고 URL : https://stackoverflow.com/questions/514371/whats-the-bad-magic-number-error
'IT' 카테고리의 다른 글
복제하기 전에 github 저장소의 크기를 보시겠습니까? (0) | 2020.03.20 |
---|---|
설치된 .NET Framework 버전 및 서비스 팩을 어떻게 탐지합니까? (0) | 2020.03.20 |
파이썬에서 현재 CPU 및 RAM 사용량을 얻는 방법? (0) | 2020.03.20 |
Spring @Autowired 사용법 이해 (0) | 2020.03.19 |
SQL Server의 동적 SELECT TOP @var (0) | 2020.03.19 |