Отсутствуют файлы для библиотеки `magic` в Windows

Мне нужно получить MIME-тип для некоторых файлов на Windows, поэтому я установил python-magic (на 32-битном питоне 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 находятся в ПУТИ, я попробовал отладку и 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>

просто нужно было явно указать файл

5 ответов

Решение

Путь к magic Файл должен быть явно передан в конструктор.

magic_object = magic.Magic(magic_file = 'path_to_magic_files/magic'))

Для будущих посетителей Google: Другое решение - установить переменную%MAGIC% в настройках системы, чтобы она указывала на магический файл, для меня это было:

"c:\Program Files (x86)\GnuWin32\share\misc\magic"

Не нужно жестко кодировать путь в вашей программе!

Пожалуйста, попробуйте установить этот пакет:

      pip install python-magic-bin

Поскольку проблемы с python-magic кажутся довольно распространенными, вот рабочее решение для будущих googlers: После тестирования большинства решений без изменения исходного кода я обнаружил следующее, чтобы получить python-magic, работающую из коробки:

  1. Сначала установите файл GnuWin32
  2. Установите переменную окружения MAGIC=path\to\gnuwin32\share\misc\magic
  3. Убедитесь, что все установленные исполняемые файлы / библиотеки доступны через PATH
  4. Установите python-magic через pip

попробуй это:

      pip uninstall python-magic
pip uninstall python-magic-bin
pip install python-magic
pip install python-magic-bin

что означает установку python-magic-bin после python-magic

ссылка: https://github.com/ahupp/python-magic/issues/248

Другие вопросы по тегам