美文网首页
pyinstaller可执行文件报错astor

pyinstaller可执行文件报错astor

作者: 生活就是爱 | 来源:发表于2020-05-11 15:46 被阅读0次

    今天在用pyinstaller打包的时候,遇到一个报错

    File /home/username/anaconda3/envs/envname/lib/python3.5/site-packages/PyInstaller/loader/pyimod03_importers.py
       exec(bytecode, module.__dict__)
    File "site-packages/astor/__init__.py",line 24,in <model>
    FileNotFoundError: [Errno 2] no such file or directory:"/temp/_MEI24122/astor/VERSION
    

    这里看到pyinstaller有一个很奇怪的骚操作,要去系统临时文件夹里面找一个VERSION文件

    1. 寻找"罪魁祸首"

    根据错误提示定位到下列文件line 24

    /home/username/anaconda3/envs/envname/lib/python3.5/site-packages/astor/__init__.py
    

    发现这里通过读取外部文件的方式获取软件版本信息

    ROOT = os.path.dirname(__file__)
    with open(os.path.join(ROOT, 'VERSION')) as version_file:
        __version__ = version_file.read().strip()
    

    pyinstaller在打包的时候默认情况下是不会把外部文件打包的,只会放在临时文件夹中供临时调用
    当临时文件被系统自动清除的时候,调用可执行文件就会报错

    2. 解决方法

    astor软件包读取自身版本信息,这行代码并没有什么用(准确地说,是没有被其他地方调用)
    直接把上述三行代码注释掉,重新打包即可

    当然,更加正式的做法,是把这个版本文件的完整路径添加到待打包文件的spec文件里的Analysis[data]选项中
    具体方法可以出门左转,参考我之前的一篇文章,见下方第二个参考资料

    3. what' more

    为什么同样的文件打包,我之前在另一台电脑的虚拟机上没有遇到这个情况
    网上有小伙伴说是astor版本的原因, 0.8.1版本会遇到这个问题,可以通过降版本的方式解决
    我打开另一台电脑的虚拟机,首先查看了一下astor的版本

    >> pip list | grep astor
    astor            0.7.1
    

    果然是低版本程序
    然后找到相应的文件 astor/__init__.py,果然有新发现

    __version__ = '0.7.1'
    

    大功告成, 原因、解决方案算是都找到了
    至于这个astor到底是干啥的,据说是个Python资源管理工具
    反正网上资料很少,官网也没看懂,贴上官网地址,有兴趣的小伙伴可以研究一下

    参考资料:
    python3.7 pyinstaller 打包exe可执行文件报错
    pyinstaller打包动态库
    astor官网

    相关文章

      网友评论

          本文标题:pyinstaller可执行文件报错astor

          本文链接:https://www.haomeiwen.com/subject/oeyunhtx.html