Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/353.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Windows上的“magic”库缺少文件_Python_Windows_Gnuwin32_Python Magic - Fatal编程技术网

Python Windows上的“magic”库缺少文件

Python Windows上的“magic”库缺少文件,python,windows,gnuwin32,python-magic,Python,Windows,Gnuwin32,Python Magic,我需要在windows上获取一些文件的mime类型,因此我安装了PythonMagic(在32位Python2.7.3上)。 它取决于unixmagic库。 作者指示从gnuwin32项目获取regex2.dll、zlib1.dll和magic1.dll。 因此,我将文件保存到一个文件夹中,并将该文件夹添加到我的系统路径 现在,当我执行magic方法时,我会得到缺少的文件异常: import magic print(magic.Magic()) Traceback (most recent c

我需要在windows上获取一些文件的mime类型,因此我安装了
PythonMagic
(在32位Python2.7.3上)。
它取决于unix
magic
库。
作者指示从gnuwin32项目获取
regex2.dll
zlib1.dll
magic1.dll
。 因此,我将文件保存到一个文件夹中,并将该文件夹添加到我的系统
路径

现在,当我执行
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!
这显然是因为python试图将
magic
文件作为dll(纯文本)打开。在代码中将
.dll
添加到文件名后,我得到了相同的
magic.MagicException:找不到任何magic文件
我丢失了什么文件

更新:

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
print(magic.Magic())
magic.MagicException: could not find any magic files!

print(magic.Magic(magic_file = 'magic'))
<magic.Magic instance at 0x02A5E198>
更新2(已解决):

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
print(magic.Magic())
magic.MagicException: could not find any magic files!

print(magic.Magic(magic_file = 'magic'))
<magic.Magic instance at 0x02A5E198>
print(magic.magic())
magic.MagicException:找不到任何魔法文件!
打印(magic.magic(magic_文件='magic'))

只需显式地指定文件

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

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

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

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

无需在程序中硬编码路径

由于python的魔法问题似乎很常见,这里为未来的谷歌提供了一个可行的解决方案: 在测试了大多数解决方案而不更改源代码后,我发现以下内容可以让python magic开箱即用:

  • 首先安装
  • 将环境变量MAGIC=path\设置为\gnuwin32\share\misc\MAGIC
  • 确保所有已安装的可执行文件/库都可以通过 路径
  • 通过pip安装python magic

  • 请尝试安装此软件包:

    pip install python-magic-bin
    

    愚蠢的问题,您是否在将DLL添加到
    路径
    之后和执行脚本之前重新启动了命令提示符?(愚蠢的问题,因为你显然知道如何处理ctypes)“在将DLL添加到路径后是否重新启动了命令提示符”-是的,我尝试过将DLL放在同一个目录中,然后在这些目录上尝试ctypes?或者这是否有助于开始?我不知道他们是否在某个特定的位置(如
    /
    )查找DLL,但不妨尝试一下废话,重读这个问题。。你已经做到了。。(我累了,这里是00:00)已经尝试将我的脚本放在同一个目录中-一切都一样。这是否有帮助:(特别是关于放置DLL的文件夹名称的部分)@picomon perfect questions。沟通能力有限的人往往忘记提及这些细节