详解 pyinstaller 打包多个py文件

这篇具有很好参考价值的文章主要介绍了详解 pyinstaller 打包多个py文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

最近有个需求要把python项目打包成可执行程序运行,看了很多帖子,大多数博主都采用pyinstall 打包,看着也不难,本以为很简单的事情,对于我这个新手来说也折腾了2个多小时吧,记录下遇到的坑,和大家分享,希望能给予你们帮助,少走弯路。

安装pyinstall

pip install pyinstaller

实验项目结构

  • 在sampleproject目录下执行tree /f 查看文件结构
    详解 pyinstaller 打包多个py文件
pyinstaller -F  -c simple.py -p __init__.py -p test_install.py

打包多个py文件的命令

pyinstaller [主文件] -p [其他文件1] -p [其他文件2] --hidden-import [自建模块1] --hidden-import [自建模块2] 

其中sample.py是主程序入口文件,其他.py文件是自建模块(test_install.py)。所以在执行下面命令:
pyinstaller -F -c simple.py -p __init__.py -p test_install.py

执行完成后会产生2个文件夹build,dist和一个文件simple.spec

详解 pyinstaller 打包多个py文件

进入exe目录并成功执行exe程序
详解 pyinstaller 打包多个py文件

OK 这样就完成了打包的程序,事实上,我并不是这么顺利,中间也遇到些问题

遇到的问题 Failed to execute script ‘simple’ due to unhandled exception!

首先看下py文件的内容,内容瞎写的,只是为了测试!!!

test_install.py

def install_test():
    print('install test!')

simple.py 调用 test_install.py 中的方法

  • 方式一
    import test_install
    ...
    test_install.install_test()
    
  • 方式二
     from test_install import install_test
     ...
     install_test()
    

这四种方式用python simple.py 都是能通过的,然而方式一和方式二打包后都有报错ModuleNotFoundError: No module named ‘test_install’
[37320] Failed to execute script ‘simple’ due to unhandled exception!

解决方法

原因 install_test 是在sample包下,导入路径要写上父包的路径

  • 方式三
    from sample.test_install import install_test
    ...
    install_test()
    
  • 方式四
    from sample import test_install
    ...
    test_install.install_test()
    

遇到的问题 NameError: name ‘exit’ is not defined

  • 解决方法:在simple.py中使用的exit()替换为sys.exit()

  • 出错的原因exit 用于给交互式 Shell 返回值,而 sys.exit 是用于程序内部

Python 中的 exit() 和 sys.exit() 的区别

exit is a helper for the interactive shell - sys.exit is intended for use in programs.

The site module (which is imported automatically during startup, except if the -S command-line option is given) adds several constants to the built-in namespace (e.g. exit). They are useful for the interactive interpreter shell and should not be used in programs.

Note that there is a third exit option, namely os._exit, which exits without calling cleanup handlers, flushing stdio buffers, etc. (and which should normally only be used in the child process after a fork()).

对于上面的引用的理解:

  • exit()/quit(), 抛出 SystemExit 异常. 一般在交互式 Shell 中退出时使用.
  • sys.exit(n) 退出程序引发 SystemExit 异常, 可以捕获异常执行些清理工作. n 默认值为 0, 表示正常退出. 其他都是非正常退出. 还可以 sys.exit(“sorry, goodbye!”); 一般主程序中使用此退出.
  • os._exit(n), 直接退出, 不抛异常, 不执行相关清理工作. 常用在子进程的退出.

参考链接

文中测试项目地址
python打包后,执行报错:NameError: name ‘exit‘ is not defined
Pyinstaller打包多个.py文件
python相对路径导入bug解决:ImportError: attempted relative import with no known parent package文章来源地址https://www.toymoban.com/news/detail-411978.html

到了这里,关于详解 pyinstaller 打包多个py文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 使用pyinstaller将具有多个python文件的项目打包为exe(含依赖库)

    1、将需要打包有python文件放到一个文件夹,例如下图所示的Demo文件夹,其中ClickEveryDay.py为主文件,telegram.ico为图标文件。   2、生成主函数对应的spec文件 命令:在Demo文件夹路径下使用:pyi-makespec ClickEveryDay.py,将产生一个ClickEveryDay.spec文件。 3、修改ClickEveryDay.spec文件:加

    2024年02月11日
    浏览(54)
  • 【Python打包成exe】快速将多个py文件及其他文件打包为exe可执行文件

    尝试了很多种Python打包为exe可执行文件的方式,通过总结,得出一种最简洁、最有效的打包方式分享给大家! 准备好将要打包的工程文件(夹) 如上图所示, 首先将主文件UI.py和文件夹./file放在一级文件夹./YW下方,如果有同级其他.py文件与UI.py放在同一级文件夹即可! 然后

    2024年01月21日
    浏览(45)
  • python - 安装pyqt5模块,PyCharm配置QtDesigner/Pyuic/Pyrcc,ui转py文件,图片转ico/icns格式,pyinstaller/py2app打包代码

    window配置Python+PyQt5+QtDesigner+PyUic+PyRcc(最全安装教程):https://blog.csdn.net/baidu_35145586/article/details/108110236 MacOS配置Pycharm+Python+PyQt5+QtDesigner+PyUic+PyRcc: https://blog.csdn.net/lkhk2008/article/details/116019386 QtDesigner工具的使用(界面与业务逻辑分离实现):https://blog.csdn.net/weixin_62094306/art

    2024年02月03日
    浏览(47)
  • Python 打包配置文件 setup.py 详解

    在Python开发中,我们经常需要将自己的代码打包成可供其他人使用的库或应用程序。为了方便用户安装和使用,我们需要创建一个配置文件  setup.py ,用于定义打包的相关信息和依赖项。本文将详细介绍如何编写  setup.py  文件,并展示每一步需要做什么。 1.1 为什么需要对项

    2024年02月03日
    浏览(41)
  • Python文件打包(pyinstaller,nuitka)

    ##背景:最近用Pyqt5编写界面后考虑到一些用户没有程序的运行环境,故而需要打包为exe程序提供给用户使用,在经过一番资料的查询以及踩坑后,写下了这篇博客,目前主要有两种主流的方法。分别是使用Pyinstaller与Nuitka进行打包。下面分享一下两种方法的具体使用与心得。

    2024年02月16日
    浏览(50)
  • 【Python】Pyinstaller打包Linux运行文件,暴露配置文件

    Pyinstaller可以将python程序打包成可执行文件,在windows上是exe文件,在linux上是二进制可执行文件。 工作中有需求是把本地python工程打包成后台可运行的服务,考虑到部署环境的不同,可以使用docker镜像的方式,也可以使用pyinstaller打包成可执行文件: docker镜像的好处是运行起

    2024年02月05日
    浏览(41)
  • python pyinstaller打包常见问题(一):无法生成exe文件/打包闪退

    小游戏程序,本地环境能正常运行 程序调用了wav文件,即音效资源文件 程序调用wav路径正确,也是采用绝对路径 程序制作完成后,进行了以下三步打包操作: 在需要打包的程序的目录上,我进入终端输入以下命令进行打包: 2.1、打开生成的snake.spec文件 2.2、修改Analysis 的

    2024年01月22日
    浏览(70)
  • Pyinstaller打包可执行文件运行在linux容器中

    1、安装说明 在linux安装pyinstaller 2、执行打包命令 $python_path/bin/pyinstaller -F test.py 3、调用dist目录下文件 ./test 常见问题 重新编译安装python即可 ./configure –prefix=/usr/local/python3.9 –enable-shared –with-ssl make make install

    2024年02月14日
    浏览(31)
  • 使用pyinstaller打包python文件遇到的问题和解决方法

    情况1 :当所使用的代码都在一个.py文件中,且该代码中没有调用其他文件和import自己写的函数时 例如: 打包下面这个检查输入的ip是否符合规范的程序ipcheck.py,程序中只Import了自带的库re 下载pyinstaller 使用Pyinstaller打包。先进入该程序所在的文件夹,在文件资源管理器的文

    2024年02月06日
    浏览(55)
  • 解决pyinstaller打包文件过大问题,手把手教学

    1.首先需要在Pycharm创建一个虚拟环境,如图:  2.第二步创建我们自己的虚拟环境,如图,我这里将我的环境命名为myworkspace,然后它会自动创建一个venv文件,这里面就包含了我们的一些依赖包,接下来点击create就行:  3.第三步点击create之后,我们再点击new window,打开我们的虚拟

    2024年02月14日
    浏览(62)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包