缺少文件`在Windows magic`库(Missing files for `magic` li

2019-07-19 14:28发布

我需要的MIME类型在Windows上的一些文件,所以我已经安装了python-magic (32位蟒蛇2.7.3)。
这取决于UNIX magic库。
作者指示得到regex2.dllzlib1.dllmagic1.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包我找到了magicmagic.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)

这显然是因为蟒蛇试图打开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

UPDATE 2(解决):

print(magic.Magic())
magic.MagicException: could not find any magic files!

print(magic.Magic(magic_file = 'magic'))
<magic.Magic instance at 0x02A5E198>

只是要明确指定文件

Answer 1:

对于未来的谷歌用户:另一种解决方案是设置在系统设置%MAGIC%环境变量指向的神奇文件,对我来说是:

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

无需硬编码在你的程序路径!



Answer 2:

路径magic文件必须明确地传递给构造。

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


Answer 3:

由于蟒蛇魔法的问题似乎是相当普遍的,在这里FO未来的Google工作的解决方案:在不改变源代码测试的大多数解决方案之后,我发现下面让蟒蛇魔法工作开箱:

  1. 安装的GnuWin32文件 第一
  2. 设置环境变量MAGIC =路径\到\的GnuWin32 \共享\杂项\魔
  3. 确保所有已安装的可执行文件/程序库,通过路径访问
  4. 通过安装PIP蟒蛇魔法


文章来源: Missing files for `magic` library on Windows