• 将 Python 项目打包成可输入参数的exe可执行文件


    目录

    一、 Python 打包工具—Pyinstaller

    下载命令

     Pyinstaller的参数

    二、Python 打包可执行exe文件

    方法一:python虚拟环境下+打包的全过程:

    第一种情况: python不带参数打包exe及调用方式

    第二种情况: python带参数打包exe及调用方式

    三、ico 图片生成


    一、 Python 打包工具—Pyinstaller

    PyInstaller 是一个可以将 Python 程序打包成一个独立可执行文件的软件包。它通过读取已经编写好的 Python 脚本,分析代码执行需要的模块和库,然后将其依赖库一同打包转成可以直接脱离于python环境下独立运行的程序,目前已经支持 在Windows、Linux 和 Mac OS 上运行。简单的理解就是,通过对程序脚本的打包(尤其是带有操作界面的程序),可以获得一个完整的软件。

    下载命令

    pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyinstaller

     

     Pyinstaller的参数

    其中 Pyinstaller 命令的参数,其中

    • -F 参数代表制作独立的可执行程序。
    • -w 是指程序启动的时候不会打开命令行。如果不加 -w 的参数,就会有黑洞洞的控制台窗口出来。此外,-w 参数在 GUI 界面时非常有用。
    • -i就是指设置自己的图标图案,因为默认打包图片如下图所示。这个参数也可以写成 --icon=aiyc.ico

    在这里插入图片描述

    二、Python 打包可执行exe文件

    方法一:python虚拟环境下+打包的全过程

    conda 虚拟环境下

    1. #创建虚拟环境
    2. conda create -n aotu python=3.6
    3. #激活虚拟环境
    4. conda activate aotu
    5. #Pyinstaller打包
    6. Pyinstaller -F -w -i apple.ico py_word.py

    (1)先根据现有的虚拟环境创建项目,

      将代码复制进去,

    第一种情况: python不带参数打包exe及调用方式

    (2)修改代码运行结果的展现方式:

      

     (3)打开终端,运行代码

    1. (venv) PS D:\my\python-pycharm\zx> cd path_recommend
    2. (venv) PS D:\my\python-pycharm\zx\path_recommend> pyinstaller -F -w get_shortest_distance.py
    1. pyinstaller -F -w -i g:\2345Downloads\logo.ico login.py
    2. --hidden-import doTest.py --hidden-import itemContent --hidden-import queryDB.py
    3. --hidden-import view.py --hidden-import Applications.py --hidden-import mainWindow.py

    解释:进入到cmd命令行中,然后cd到我们的项目代码所在的具体的目录,在项目代码所在的目录中,使用上述代码进行打包。

    其中,

    • -F :大写,  打包成一个exe文件;
    • -w:小写,取消控制台显示;
    • -i  :小写,忽略打包过程中遇到的错误,就是遇到错误也继续执行;

    从这个项目文件目录安排上可以看出,这里没有在项目里放置更多的文件夹,一些代码文件都是散放在主文件夹中,在 pyinstaller -F -w -i之后放的是我们需要最终显示的图标的绝对路径,之后的第一个Python文件就是这个项目的主文件,之后使用--hidden-import导入这个项目中的一些其他的Python文件。

    下面是打包命令执行后程序打包的编译过程,具体如下: 

     最后会显示打包成功。

     

     (3)执行完毕之后,会生成几个文件夹,如下图所示。

    在dist里面就有了一个exe程序,这个就是可执行的exe程序,如下图所示。 

     从上图中,我们可以看到最后打包成功了,打包成功之后会在当前目录下生成两个文件夹,我们的EXE文件就在dist文件夹中。

    已经生成了一个exe 应用程序,看来已经成功一半了。

    (4)我们把这个get_shortest_distance.exe拖到和get_shortest_distance.py平级的目录,双击运行一下这个exe。

    (5)双击生成的exe文件,就可以看到新生成的txt结果文件了。

     欧克。

    第二种情况: python带参数打包exe及调用方式

     参考python带参数打包exe及调用方式_Python-考高分网

    一般打包都是使用pyinstaller -F -w xxx.py,传入参数之后没有任何提示和print。可以使用sys进行传参。换成

    pyinstaller -F xxx.py

    即可。

    (2) 修改代码运行结果的展现方式:

    1. if __name__ == '__main__':
    2. V = list([i for i in range(0, 315)])
    3. E = main_distance('data/tw_315_with_dis.csv')
    4. graph = {
    5. 'V': V,
    6. 'E': E
    7. }
    8. start_node = sys.argv[1]
    9. end_node = sys.argv[2]
    10. print("起点:", start_node, "终点:", end_node)
    11. # start_node, end_node = 1, 60
    12. path, sum_coss = get_shortest_distance(start_node, end_node, graph)
    13. stri = "节点" + str(start_node) + "到节点" + str(end_node) + "的最短路径为:" + str(path) + "\n总距离为:" + str(sum_coss)
    14. print(stri)
    15. with open('result.txt', 'w', encoding='UTF-8') as file:
    16. file.write(str(stri))
    17. output = os.popen('get_shortest_distance.exe arg1 arg2').read()

    (3)打开终端,运行命令,生成dist文件夹下的exe应用程序。

    pyinstaller -F get_shortest_distance.py
    

    把这个get_shortest_distance.exe拖到和get_shortest_distance.py平级的目录,

    (4)在pycharm的终端输入运行exe命令,

    1. (venv) PS D:\my\python-pycharm\zx\path_recommend> .\get_shortest_distance.exe 1 60
    2. 起点: 1 终点: 60
    3. 节点1到节点60的最短路径为:[1, 0, 8, 9, 12, 14, 16, 19, 297, 298, 299, 300, 302, 304, 305, 303, 301, 296, 18, 17, 15, 295, 293, 291, 288, 287, 285, 282, 281, 279, 306, 307, 308, 309, 311, 314, 13, 11, 10, 4 24, 30, 31, 32, 33, 35, 38, 39, 41, 42, 43, 45, 47, 48, 52, 55, 58, 53, 60]

    同样,在cmd中输入命令也是一样的,

    欧克。

    三、ico 图片生成

    自己做的软件都喜欢放上自己的图标,不过哪来那么多 ico 图片呢?一个是可以找专门的 ico 图片网站,不过都很小众,图片库也很小。另一个是可以自己生成,这里就给大家分享一个网站,可以把其他格式图片转成 ico 格式:在线图片转icon格式 – 图片转换成icon在线工具 – 迅捷PDF转换器在线免费版

  • 相关阅读:
    太绝了!NB!阿里第九版Java系统架构师+应用架构师面试突击宝典大全
    Centos8 降低gcc版本至gcc-7.3
    vue高级用法extend,动态生成组件,checkbox选不中问题排除
    文件批量搜索器:根据文件名清单查找文件夹内文件移动复制保存
    关于我用iVX沉浸式体验了一把0代码创建飞机大战这件事
    0907小众网,续0906,SSM前后端项目,思路,报错(重点)
    【通信原理】揭开傅里叶级数与傅里叶变换的神秘面纱
    IMS异常场景介绍
    (四)Spring对IoC的实现
    基于Redis的简易延时队列
  • 原文地址:https://blog.csdn.net/qq_45956730/article/details/126853115