10

我需要为 Windows 上的某些文件获取 mime 类型,所以我已经安装了python-magic(在 32 位 python 2.7.3 上)。
它取决于 unixmagic库。作者指示从 gnuwin32 项目中
获取regex2.dll和获取。所以我将文件保存到一个文件夹并将该文件夹添加到我的系统中。 现在当我执行方法时,我得到了丢失的文件异常: zlib1.dllmagic1.dllPATH
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位置正确,但是库内的某个地方抛出异常。在我找到
的包裹里面,. 我将它们放在同一个文件夹中,然后继续 gnuwin32magicmagic.mgcWindowsError: [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 试图以magicdll 形式打开文件,这是纯文本。在代码中添加.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>

只需要明确指定文件

4

4 回答 4

11

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

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

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

于 2015-01-30T11:13:59.767 回答
2

Path to magic file has to be explicitly passed to the constructor.

magic_object = magic.Magic(magic_file = 'path_to_magic_files/magic'))
于 2013-02-21T16:26:08.557 回答
2

由于 python-magic 问题似乎很常见,这里是未来 googlers 的可行解决方案:在不更改源代码的情况下测试大多数解决方案后,我发现以下内容可以让 python-magic 开箱即用:

  1. 安装GnuWin32 文件
  2. 设置环境变量MAGIC=path\to\gnuwin32\share\misc\magic
  3. 确保所有已安装的可执行文件/库都可以通过 PATH 访问
  4. 通过 pip 安装 python-magic
于 2017-10-20T09:48:10.130 回答
1

请尝试安装此软件包:

pip install python-magic-bin
于 2021-04-15T15:55:35.967 回答