标签: libmagic

运行32位Python 2.7版本的64位Windows 10的python-magic安装挑战

尽管遵循了该模块的自述文件,我仍然得到"未找到魔法文件".自述文件和"依赖关系"部分说:

在Windows上,将magic1.dll,regex2.dll和zlib1.dll从File for Windows项目提供的Binaries and Dependencies zip文件复制到PATH上.您将需要从[binary-zip]\share\misc中复制文件魔法,并将其位置传递给Magic(magic_file = ...)如果您使用的是64位版本的python,则需要64 -bit libmagic二进制文件,可以在这里找到:https://github.com/pidydx/libmagicwin64(注意:未经测试).

以下说明将有所帮助:

1)提供的Files for Windows链接有一个链接到"file-5.03-bin.zip"(标记为"Binaries"),链接到"file-5.03-dep.zip"(标记为"Dependencies"),以及一个链接在右下角的"file-4.26-dep.zip",它也被标记为"依赖文件".我假设最后一个是错误,应该指向5.03-dep,而不是另一个需要的第二个依赖项文件.正确?

在此输入图像描述

2)似乎有32位版本和64位版本的依赖项文件.我不知道哪个版本用于64位Windows而是32位Python.上面的说明说64位Python,但这说64位Windows. 我应该安装哪个?

3)上面说的把DLL放在PATH中; 64位指令说将它们放在C:\ Windows\System32中.是否重要,只要文件夹是PATH?(有人建议特别不要将它们放在\ Windows\System32帮助:Python-magic安装错误 - ImportError:找不到libmagic).

4)以上建议除了3个DLL之外,二进制文件和依赖项中唯一需要的其他文件是文件magic.所以我不需要文件magic.mgc,这也是二进制zip\share\misc?我也不需要这两个ZIP中的任何其他文件,比如文件file

5)上述建议得到文件magic出了二进制压缩,并把它的路径在一行代码它说:Magic(magic_file=...).我认为这实际上是magic.Magic(magic_file='C:\path\goes\here\magic')和我认为这可以在文件系统中的任何地方.

6)..我再次假设我指的是文件magic而不是文件magic.mgc.

这些假设是否正确?

windows dll python-2.7 libmagic python-magic

9
推荐指数
2
解决办法
2040
查看次数

你如何编写一个魔术文件测试模式来匹配文件的结尾?

我开始怀疑这是否可能,因为在SO,Google,Bing和linuxquestions.org上的多次搜索都没有发现.

我有兴趣扩展位于/usr/share/magic(由file(1)实用程序使用)的魔术模式,以根据文件末尾或附近的数据识别文件.我已经能够在文件的开头执行此操作,以及从一开始就对文件进行任意偏移.

该手册页非常好地说明了一些标准用例; 不幸的是,似乎没有一种方法可以从最终开始而不是从开头开始.我能想到的唯一解决方法是使用tac和/或采用脚本方法,lreverse但感觉这些可能对二进制数据不友好.

此外,我想避免任何其他脚本处理 - 我觉得这应该是正确的文件魔术可行.有任何想法吗?

linux design-patterns classification file libmagic

7
推荐指数
1
解决办法
1042
查看次数

如何在Heroku上安装libmagic?

我有一个使用的rails 4应用程序,ruby-filemagic因此filemagic需要在系统上安装.

我已经尝试通过模仿这个问题的解决方案在Heroku上安装它,但它只是不起作用.我尝试了很多东西,但我觉得最有希望的是安装,apt-get这要归功于(修改过的)apt-get,configruby buildpacks的组合.在配置中,我使用BUNDLE_BUILD__RUBY-FILEMAGIC: --with-magic-dir=/app/.apt/usr/ --with-magic-include=/app/.apt/usr/include --with-magic-lib=/app/.apt/usr/lib

最终,我仍然得到这个:

  /tmp/build_29e629f8a00379850ab44096c10f1afc/vendor/ruby-2.0.0/bin/ruby extconf.rb --with-magic-dir=/tmp/build_29e629f8a00379850ab44096c10f1afc/.apt/usr/ --with-magic-include=/tmp/build_29e629f8a00379850ab44096c10f1afc/.apt/usr/include --with-magic-lib=/tmp/build_29e629f8a`00379850ab44096c10f1afc/.apt/usr/lib
   checking for main() in -lgnurx... no
   checking for magic_open() in -lmagic... no
   *** ERROR: missing required library to compile this module
   *** extconf.rb failed ***
   Could not create Makefile due to some reason, probably lack of necessary
   libraries and/or headers.  Check the mkmf.log file for more details.  You may
   need configuration options.
Run Code Online (Sandbox Code Playgroud)

libmagic …

ruby-on-rails heroku apt-get libmagic

5
推荐指数
1
解决办法
698
查看次数

静态编译libmagic(c/c ++文件类型检测)

感谢那些帮助我解决上一个问题的人(链接仅供参考).

我可以将文件fileTypeTest.cpp,libmagic.a以及magic在一个目录下,我可以编译g++ -lmagic fileTypeTest.cpp fileTypeTest.稍后,我将测试它是否在使用MinGW编译的Windows中运行.

我打算在一个小的GUI应用程序中使用libmagic,我想静态编译它以便分发.我的问题是libmagic似乎需要外部文件magic.(我实际上正在使用我自己的缩短和编译版本,magic_short.mgc,但我离题了.)

一个hacky解决方案是将文件编码到应用程序中,根据需要创建(和删除)外部文件.我怎么能避免这个?

为清晰起见添加:

magic是一个描述不同文件类型属性的文本文件.当要求识别文件时,libmagic搜索magic.有一个编译版本,magic.mgc工作得更快.我的应用程序只需要确定一些文件类型,然后再决定如何处理它们,所以我将使用自己的magic_short文件来创建magic_short.mgc.

c++ compilation libmagic

3
推荐指数
1
解决办法
5122
查看次数

python-magic使用哪个libmagic?

我正在使用

python-magic

我已经使用安装了它

sudo apt-get remove libmagic-dev

为了正确引用它,当我尝试在线查找作者时,我意识到有多个libmagic图书馆,例如

libmagic-dev在ubuntu apt-get存储库中找到的来源是什么?

python linux apt-get libmagic

3
推荐指数
1
解决办法
2840
查看次数

Pyinstaller - 编译应用程序后找不到 libmagic

问题

我正在用 Python 编写一个应用程序。它在我的 python 环境中运行良好,但是当我使用 PyInstaller 编译它并尝试运行生成的可执行文件时,我收到以下错误:ImportError: failed to find libmagic. Check your installation

我有一种感觉,这与“python-magic-bin”有关,该安装包含名为“magic”的模块所需的二进制文件,因为如果我从 Python 环境中卸载“python-magic-bin”并尝试运行该应用程序,我得到了完全相同的错误。我认为由于某种原因,这些二进制文件没有被带到编译的 exe 中。

如果它有所作为,我从 .whl 文件安装了“python-magic-bin”。此安装在安装“magic”的目录中添加了一个名为“libmagic”的文件夹 libmagic.dll 和 magic.mgc。

如果我的问题是正确的,我如何让 PyInstaller 携带“魔法”需要的二进制文件?

重现问题

可以执行以下操作来重现问题:

  1. 将此代码复制并粘贴到您的编辑器中。将其另存为名为“test.py”的文件

    import magic
    
    m=magic.MAGIC_NONE
    print(m)
    
    Run Code Online (Sandbox Code Playgroud)
  2. 从此链接下载“python_magic_bin-0.4.14-py2.py3-none-win32.whl”并在解释器中使用以下命令将所需的库安装到Python 3.6

    >>> pip install pyinstaller
    >>> pip install python-magic
    >>> pip install python_magic_bin-0.4.14-py2.py3-none-win32.whl
    >>> pip install libmagic
    
    Run Code Online (Sandbox Code Playgroud)
  3. 在与“test.py”文件相同的目录中打开命令提示符,并使用以下命令使用 pyinstaller 编译程序:

    > pyinstaller test.py
    
    Run Code Online (Sandbox Code Playgroud)
  4. 完成后,移动到新创建的 /dist/test 目录 ( cd ./dist/test) 并使用以下命令运行 .exe:

    > ./test.exe
    
    Run Code Online (Sandbox Code Playgroud)

运行后,你应该看到一个错误读数:ImportError: failed to find libmagic. Check …

python pyinstaller python-3.x libmagic python-3.6

3
推荐指数
1
解决办法
1362
查看次数

PHP 7.2 finfo魔术文件

我有一个Laravel 5项目,我们让用户下载.ai(插图文件)。问题是Laravel将.ai文件检测为application / pdf。

我正在使用此功能检测MIME类型

$type = File::mimeType( $_path );
Run Code Online (Sandbox Code Playgroud)

我也尝试使用这种方法,但是得到了相同的结果

$finfo = finfo_open(FILEINFO_MIME);
$mimetype = $finfo->file($_path);
finfo_close($finfo);
Run Code Online (Sandbox Code Playgroud)

我认为,PHP不知道什么是.ai文件是一个问题。我对finfo进行了更深入的研究,我了解默认的mime定义已编译到PHP中,但是我看到finfo_open具有第二个参数“ magic_file”,我认为这是您可以在其中插入其他mime定义文件的路径的地方。 。

我尝试使用Ubuntu的/etc/magic.mime文件,但finfo给了我

ErrorException: finfo_open(): Warning: offset `application\/activemessage' invalid in
Run Code Online (Sandbox Code Playgroud)

错误。我认为这是因为magic.mime文件的格式不正确。

在线上的大多数主题都会创建自定义PHP函数或其他一些技巧来检测mime类型,但我觉得这不是这里的正确解决方案。

在哪里可以找到最新的mime定义文件,如何将它们加载到PHP或finfo中?

我的环境:

Ubuntu 16.04
PHP 7.2
Run Code Online (Sandbox Code Playgroud)

php mime-types libmagic

2
推荐指数
1
解决办法
802
查看次数