首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >缺少Windows上的“`magic`”库的文件

缺少Windows上的“`magic`”库的文件
EN

Stack Overflow用户
提问于 2013-02-07 22:08:53
回答 5查看 10.8K关注 0票数 10

我需要在windows上获得一些文件的mime类型,所以我已经安装了python-magic (在32位python2.7.3上)。

它依赖于unix magic库。

作者指导从regex2.dll项目中获取zlib1.dllmagic1.dll和gnuwin32项目。因此,我将文件保存到一个文件夹中,并将该文件夹添加到我的系统PATH中。

现在,当我执行magic方法时,会丢失文件异常:

代码语言:javascript
复制
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包中,我找到了magicmagic.mgc。我把它们放在同一个文件夹里,然后打开WindowsError: [Error 126]

代码语言:javascript
复制
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试图以dll的形式打开magic文件,这是纯文本。在代码中将.dll添加到文件名后,我将得到相同的magic.MagicException: could not find any magic files!

我漏掉了什么文件?

更新:

代码语言:javascript
复制
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(已解决):

代码语言:javascript
复制
print(magic.Magic())
magic.MagicException: could not find any magic files!

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

只是必须显式地指定文件

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2013-02-21 16:26:08

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

代码语言:javascript
复制
magic_object = magic.Magic(magic_file = 'path_to_magic_files/magic'))
票数 2
EN

Stack Overflow用户

发布于 2015-01-30 11:13:59

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

代码语言:javascript
复制
"c:\Program Files (x86)\GnuWin32\share\misc\magic"

不需要硬编码在你的程序中的路径!

票数 11
EN

Stack Overflow用户

发布于 2017-10-20 09:48:10

由于python魔术问题似乎很常见,这里是未来googlers人员的一个可行解决方案:在测试了大多数解决方案而不更改源代码之后,我发现以下内容可以让python魔术发挥作用:

  1. 安装GnuWin32文件 first
  2. 设置环境变量MAGIC=path\to\gnuwin32\share\misc\magic
  3. 确保所有已安装的可执行文件/库都可通过路径访问
  4. 通过pip安装python-魔术
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14761961

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档