zoukankan      html  css  js  c++  java
  • python 代码如何打包成.exe文件(Pyinstaller)

    前言

    python写的代码如何打包成.exe可执行程序,让别人电脑上没安装过 python 的小伙伴也可以直接运行?
    本篇讲如何用PyInstaller库一步步打包python代码。

    PyInstaller 环境准备

    我的电脑环境:
    1.系统windows 10
    2.python 3.6.6

    PyInstaller 环境需依赖pywin32包,先安装pywin32, 推荐pip安装

    pip install pywin32 --index-url https://pypi.douban.com/simple
    

    如果没安装pywin32,后面打包会报错:FileNotFoundError: [Errno 2] No such file or directory: 'libsite-packageswin32win32wnet.pyd'

    使用pip安装PyInstaller

    pip install PyInstaller --index-url https://pypi.douban.com/simple
    

    安装完查看版本号

    C:Usersdell>pip show pywin32
    Name: pywin32
    Version: 228
    
    C:Usersdell>pip show PyInstaller
    Name: pyinstaller
    Version: 4.3
    Requires: setuptools, importlib-metadata, altgraph, pywin32-ctypes, pyinstaller-hooks-contrib, pefile
    

    pywin32离线包下载地址,需匹配对应的python和系统版本https://www.lfd.uci.edu/~gohlke/pythonlibs/#pip

    打包.exe文件

    我写了一段简单的 requests 代码yoyoblog.py

    """
    使用requests库获取我的博客首页文章地址
    上海-悠悠 blog:https://www.cnblogs.com/yoyoketang/
    """
    import requests
    import re
    
    
    r = requests.get("https://www.cnblogs.com/yoyoketang/")
    # 匹配首页blog地址
    res = re.findall(r'class="postTitle2 vertical-middle" href="(.+?)"', r.text)
    for i in res:
        print("blog:", i)
    

    命令行运行结果

    D:demomyblog>python yoyoblog.py
    blog: https://www.cnblogs.com/yoyoketang/p/14811325.html
    blog: https://www.cnblogs.com/yoyoketang/p/14500093.html
    blog: https://www.cnblogs.com/yoyoketang/p/14084401.html
    blog: https://www.cnblogs.com/yoyoketang/p/10302295.html
    blog: https://www.cnblogs.com/yoyoketang/p/14891200.html
    blog: https://www.cnblogs.com/yoyoketang/p/14891142.html
    blog: https://www.cnblogs.com/yoyoketang/p/14890723.html
    blog: https://www.cnblogs.com/yoyoketang/p/14890583.html
    blog: https://www.cnblogs.com/yoyoketang/p/14888404.html
    blog: https://www.cnblogs.com/yoyoketang/p/14887668.html
    blog: https://www.cnblogs.com/yoyoketang/p/14887087.html
    blog: https://www.cnblogs.com/yoyoketang/p/14884606.html
    blog: https://www.cnblogs.com/yoyoketang/p/14873194.html
    blog: https://www.cnblogs.com/yoyoketang/p/14869348.html
    

    这段代码依赖第三方库requests,需在python目录Libsite-packages下找到requests

    找到后整个文件夹全部复制到代码根目录

    cd到项目跟目录myblog下执行命令

    pyinstaller -F yoyoblog.py
    

    执行过程如下

    D:demomyblog>pyinstaller -F yoyoblog.py
    275 INFO: PyInstaller: 4.3
    275 INFO: Python: 3.6.6
    275 INFO: Platform: Windows-10-10.0.17134-SP0
    276 INFO: wrote D:demomyblogyoyoblog.spec
    ...
    14480 INFO: Writing RT_ICON 7 resource with 1128 bytes
    14486 INFO: Updating manifest in D:demomybloguildyoyoblog
    un.exe.l_fhvf3j
    14486 INFO: Updating resource type 24 name 1 language 0
    14490 INFO: Appending archive to EXE D:demomyblogdistyoyoblog.exe
    16213 INFO: Building EXE from EXE-00.toc completed successfully.
    

    看到successfully 就是成功了

    pyinstaller 一些常用参数命令

    • -F 表示生成单个可执行文件
    • -w 表示去掉控制台窗口,这在GUI界面时非常有用。不过如果是命令行程序的话那就把这个选项删除吧!
    • -p 表示你自己自定义需要加载的类路径,一般情况下用不到
    • -i 表示可执行文件的图标

    更多参数可以通过pyinstaller -h查看

    执行.exe文件

    打包完成后会在 dist 目录看到一个 yoyoblog.exe 文件

    可以打开到对应目录

    双击运行yoyoblog.exe

    双击运行发现代码运行很快,一闪就没有了,这是因为代码运行完就自动结束了,导致啥都没看到。
    解决办法1:可以在cmd窗口执行.exe文件

    D:demomyblogdist>yoyoblog.exe
    blog: https://www.cnblogs.com/yoyoketang/p/14811325.html
    blog: https://www.cnblogs.com/yoyoketang/p/14500093.html
    blog: https://www.cnblogs.com/yoyoketang/p/14084401.html
    blog: https://www.cnblogs.com/yoyoketang/p/10302295.html
    blog: https://www.cnblogs.com/yoyoketang/p/14891200.html
    blog: https://www.cnblogs.com/yoyoketang/p/14891142.html
    blog: https://www.cnblogs.com/yoyoketang/p/14890723.html
    blog: https://www.cnblogs.com/yoyoketang/p/14890583.html
    blog: https://www.cnblogs.com/yoyoketang/p/14888404.html
    blog: https://www.cnblogs.com/yoyoketang/p/14887668.html
    blog: https://www.cnblogs.com/yoyoketang/p/14887087.html
    blog: https://www.cnblogs.com/yoyoketang/p/14884606.html
    blog: https://www.cnblogs.com/yoyoketang/p/14873194.html
    blog: https://www.cnblogs.com/yoyoketang/p/14869348.html
    

    解决办法2:加一句代码按任意键退出

    """
    使用requests库获取我的博客首页文章地址
    上海-悠悠 blog:https://www.cnblogs.com/yoyoketang/
    """
    import requests
    import re
    
    
    r = requests.get("https://www.cnblogs.com/yoyoketang/")
    # 匹配首页blog地址
    res = re.findall(r'class="postTitle2 vertical-middle" href="(.+?)"', r.text)
    for i in res:
        print("blog:", i)
    
    input("press any key to exit!")
    

    重新执行pyinstaller -F yoyoblog.py 打包,这样就可以双击运行了

    icon 制作

    -i参数打包的时候可以自定义icon图标

    -i <FILE.ico or FILE.exe,ID or FILE.icns or "NONE">, --icon <FILE.ico or FILE.exe,ID or FILE.icns or "NONE">
                            FILE.ico: apply that icon to a Windows executable.
                            FILE.exe,ID, extract the icon with ID from an exe.
                            FILE.icns: apply the icon to the .app bundle on Mac OS
                            X. Use "NONE" to not apply any icon, thereby making
                            the OS to show some default (default: apply
                            PyInstaller's icon)
    

    先找一张icon图片放到项目跟目录(注意并不是每个图片格式都可以,必须是icon格式)

    -i 参数打包

    pyinstaller -F yoyoblog.py -i favicon.ico
    

    打包完成重新双击运行,会看到左上角有自己的icon了

    icon在线制作https://www.bitbug.net/

  • 相关阅读:
    css资料汇总
    typescript 点滴
    vue-cli3点滴
    item2的使用方法推介
    rfc文档
    websocket
    g2
    常用的正则积累
    Vue-20190623点滴
    写一个webpackLoader
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/14891637.html
Copyright © 2011-2022 走看看