pyinstaller打包

打包常见问题

Posted by 周自横 on January 3, 2021

将python程序打包为可执行文件

使用pyinstaller库进行打包

对于pyinstaller库的使用,主要在三个命令上:

  1. Pyinstaller -F setup.py
    

    -F 是打包单个文件的,-D是打包多个文件,在dist中生成很多依赖文件

    将程序打包成可执行文件,但是图标是默认的,并且会出现控制台窗口,可以在首次打包的时候,在控制台执行,会显示有程序执行的日志打印,若是存在错误,会直接在其中显示出来。

    image-20210103233905040

    在其中就标明了缺少charomedriver驱动

  2. Pyinstaller -F -w setup.py
    

    -w参数是标明打包后执行时不显示控制台,只对windows有效

  3. Pyinstaller -F -i xx.ico setup.py
    

    -i是指定图标代替默认图标作为可执行文件的标志

打包命令执行之后,生成三个文件夹:

. │ chromedriver.exe │ get_gmsc.py │ get_gmsc.spec │ panda.ico │ ├─build │ └─get_gmsc │ Analysis-00.toc │ base_library.zip │ EXE-00.toc │ get_gmsc.exe.manifest │ PKG-00.pkg │ PKG-00.toc │ PYZ-00.pyz │ PYZ-00.toc │ warn-get_gmsc.txt │ xref-get_gmsc.html │ ├─dist │ get_gmsc.exe │ └─__pycache__ get_gmsc.cpython-37.pyc

其中__pycache__builddist是打包生成的三个文件夹,get_gmsc.spec是生成的文件,其中在dist中的是生成我们需要的可执行文件。

image-20210104002929641

打包selenium依赖文件

最简单的解决方式就是直接将你使用的浏览器驱动如chromedriver.exe放置到于可执行文件同一个位置,这是一种最简单可行性最高的方法。

对于不行单独再带有chromedriver.exe文件的想法,的确应该有解决办法,其中存在有

  1. 使用-p设置导入路径,多个路径可以使用路径分隔符(win用分号,Linux用冒号)指定目录,也可以使用多个-p参数

    但是这个对``chromedriver.exe`不起作用

  2. .spec文件中设定参数,将驱动包含进去,这样生成的可执行文件会变大几兆,参照Pyinstaller 打包selenium项目 生成包含chromedriver 的exe文件,但是我尝试了没有成功。

    Pyinstaller打包用spec添加资源文件这个将资源放在.spec文件的另一个参数中,但是我同样没有成功

对于隐藏需要的资源文件,能够直接链接到它的,有两种方式

  1. Pyinstaller打包Selenium脚本为exe文件执行问题.spec文件中data参数中标明资源名称与文件位置等
  2. 在程序文件中指定使用的文件位置,如Python +selenium Pyinstaller打包之依赖文件

另外-w并不能解决selenium执行时出现控制台窗口的问题,需要库所在的文件Lib\site-packages\selenium\webdriver\common\service.py,其中76行附近的位置添加creationflags=134217728即可解决。

以上方式对使用helium也适用,同样是修改selenium

image-20210104002831862