开发者

pyinstaller打包exe程序的步骤和添加依赖文件的实现

开发者 https://www.devze.com 2022-12-10 11:48 出处:网络 作者: Spider.Li
目录pyinstaller打包exe程序和添加依赖文件1、安装pyinstaller库2、pyinstaller的打包机制3、打包命令4、添加导包外的一些依赖文件5、.spec方式打包6、pyinstaller常用参数pyinstall打包时的依赖问题pyinstaller打包
目录
  • pyinstaller打包exe程序和添加依赖文件
    • 1、安装pyinstaller库
    • 2、pyinstaller的打包机制
    • 3、打包命令
    • 4、添加导包外的一些依赖文件
    • 5、.spec方式打包
    • 6、pyinstaller常用参数
  • pyinstall打包时的依赖问题

    pyinstaller打包exe程序和添加依赖文件

    或许我们并不是专业的程序猿,但是却可以通过python来提高我http://www.cppcns.com们的工作效率,减少加班时间,让代码替我们完成一些重复的工作,节省下来的时间去泡个妹子,牵牵小手不香吗

    话不多说,马上进入本次pyinstall编程客栈er打包工具知识分享,隔壁家小东女朋友叫我待会一起去吃饭呢。。。。。

    1、安装pyinstaller库

    命令行输入以下命令,如图显示是我已经装过了:

    pip install pyinstaller
    

    pyinstaller打包exe程序的步骤和添加依赖文件的实现

    2、pyinstaller的打包机制

    python脚本的运行离不开python解释器,把脚本打包成exe可执行文件时,pyinstaller会将python解释器和脚本一起打包,同时把需要用到的第三方库和依赖包一并打入到exe文件中,下面我就以最近写的一款装包工具为例,简述一下我的打包过程。

    3、打包命令

    pyinstaller-F [main.py]

    这条命令指的是将以main.py为主程序的脚本打包为单独一个exe文件,-F参数表示覆盖打包,无论打多少次包都会是最新的。你可以选择cmd命令行进行操作,也可以使用pycharm的Terminal端口进行,我使用的是Terminal。如图。

    pyinstaller打包exe程序的步骤和添加依赖文件的实现

    运行完毕后,会看到build,dist,和.spec文件生成。dist里面的exe文件就是刚刚生成的可执行文件,这样简单快捷的打包就完成啦。

    4、添加导包外的一些依赖文件

    www.cppcns.com第3步这种情况是程序中不需要依赖外部文件的,假如程序逻辑中需要依赖一些文件,但pyinstaller并不会将自动把这些文件帮你打包进去,比如,一个第三方库中有一段程序需要去使用public.xml文件,当打包完成后,这个文件是不会自动打包进去的,那该怎么办呢?

    pyinstaller打包exe程序的步骤和添加依赖文件的实现

    别急,pyinstaller为我们提供了参数配置文件,也就是刚刚生成的.spec文件,我们只需要再datas中配置需要打包的文件即可,比如

    datas=[('D:\\python3.6.5\\Lib\\site-packages\\androguard\\core\\resources\\public.xml','androguard\\core\\resources')

    表示的是将public.xml文件打包到androguard\core\resources目录下

    pyinstaller打包exe程序的步骤和添加依赖文件的实现

    其他的一些参数配置请自行百度,如有时需要让pyinstaller不打包某些用不到的模块,可通过在excludes=[]中添加此模块实现,如excludes=[‘xxx’]。

    5、.spec方式打包

    这样修改后我们就可以使用命令进行再次打包啦,打包完成后打开软件,发现需要用到依赖文件已经成功打包,相关功能就正常啦。

    pyinstaller -D xxx.spec 

    6、pyinstaller常用参数

    另外,骚强也是整理了一下pyinstaller的常用参数,有兴趣可以试一试哦,坑已经准备好了,各位勇士快来踩一踩

    • -F, –onefile 打包一个单个文件,如果你的代码都写在一个.py文件的话,可以用这个,如果是多个.py文件就别用
    • -D, –onedir 打包多个文件,在dist中生成很多依赖文件,适合以框架形式编写工具代码,我个人比较推荐这样,代码易于维护
    • -K, –tk 在部署时包含 TCL/TK
    • -a, –ascii 不包含编码.在支持Unicode的python版本上默认包含所有的编码.
    • -d, –debug 产生debug版本的可执行文件
    • -w,–windowed,–noconsole 使用Windows子系统执行.当程序启动的时候不会打开命令行(只对Windows有效)
    • -c,–nowindowed,&nNtrcfdHBdash;console使用控制台子系统执行(默认)(只对Windows有效)
    pyinstaller -c xxxx.py
    pyinstaller xxxx.py --console
    • -s,–strip 可执行文件和共享库将run through strip.注意Cygwin的strip往往使普通的win32 Dll无法使用.
    • -X, –upx 如果有UPX安装(执行Configure.py时检测),会压缩执行文件(Windows系统中的DLL也会)(参见note)
    • -o DIR, –out=DIR 指定spec文件的生成目录,如果没有指定,而且当前目录是PyInstaller的根目录,会自动创建一个用于输出(spec和生成的可执行文件)的目录.如果没有指定,而当前目录不是PyInstaller的根目录,则会输出到当前的目录下.
    • -p DIR, –path=DIR 设置导入路径(和使用PYTHONPATH效果相似).可以用路径分割符(Windows使用分号,linux使用冒号)分割,指定多个目录.也可以使用多个-p参数来设置多个导入路径,让pyinstaller自己去找程序需要的资源
    • –icon= 将file.ico添加为可执行文件的资源(只对Windows系统有效),改变程序的图标  pyinstaller -i  ico路径 xxxxx.py
    • –icon= 将file.exe的第n个图标添加为可执行文件的资源(只对Windows系统有效)
    • -v FILE, –version=FILE 将verfile作为可执行文件的版本资源(只对Windows系统有效)
    • -n NAME, –name=NAME 可选的项目(产生的spec的)名字.如果省略,第一个脚本的主文件名将作为spec的名字

    pyinstall打包时的依赖问题

    前几天写了一个人脸表情分析的小程序,想用pyinstall打包成一个可以移植的小软件。因为之前用过pyinstall,所以这次使用同样的方法对我的程序进行打包:

    【pyinstaller -F --icon=图标.ico 要打包的文件.py --noconsole】

    其中【-F】参数表示打包后生成单一的文件。pyinstall还有其他的一些参数可供选择:

    What to generate:

    • -F, --onefile

    create a single file deployment

    • -D, --onedir

    create a single directory deployment (default)

    • -o DIR, --out=DIR

    create the spec file in directory. If not specified, and the current directory is Installer’s root directory, an output subdirectory will be created. Otherwise the current directory is used.

    • -n NAME, --name=NAME

    optional name to assign to the project (from which the spec file name is generated). If omitted, the basename of the (first) script is used.

    但是当我使用之前同样的方法打包完成后,也生成了一个exe程序,双击执行的时候,什么也没有发生。在pycharm中运行良好的程序,到exe就什么都没有了,最恐怖的是连报错都没有!!

    这时,可以使用【-C】参数,生成控制台版本的exe程序。这样会在【dist】文件夹下生成一个以程序命名的文件夹,在这个文件夹中会有这个exe程序。

    我们在控制台下执行这个程序,如果程序无法正常执行的话,会输出错误信息:

    pyinstaller打包exe程序的步骤和添加依赖文件的实现

    看来我的错误是因为无法打开这个dat文件,我想起来我在程序中用到了这个数据文件,可能打包的时候,pyinstall没有吧这个需要的依赖文件装进exe程序中。

    这时一种方法是吧这个dat文件拷贝进这个exe所在的文件夹中。

    另一种方法就是修改【spec】文件。

    打开spec文件,在datas参数里面添加依赖文件的路径

    pyinstaller打包exe程序的步骤和添加依赖文件的实现

    然后重新打包这个spec文件:【pyinstall from_video.spec】即可。

    以上为个人经验,希望能给大家一个参考,也希望大www.cppcns.com家多多支持我们。

    0

    精彩评论

    暂无评论...
    验证码 换一张
    取 消

    关注公众号