python-Pyinstaller-编译应用后找不到libmagic
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-Pyinstaller-编译应用后找不到libmagic,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2836字,纯文字阅读大概需要5分钟。
内容图文
![python-Pyinstaller-编译应用后找不到libmagic](/upload/InfoBanner/zyjiaocheng/668/19f5021d843545b0a92877d5e95785c7.jpg)
问题
我正在用Python编写应用程序.它在我的python环境中正常工作,但是当我使用PyInstaller对其进行编译并尝试运行生成的可执行文件时,出现以下错误:ImportError:找不到libmagic.检查您的安装
我感觉这与“ python-magic-bin”有关,该安装包含名为“ magic”的模块所需的二进制文件,因为如果从我的Python环境中卸载“ python-magic-bin”并尝试运行该应用程序,我得到相同的确切错误.我认为由于某些原因这些二进制文件没有被带到已编译的exe中.
如果有所不同,我从.whl文件中安装了“ python-magic-bin”.此安装将一个名为“ libmagic”的文件libmagic.dll和magic.mgc文件夹添加到了安装“ magic”的目录中.
题
如果我对这个问题是正确的,我如何让PyInstaller继承“魔术”所需的二进制文件?
重现问题
可以执行以下操作来重新创建问题:
>复制此代码并将其粘贴到编辑器中.将其另存为名为
“ test.py”
import magic
m=magic.MAGIC_NONE
print(m)
>从此链接下载“ 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
>在与“ test.py”文件相同的目录中打开命令提示符,并使用以下命令通过pyinstaller编译程序:
> pyinstaller test.py
>完成后,移至新创建的/ dist / test目录(cd ./dist/test)并使用以下命令运行.exe:
> ./test.exe
运行它之后,您应该看到错误读取:ImportError:找不到libmagic.检查您的安装并无法执行脚本测试
规格文件
这是我用来编译项目的规范文件.
# -*- mode: python -*-
block_cipher = None
a = Analysis(['main.py'],
pathex=['D:\\Home_Python\\pytags'],
binaries=[],
datas=[],
hiddenimports=[],
hookspath=[],
runtime_hooks=[],
excludes=[],
win_no_prefer_redirects=False,
win_private_assemblies=False,
cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
cipher=block_cipher)
exe = EXE(pyz,
a.scripts,
exclude_binaries=True,
name='main',
debug=False,
strip=False,
upx=True,
console=True )
coll = COLLECT(exe,
a.binaries,
a.zipfiles,
a.datas,
strip=False,
upx=True,
name='main')
版本号
对于这个项目,我正在使用:
> Python 3.6.3
> PyInstaller 3.3.1
> Libmagic 1.0
> Python魔术0.4.15
> Python魔术绑定0.4.14
解决方法:
我在几天后就解决了这个问题,所以我将在这里为将来可能遇到相同问题的任何人记录我的解决方案.
问题是libmagic用于查找正常工作所需的.dll文件的方法.
转到Python安装下的Lib / site-packages / magic,然后将名为magic.py的文件和名为libmagic的文件夹复制到Python项目的目录中.之后,在您首选的IDE中打开magic.py.如果您转到第156行,则会看到以下代码:
bin_dist_path = os.path.join(os.path.dirname(__file__), 'libmagic')
这是导致我们出现问题的那条线.它会在magic.py文件所在的目录中寻找一个名为libmagic的文件夹.具体来说,这里的问题是当文件冻结为.exe文件时__file__变量无法正常工作,因此我用sys.executable替换了__file__.结果行如下所示:
bin_dist_path = os.path.join(os.path.dirname(sys.executable), 'libmagic')
保存文件,编译程序,然后将libmagic文件夹复制到与生成的.exe文件相同的目录中.
如果您运行.exe,则所有内容现在都应正常运行.
如果有什么我可以澄清的或者您有任何疑问,请不要犹豫.
内容总结
以上是互联网集市为您收集整理的python-Pyinstaller-编译应用后找不到libmagic全部内容,希望文章能够帮你解决python-Pyinstaller-编译应用后找不到libmagic所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。