::: IT인터넷 :::

filemagic (파일 포맷 확인) 삽질기

곰탱이푸우 2016. 3. 17. 15:58
기존 Python-magic을 찾으면서 같이 찾았던 파이썬 라이브러리이다. 사실 Python-magic은 오류 발생하던거 성공까지 못했었는데, 블로그 정리하면서 성공하게 된 흔치 않은 경우였다. Python-magic 관련 글은 아래 글 참고.


filemagic 라이브러리는 Python-magic이 설치가 잘 안 되었을때 테스트 해보려고 찾았었는데, 이것도 Python-magic과 별반 다르지 않다. 기본적인 설명은 위의 글에서 언급했으므로, 자세한 설명은 생략. 현재 사용중인 맥북에서 뿐만 아니라 사무실, 집, 그리고 다른 사람들도 편하게 쓸 수 있도록 윈도우에서도 문제없이 동작하는 라이브러리를 찾았는데, Filemagic은 Python-magic과 거의 동일한 라이브러리라고 봐도 무방할 정도였다. 문제는 윈도우에서 정상 동작을 하지 않는다는 것.

filemagic 라이브러리의 공식 배포사이트는 아래와 같다.

filemagic (파일포맷 확인)

pypi에서 제공하는 설명을 읽어보면 아래와 같다.


즉, 개요를 읽어보면 Unix 시스템에서 file 명령어에 사용되는 libmagic을 컨트롤하기 위한 파이썬 라이브러리이다. 즉, 윈도우에서는 사용할 수 없다고 보는게 맞다. 밑에 Background를 읽어봐도 libmagic에 대한 설명이다. 그래도 해보기라도 해야 할 것 같아서 시도!!

윈도우에 설치하면 아래와 같다. pip로 설치는 문제없이 진행된다.


그런 다음 python을 실행 후 magic을 import하면 오류가 발생한다. 즉, magic 라이브러리를 찾을 수 없다는거다.


유닉스와 리눅스, MacOS에서는 libmagic 라이브러리를 통해 file 명령어를 실행할 수 있어서 문제 없이 동작할 것 같은데,  윈도우는 file 명령과 libmagic을 지원하지 않기 때문에 발생하는 문제이다. 운영체제의 출발점 자체가 달랐으니 뭐라 할 수는 없지만...

그래서 다시 리눅스에서 시도해봤다. 리눅스에서 filemagic을 설치했다. 설치는 Python-magic과 동일하게 sudo pip install filemagic 라고 입력하면 된다. 설치는 역시 정상적으로 진행된다. 


magic을 import하고 사이트에 언급되어 있는 것처럼 사용해봤다. m이라는 변수에 magic.Magic() 함수의 리턴 값을 저장하고, m 변수를 통해 id_filename 함수를 호출하면 정상적인 결과 값을 확인할 수 있다. 


문득 윈도우 환경에서 Python-magic에서 file.exe과 관련 된 Dependencies 파일들 설정해주고 시도해보면 어떨까 싶어서 시도해봤다. file.exe와 관련 된 DLL 파일과 magic 파일 셋팅 방법은 아래 글 참고.


기본 셋팅을 하고 나서 magic을 import 해주면 아래와 같이 오류를 뿜어낸다. -_-;;


magic 파일을 읽는데 실패했다는 메시지가 뜬다. 그것보다 더 중요한 것은 바로 윗줄의 오류메시지이다.

raise ImportError(‘Loading {0} failed’.format(libname))

즉, magic 파일 포맷이 맞지 않아서 import 할 수 없다는 메시지이다. 유닉스와 리눅스에서 제공하는 magic 파일과 포맷이 맞지 않아 정상적인 동작을 하지 않는 것이다. 결론은 하지 않아도 될 삽질이었다는 것. -_-;;

그냥 리눅스나 맥에서만 쓸 거면 상관없는데, 앞에서 언급했듯이 거의 대부분 윈도우 환경에서 사용할 예정이라 과감하게 목록에서 제거했다. ㅜㅜ