2016-11-20 2 views
1

모듈 python-magic을 몇 시간 동안 설치하려고했는데 몇 가지 문제가 발생했습니다. 필자는 64 비트 Windows 7에서 32 비트 버전의 Python 3.5.2를 사용하고 있습니다.Python-magic에 OSError가 있습니다 : 32 비트 버전의 IDLE에서 실행 중 [WinError 193] 오류가 발생했습니다.

먼저 "pip install python-magic"명령을 사용했습니다. 나는에서 PATH의 시작 부분에 언급 한 디렉토리를 추가 나는 윈도우 프로젝트의 파일에서 magic1.dll, regex2.dll 및 zlib1.dll, 그리고 마법을 다운로드, 나는

C:\Program Files (x86)\Python35-32\Lib\site-packages\python_magic-0.4.12-py3.5.egg-info. 

에 그 4 개 파일을 복사 내 Windows 환경 변수. 그런 다음 IDLE의 셸을 열고 "import magic"을 입력하고 응답 OSError: [WinError 126] The specified module could not be found을 받았습니다.

"마법"파일에는 .dll 확장자가 있어야하므로 이름을 변경했습니다. 이로 인해 Windows "C:\Program Files (x86)\Python35-32\Lib\site-packages\magic.dll is either not designed to run on Windows or contains an error" 및 Python "OSError: [WinError 193] %1 is not a valid Win32 application "팝업 경고가 나타났습니다. 후자의 오류는 일반적으로 64 비트 환경에서 실행되는 동안 발생하지만 32 비트 유휴 상태로 실행해야합니다.

previous StackOverflow posts의 조언에 따라 cygmagic-1.dll, cygwin1.dll 및 cygz.dll을 C : \ Windows \ System32에 동일한 폴더에 복사 해 보았습니다. magic.dll로, 그리고 cygmagic-1.dll의 이름을 magic1.dll로 바꾸려고했는데 아무런 영향이 없었습니다. 다른 곳에서 Cygwin Python과 Windows Python을 섞어서는 안된다고하지만, 이 파일들에 개입하지 않아도 작동하지 않았다.

나는 aming magic.dll에서 magic.exe로 이동하여 "import magic"및 magic을 허용했습니다. Magic(magic_file=r'C:\Program Files (x86)\Python35-32\Lib\site-packages\python_magic-0.4.12-py3.5.egg-info\magic.exe') with the response "<magic.Magic object at 0x02EA0A70>". When I tried testing with magic.from_file(r'C:\Program Files (x86)\Python35-32\Lib\site-packages\README.txt'), though, I got the error magic.MagicException: b'could not find any magic files! 나는 그것을 magic.exe로 이름을 바꾸는 것이 잘못되어야한다고 생각했지만, 시도해 볼만한 가치가 있었다.

저는 파이썬 - 마술을 포기한 후 older project을 추천했습니다. 나는 그것을 다운로드하고 pymagic 폴더를 내 site-packages 디렉토리에 넣었다. pymagic.pymagic을 가져 오려고 시도했을 때, StringIO 모듈이 존재하지 않는다고 말했고, 추천자는 StringIO가 Python2에서 온 것이기 때문에 그렇게 말했습니다. 나는 모든 io를 위해 StringIO의 언급 변경하고이이 작업을 얻기 위해 수정을하는 방법을 알고 나는 등 모듈 파이썬의 운영 체제, IO, 충분히 참여하지 않아요 오류 TypeError: startswith first arg must be bytes or a tuple of bytes, not str.를 생성 한 명령 pymagic.pymagic.identify_file(r'E:\Pictures\picture.jpg')

을 시도했다. 누구든지 python-magic 또는 pymagic을 사용하는 방법이나 헤더를 기반으로 파일을 식별하는 다른 모듈을 얻는 방법에 대한 권장 사항을 만들 수 있습니까? 나는이 질문이 많은 질문을 받았지만 이전의 대답은 나에게 도움이되지 못한다는 것을 알고있다.

답변

1

'마법'데이터 파일 magic을 호출했는데 magic1.dll과 같은 폴더에 그대로 두셨습니까?

귀하의 지시에 따라 동일한 오류를 재현 할 수있었습니다. Sysinternals Process Monitor을 사용하면, 파이썬이 마술 데이터 파일을 마치 마치 라이브러리처럼로드하려고 시도하는 것처럼 보이는 첫 번째 오류의 원인을 알 수있었습니다.

그런 다음 마법 데이터 파일의 이름을 magic_data으로 변경하고 유휴 상태로 다시 시작했습니다. 나는 그 파일을 식별 할 수 magic을 사용할 수

Python 3.4.3 (v3.4.3:9b73f1c3e601, Feb 24 2015, 22:43:06) [MSC v.1600 32 bit (Intel)] on win32 
Type "copyright", "credits" or "license()" for more information. 
>>> import magic 
>>> fn = r'C:\Python34\Lib\site-packages\python_magic-0.4.12-py3.4.egg-info\magic_data' 
>>> m = magic.Magic(magic_file=fn) 
>>> m.from_file(r'C:\Python34\Lib\site-packages\python_magic-0.4.12-py3.4.egg-info\zlib1.dll') 
'PE32 executable for MS Windows (DLL) (console) Intel 80386 32-bit' 

(나는 당신에게 파이썬의 다른 버전 (3.4) 및 Windows (10의 다른 버전)을 사용하고,하지만 난이 생각하지 않습니다 문제가 너무 많습니다.)

+0

완벽하게 작동했습니다.제쳐두고, GitHub 설명서가 경고하고 내 PATH에서 C : \ cygwin \ bin을 제거하여 해결 한 'WindowsError : 예외 : 액세스 위반 작성 0x00000000'버그가 발생했습니다. – raincloud