python - Windows 上缺少 `magic` 库的文件

标签 python windows gnuwin32 python-magic

我需要获取 Windows 上某些文件的 MIME 类型,所以我安装了 python-magic(在 32 位 python 2.7.3 上)。
它依赖于 unix magic 库。
作者指示从 gnuwin32 项目中获取 regex2.dllzlib1.dllmagic1.dll。 所以我将文件保存到一个文件夹并将该文件夹添加到我的系统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)

这显然是因为 python 试图将 magic 文件作为 dll 打开,它是纯文本。将 .dll 添加到代码中的文件名后,我得到相同的 magic.MagicException: 找不到任何魔法文件!
我缺少什么文件?

更新:

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>

只需明确指定文件

最佳答案

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

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

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

关于python - Windows 上缺少 `magic` 库的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14761961/

相关文章:

windows - 我可以向 Windows 上的应用程序发送 ctrl-C (SIGINT) 吗?

windows - 从命令行对十六进制数进行排序?

windows - sh for Windows哪里适合搭建Hadoop?

python - 谷歌 API google.auth.exceptions.RefreshError : 'invalid_scope: Bad Request'

python - 设计新类时如何打印联系人列表内容

javascript - 使用 npm Windows Upgrade 时出现问题

python-2.7 - SIP Makefile 失败(gnuwin 和 mingw)

python - 从 S3 存储桶导入 AWS Lambda 函数代码中的库

python - Keras 函数模型提供高验证准确性但不正确的预测

c++ - 在 UDP 套接字上多次调用 connect() 以发送到不同的目标地址 - 有效吗?