Windows上的`magic`库文件丢失

我需要在Windows上获取mimetypes的一些文件,所以我已经安装了python-magic (在32位python 2.7.3上)。
这取决于unix的magic库。
作者指示从regex2.dll项目获取regex2.dllzlib1.dllmagic1.dll 。 所以我保存文件到一个文件夹,并将文件夹添加到我的系统PATH
现在当我执行magic方法,我得到丢失的文件exception:

 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中,我试过debugging和magic1.dll位置正确,但库内的某处引发exception。
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) 

这显然发生,因为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> 

只是不得不明确指定文件

对于未来的Google访问者:另一个解决方案是在系统设置中将%MAGIC%环境变量设置为指向魔术文件,对我来说是:

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

无需在程序中对路径进行硬编码!

magic文件的路径必须显式传递给构造函数。

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

由于蟒蛇魔法问题似乎是相当普遍的,所以这里有一个工作解决方案的未来谷歌:在测试大多数解决方案,而不改变源代码后,我发现以下python魔术开箱即用:

  1. 首先安装GnuWin32文件
  2. 将环境变量MAGIC = path \设置为\ gnuwin32 \ share \ misc \ magic
  3. 确保所有安装的可执行文件/库都可以通过PATH访问
  4. 通过pip安装python-magic