首页 > 其他分享 >解决 Pyinstaller 6.0.0版本后,打包oneDir时非exe文件被默认归纳到_internal 文件夹问题

解决 Pyinstaller 6.0.0版本后,打包oneDir时非exe文件被默认归纳到_internal 文件夹问题

时间:2023-11-28 23:48:21浏览次数:50  
标签:executable exe Pyinstaller MEIPASS sys internal directory 归纳到 contents

现象描述:

自 Pyinstaller>=6.0.0 版本后,在打包 one dir(-D 目录模式)时,除可执行文件外,其余文件都将被转移到 _internal 文件夹下

image

官方原文:

Restructure onedir mode builds so that everything except the executable (and .pkg if you’re using external PYZ archive mode) are hidden inside a sub-directory. This sub-directory’s name defaults to _internal but may be configured with a new --contents-directory option. Onefile applications and macOS .app bundles are unaffected.

产生的问题:

由此产生的问题就是,旧项目中凡是直接使用相对路径调用的文件,在使用 Pyinstaller>=6.0.0 版本打包后,运行可执行文件时,会找不到这些文件。

解决方案:

  • 方案1:

    官方原文

    All of onedir build’s contents except for the executable are now moved into a sub-directory (called _internal by default). sys._MEIPASS is adjusted to point to this _internal directory. The breaking implications for this are:
    1.Assumptions that os.path.dirname(sys.executable) == sys._MEIPASS will break. Code locating application resources using os.path.dirname(sys.executable) should be adjusted to use __file__ or sys._MEIPASS and any code locating the original executable using sys._MEIPASS should use sys.executable directly.
    2.Any custom post processing steps (either in the .spec file or externally) which modify the bundle will likely need adjusting to accommodate the new directory.
    

    修改程序通过sys._MEIPASS或模块的__file__属性引用它们

  • 方案2:

    官方原文

    Allow users to re-enable the old onedir layout (without contents directory) by settings the --contents-directory option (or the equivalent contents_directory argument to EXE in the .spec file) to '.'.
    

    使用 --contents-directory参数,打包时设置--contents-directory .来使其启用旧版本的one dir 布局

    注意此参数生效需要 pyinstaller>=6.1.0

本文章的原文地址
GitHub主页

标签:executable,exe,Pyinstaller,MEIPASS,sys,internal,directory,归纳到,contents
From: https://www.cnblogs.com/yqbaowo/p/17863429.html

相关文章

  • SystemSettingsBroker.exe这个奇怪的进程
    系统版本:22621.2715做完PBRReset之后,进入系统,CheckSystemSettingsBroker.exe并没有存在,点击网络图标(TaskBar)后,SystemSettingsBroker.exe进程被拉起了。然后重启系统。 重启系统之后,放置一段时间,系统进入熄屏状态,通过键盘唤醒系统,进入S0,这时发现SystemSettingsBroker.exe又......
  • Scene渲染命令集合(executeCommands)分析
    Scene渲染命令集合(executeCommands)分析前提条件://已经确定了渲染缓冲区:view.globeDepth.framebufferpassState.framebuffer=view.globeDepth.framebuffer1、简单流程,没有pick和后处理//一般性流程executeCommands(scene,passState){//更新相机us.update......
  • PostgreSQL - Execute sql file using psql
    zzh@ZZHPC:~$sudoaptinstallpostgresql-client zzh@ZZHPC:~$psql--versionpsql(PostgreSQL)14.9(Ubuntu14.9-0ubuntu0.22.04.1) zzh@ZZHPC:~$psqlpostgresql://root:aaa@localhost:5432/zimple_bankpsql(14.9(Ubuntu14.9-0ubuntu0.22.04.1),server......
  • Web_BUUCTF_WriteUp | [ACTF2020 新生赛]Exec
    题目分析随便ping一个ip:发个串试试输入;netstat:不过滤输入,直接把输入作为命令执行了。看来是命令执行漏洞。输入;dir:输入;ls:判断为linux系统的命令执行漏洞,当前目录下只有这一个php文件。先看看根目录都有哪些文件夹可走,输入;ls/:发现flag!输入;ls......
  • ThreadPoolTaskExecutor类
    ThreadPoolTaskExecutor类可用来创建线程池并添加任务1TreadPoolTaskExecutortaskExecutor=newThreadPoolTaskExecutor();2taskExecutor.setCorePoolSize(5);//设置核心线程数3taskExecutor.setMaxPollSize(10);//设置最大线程数4taskExecutor.setQu......
  • pyinstaller利用spec文件打包的使用模板
    pyinstaller打包使用pyqt5开发软件,当项目越来越大,引用的资源越来越多时,那么使用pyinstaller进行打包,如果不利用spec文件,是很难满足打包需求的。spec文件,其实你在使用pyinstallermain.py打包时,也是会自动生成的,叫main.spec。不过,如果你想把自己的资源文件一起打进包去,则需......
  • python+playwright 学习-43 Pyinstaller打包生成独立的可执行文件
    前言playwright与Pyinstaller结合使用来创建独立的可执行文件。本地化安装有同学提到说想打成一个exe的独立包,但是执行playwrightinstall会默认把chromium,firefox和webkit三个浏览器安装到系统目录。这样打包的时候就找不到启动的浏览器文件。于是就想到把浏览器文件下......
  • python可视化打包exe
    安装Auto-py-to-exePython环境要大于或等于2.7然后在cmd里面输入pipinstallauto-py-to-exe安装完成之后,我们就可以在cmd输入一下命令启动auto-py-to-exe启动之后可以切换语言为中文,剩下的就看情况操作了......
  • python用playwright自动化测试程序打包exe
    playwright自动化测试代码写好后,打包为exe运行在目标PC上可能出现错误。原因:1、运行的PC没有响应的浏览器。2、playwright没有打包到代码中。所以本例用AutoPytoExe为例来制作exe程序解决问题。1、安装: 2、安装完成之后,我们就可以输入:auto-py-to-exe,来启动auto-py-to-exe......
  • pyinstaller添加数据文件
    添加数据文件您可以使用命令选项将数据文件添加到捆绑包中,或者通过将它们作为列表添加到规范文件中。使用规范文件时,请提供以下列表:将文件描述为的参数值。数据文件列表是元组列表。每个元组有两个值,这两个值都必须是字符串:datas=Analysis第一个字符串指定一个或多个......