前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >『Python』Python编译成计算机可执行文件(Windows计算机可执行文件exe,Linux 计算机可执行文件elf,Mac计算机可执行文件mach-O)

『Python』Python编译成计算机可执行文件(Windows计算机可执行文件exe,Linux 计算机可执行文件elf,Mac计算机可执行文件mach-O)

作者头像
风骨散人Chiam
发布2020-10-28 11:12:25
3.4K0
发布2020-10-28 11:12:25
举报
文章被收录于专栏:CSDN旧文

文章目录
  • 背景:
  • 我们的主角 :PyInstaller
  • 使用
    • 1.安装pyinstaller
    • 2.进入安装工作环境
    • 3. 生成不自定义图标的exe文件
    • 4.生成带自定义图标的exe文件
  • PyInstaller 会对脚本进行解析,并做出如下动作:
    • 内部流程

背景:

Python 程序都是脚本的方式,一般是在解析器里运行,如果要想要给别的计算机使用,需要提前安装Python解析器和相关包才可以运行,为了在 Windows(或其它系统里) 里方便发布,我们将.py文件,编译成一个可执行文件,并且打包所需要库文件,只需要点击一个可执行文件运行,而无需安装Python和相关库文件。这样发布给用户使用何不美哉。

我们的主角 :PyInstaller

PyInstaller 是一个十分有用的第三方库,可以用来打包 python 应用程序,打包完的程序就可以在没有安装 Python 解释器的机器上运行了。

PyInstaller将 Python应用程序冻结(打包)在Windows,GNU / Linux,Mac OS X,FreeBSD,Solaris和AIX下的独立可执行文件中。 与类似工具相比,PyInstaller的主要优势在于PyInstaller可与Python 2.7和3.5-3.7一起使用;由于透明压缩,它可生成较小的可执行文件;它是完全多平台的;并且使用OS支持来加载动态库,从而确保完全兼容。

PyInstaller的主要目标是开箱即用地与第三方软件包兼容。这意味着,使用PyInstaller,使外部软件包正常工作所需的所有技巧已 集成在PyInstaller本身中,因此无需用户干预。您将不需要在Wiki中寻找技巧,也可以对文件或设置脚本进行自定义修改。例如,完全支持PyQt,Django或matplotlib之类的库,而无需手动处理插件或外部数据文件。

使用
1.安装pyinstaller
代码语言:javascript
复制
pip install pyinstaller
2.进入安装工作环境
  1. Win+R运行打开CMD
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
  1. 进入工作目录,即所编译.py文件的路径 右键点击Python文件,属性中即可获得路径。
在这里插入图片描述
在这里插入图片描述

利用cd命令进入工作目录: cd C:\Users\张小胖\Desktop

在这里插入图片描述
在这里插入图片描述
3. 生成不自定义图标的exe文件
代码语言:javascript
复制
pyinstaller -F -w game.py  (-F表示打包单个文件,-w是为了打开exe时候不弹出黑框)
4.生成带自定义图标的exe文件
在这里插入图片描述
在这里插入图片描述
代码语言:javascript
复制
pyinstaller -F -w -i use.ico demo.py  (-i用来设置编译成exe文件的图标,后面跟.ico格式的图片文件)

-h,--help

查看该模块的帮助信息

-F,-onefile

产生单个的可执行文件

-D,--onedir

产生一个目录(包含多个文件)作为可执行程序

-a,--ascii

不包含 Unicode 字符集支持

-d,--debug

产生 debug 版本的可执行文件

-w,--windowed,--noconsolc

指定程序运行时不显示命令行窗口(仅对 Windows 有效)

-c,--nowindowed,--console

指定使用命令行窗口运行程序(仅对 Windows 有效)

-o DIR,--out=DIR

指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件

-p DIR,--path=DIR

设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径

-n NAME,--name=NAME

指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字

PyInstaller 会对脚本进行解析,并做出如下动作:
  1. 在工作目录生成 helloworld.spec 文件;
  2. 创建一个 build 文件夹;
  3. 写入一些日志文件和中间流程文件到 build 文件夹;
  4. 创建 dist 文件夹;
  5. 生成可执行文件到 dist 文件夹;
  6. 如果编译中出现错误,会生成debug.log的日志文件;
内部流程
代码语言:javascript
复制
C:\Users\张小胖\Desktop>pyinstaller -F -w demo.py
46 INFO: PyInstaller: 3.6
47 INFO: Python: 3.8.2
47 INFO: Platform: Windows-10-10.0.18362-SP0
49 INFO: wrote C:\Users\张小胖\Desktop\demo.spec
50 INFO: UPX is not available.
51 INFO: Extending PYTHONPATH with paths
['C:\\Users\\张小胖\\Desktop', 'C:\\Users\\张小胖\\Desktop']
51 INFO: checking Analysis
52 INFO: Building Analysis because Analysis-00.toc is non existent
52 INFO: Initializing module dependency graph...
54 INFO: Caching module graph hooks...
78 INFO: Analyzing base_library.zip ...
2072 INFO: Processing pre-find module path hook   distutils
2073 INFO: distutils: retargeting to non-venv dir 'c:\\users\\张小胖\\appdata\\local\\programs\\python\\python38\\lib'
4270 INFO: Caching module dependency graph...
4365 INFO: running Analysis Analysis-00.toc
4367 INFO: Adding Microsoft.Windows.Common-Controls to dependent assemblies of final executable
  required by c:\users\张小胖\appdata\local\programs\python\python38\python.exe
4630 INFO: Analyzing C:\Users\张小胖\Desktop\demo.py
4757 INFO: Processing pre-safe import module hook   urllib3.packages.six.moves
c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\selenium\webdriver\firefox\firefox_profile.py:208: SyntaxWarning: "is" with a literal. Did you mean "=="?
  if setting is None or setting is '':
6324 INFO: Processing module hooks...
6324 INFO: Loading module hook "hook-certifi.py"...
6327 INFO: Loading module hook "hook-distutils.py"...
6330 INFO: Loading module hook "hook-encodings.py"...
6390 INFO: Loading module hook "hook-lib2to3.py"...
6396 INFO: Loading module hook "hook-pydoc.py"...
6397 INFO: Loading module hook "hook-selenium.py"...
6408 INFO: Loading module hook "hook-sysconfig.py"...
6409 INFO: Loading module hook "hook-xml.dom.domreg.py"...
6410 INFO: Loading module hook "hook-xml.etree.cElementTree.py"...
6416 INFO: Loading module hook "hook-xml.py"...
6418 INFO: Loading module hook "hook-_tkinter.py"...
6555 INFO: checking Tree
6555 INFO: Building Tree because Tree-00.toc is non existent
6556 INFO: Building Tree Tree-00.toc
6668 INFO: checking Tree
6668 INFO: Building Tree because Tree-01.toc is non existent
6669 INFO: Building Tree Tree-01.toc
6723 INFO: Looking for ctypes DLLs
6755 INFO: Analyzing run-time hooks ...
6759 INFO: Including run-time hook 'pyi_rth__tkinter.py'
6762 INFO: Including run-time hook 'pyi_rth_multiprocessing.py'
6765 INFO: Including run-time hook 'pyi_rth_certifi.py'
6775 INFO: Looking for dynamic libraries
6862 WARNING: lib not found: pywintypes38.dll dependency of c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32evtlog.pyd
6870 WARNING: lib not found: pywintypes38.dll dependency of c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32api.pyd
6925 WARNING: lib not found: pywintypes38.dll dependency of c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\win32\win32wnet.pyd
7017 INFO: Looking for eggs
7018 INFO: Using Python library c:\users\张小胖\appdata\local\programs\python\python38\python38.dll
7019 INFO: Found binding redirects:
[]
7025 INFO: Warnings written to C:\Users\张小胖\Desktop\build\demo\warn-demo.txt
7089 INFO: Graph cross-reference written to C:\Users\张小胖\Desktop\build\demo\xref-demo.html
7130 INFO: checking PYZ
7130 INFO: Building PYZ because PYZ-00.toc is non existent
7134 INFO: Building PYZ (ZlibArchive) C:\Users\张小胖\Desktop\build\demo\PYZ-00.pyz
7971 INFO: Building PYZ (ZlibArchive) C:\Users\张小胖\Desktop\build\demo\PYZ-00.pyz completed successfully.
7989 INFO: checking PKG
7989 INFO: Building PKG because PKG-00.toc is non existent
7989 INFO: Building PKG (CArchive) PKG-00.pkg
10434 INFO: Building PKG (CArchive) PKG-00.pkg completed successfully.
10460 INFO: Bootloader c:\users\张小胖\appdata\local\programs\python\python38\lib\site-packages\PyInstaller\bootloader\Windows-64bit\runw.exe
10460 INFO: checking EXE
10460 INFO: Building EXE because EXE-00.toc is non existent
10461 INFO: Building EXE from EXE-00.toc
10463 INFO: Appending archive to EXE C:\Users\张小胖\Desktop\dist\demo.exe
10474 INFO: Building EXE from EXE-00.toc completed successfully. 

写在最后: Name:风骨散人,目前是一名双非在校大学生,预计考研,热爱编程,热爱技术,喜欢分享,知识无界,希望我的分享可以帮到你!名字的含义:我想有一天我能有能力随心所欲不逾矩,不总是向生活低头,有能力让家人拥有富足的生活而不是为了生计而到处奔波。“世人慌慌张张,不过是图碎银几两。偏偏这碎银几两,能解世间惆怅,可让父母安康,可护幼子成长 …”

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2020/06/01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 文章目录
    • 背景:
      • 我们的主角 :PyInstaller
        • 使用
          • 1.安装pyinstaller
          • 2.进入安装工作环境
          • 3. 生成不自定义图标的exe文件
          • 4.生成带自定义图标的exe文件
        • PyInstaller 会对脚本进行解析,并做出如下动作:
          • 内部流程
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档