尽管遵循了该模块的自述文件,我仍然得到"未找到魔法文件".自述文件和"依赖关系"部分说:
在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
.
这些假设是否正确?
我开始怀疑这是否可能,因为在SO,Google,Bing和linuxquestions.org上的多次搜索都没有发现.
我有兴趣扩展位于/usr/share/magic
(由file(1)
实用程序使用)的魔术模式,以根据文件末尾或附近的数据识别文件.我已经能够在文件的开头执行此操作,以及从一开始就对文件进行任意偏移.
该手册页非常好地说明了一些标准用例; 不幸的是,似乎没有一种方法可以从最终开始而不是从开头开始.我能想到的唯一解决方法是使用tac
和/或采用脚本方法,lreverse
但感觉这些可能对二进制数据不友好.
此外,我想避免任何其他脚本处理 - 我觉得这应该是正确的文件魔术可行.有任何想法吗?
我有一个使用的rails 4应用程序,ruby-filemagic
因此filemagic
需要在系统上安装.
我已经尝试通过模仿这个问题的解决方案在Heroku上安装它,但它只是不起作用.我尝试了很多东西,但我觉得最有希望的是安装,apt-get
这要归功于(修改过的)apt-get,config和ruby 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 …
感谢那些帮助我解决上一个问题的人(链接仅供参考).
我可以将文件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
.
我正在使用
python-magic
我已经使用安装了它
sudo apt-get remove libmagic-dev
为了正确引用它,当我尝试在线查找作者时,我意识到有多个libmagic
图书馆,例如
libmagic-dev
在ubuntu apt-get存储库中找到的来源是什么?
我正在用 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 携带“魔法”需要的二进制文件?
可以执行以下操作来重现问题:
将此代码复制并粘贴到您的编辑器中。将其另存为名为“test.py”的文件
import magic
m=magic.MAGIC_NONE
print(m)
Run Code Online (Sandbox Code Playgroud)从此链接下载“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)在与“test.py”文件相同的目录中打开命令提示符,并使用以下命令使用 pyinstaller 编译程序:
> pyinstaller test.py
Run Code Online (Sandbox Code Playgroud)完成后,移动到新创建的 /dist/test 目录 ( cd ./dist/test
) 并使用以下命令运行 .exe:
> ./test.exe
Run Code Online (Sandbox Code Playgroud)运行后,你应该看到一个错误读数:ImportError: failed to find libmagic. Check …
我有一个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) libmagic ×7
apt-get ×2
linux ×2
python ×2
c++ ×1
compilation ×1
dll ×1
file ×1
heroku ×1
mime-types ×1
php ×1
pyinstaller ×1
python-2.7 ×1
python-3.6 ×1
python-3.x ×1
python-magic ×1
windows ×1