Мне нужно получить MIME-тип для некоторых файлов в Windows, поэтому я установил python-magic
(на 32-битном python 2.7.3).
Это зависит от библиотеки unix magic
.
Автор дает указание получить regex2.dll
, zlib1.dll
и magic1.dll
из проекта gnuwin32. Итак, я сохранил файлы в папку и добавил папку в свою систему PATH
.
Теперь, когда я выполняю методы magic
, я получаю исключение отсутствующего файла:
import magic
print(magic.Magic())
Traceback (most recent call last):
File "C:/Users/Admin/PycharmProjects/lex/lex.py", line 367, in <module>
test_magic()
File "C:/Users/Admin/PycharmProjects/lex/lex.py", line 364, in test_magic
print(magic.Magic())
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 52, in __init__
magic_load(self.cookie, magic_file)
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 188, in magic_load
return _magic_load(cookie, coerce_filename(filename))
File "C:\Python27\lib\site-packages\python_magic-0.4.3-py2.7.egg\magic.py", line 139, in errorcheck
raise MagicException(err)
magic.MagicException: could not find any magic files!
DLL находятся в PATH, я попытался отладить, и magic1.dll
находится правильно, но где-то внутри библиотеки выдает исключение.
Внутри пакета gnuwin32
я нашел magic
и magic.mgc
. Я поместил их в ту же папку и получил WindowsError: [Error 126]
на
libmagic = None
# Let's try to find magic or magic1
dll = ctypes.util.find_library('magic') or ctypes.util.find_library('magic1')
# This is necessary because find_library returns None if it doesn't find the library
if dll:
libmagic = ctypes.CDLL(dll)
Очевидно, это происходит потому, что python пытается открыть файл magic
как dll, который представляет собой обычный текст. После добавления .dll
к именам файлов в коде я получаю то же самое magic.MagicException: could not find any magic files!
.
Какие файлы мне не хватает?
ОБНОВЛЕНИЕ:
C:\Users\Admin>file C:\123.zip -m magic
file: could not find any magic files!
C:\Users\Admin>file C:\123.zip -m "C:\@DEV\@LIB\@Magic\GetGnuWin32\bin\magic"
C:\123.zip; ASCII text, with no line terminators
C:\Users\Admin>cd C:\@DEV\@LIB\@Magic\GetGnuWin32\bin
C:\@DEV\@LIB\@Magic\GetGnuWin32\bin>file C:\123.zip -m magic
C:\123.zip; ASCII text, with no line terminators
ОБНОВЛЕНИЕ 2 (РЕШЕНО):
print(magic.Magic())
magic.MagicException: could not find any magic files!
print(magic.Magic(magic_file = 'magic'))
<magic.Magic instance at 0x02A5E198>
просто нужно было явно указать файл
PATH
и ДО того, как выполнили скрипт? (глупый вопрос, поскольку вы, очевидно, разбираетесь в ctypes) - person Torxed   schedule 08.02.2013./
, но может быть, стоит просто попробовать? - Черт, просто перечитай вопрос.. ты уже сделал.. (я устал, 00:00 здесь) - person Torxed   schedule 08.02.2013Python -h
для получения дополнительных параметров параметров, но они могут дать вам лучшее представление о том, что он пытается импортировать и куда, надеюсь, вы сможете сопоставить это с тем, почему библиотеки DLL отсутствуют. - person Torxed   schedule 08.02.2013