赞
踩
在学习和工作之中,想制作一些小工具,用python秃了一个晚上,拿到公司,发现要安装python才能用,看别人的博客看不懂,别急,一篇搞定。
pyinstaller 是一个python库,和其他库一样,可以用pip 进行导入。
pip install pyinstaller
pyinstaller可以打包python程序变为exe,像其他程序一样,让其可以在任何windows下正常运行而无需python的解析。
pyinstaller有很多参数,可以用-H参数查看帮助
- pyinstaller -h
- usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
- [--add-data <SRC;DEST or SRC:DEST>]
- [--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
- [--hidden-import MODULENAME]
- [--collect-submodules MODULENAME]
- [--collect-data MODULENAME] [--collect-binaries MODULENAME]
- [--collect-all MODULENAME] [--copy-metadata PACKAGENAME]
- [--recursive-copy-metadata PACKAGENAME]
- [--additional-hooks-dir HOOKSPATH]
- [--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
- [--key KEY] [--splash IMAGE_FILE]
- [-d {all,imports,bootloader,noarchive}]
- [--python-option PYTHON_OPTION] [-s] [--noupx]
- [--upx-exclude FILE] [-c] [-w]
- [-i <FILE.ico or FILE.exe,ID or FILE.icns or "NONE">]
- [--disable-windowed-traceback] [--version-file FILE]
- [-m <FILE or XML>] [--no-embed-manifest] [-r RESOURCE]
- [--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
- [--win-no-prefer-redirects]
- [--osx-bundle-identifier BUNDLE_IDENTIFIER]
- [--target-architecture ARCH] [--codesign-identity IDENTITY]
- [--osx-entitlements-file FILENAME] [--runtime-tmpdir PATH]
- [--bootloader-ignore-signals] [--distpath DIR]
- [--workpath WORKPATH] [-y] [--upx-dir UPX_DIR] [-a]
- [--clean] [--log-level LEVEL]
- scriptname [scriptname ...]
-
- positional arguments:
- scriptname Name of scriptfiles to be processed or exactly one
- .spec file. If a .spec file is specified, most options
- are unnecessary and are ignored.
-
- optional arguments:
- -h, --help show this help message and exit
- -v, --version Show program version info and exit.
- --distpath DIR Where to put the bundled app (default: ./dist)
- --workpath WORKPATH Where to put all the temporary work files, .log, .pyz
- and etc. (default: ./build)
- -y, --noconfirm Replace output directory (default:
- SPECPATH\dist\SPECNAME) without asking for
- confirmation
- --upx-dir UPX_DIR Path to UPX utility (default: search the execution
- path)
- -a, --ascii Do not include unicode encoding support (default:
- included if available)
- --clean Clean PyInstaller cache and remove temporary files
- before building.
- --log-level LEVEL Amount of detail in build-time console messages. LEVEL
- may be one of TRACE, DEBUG, INFO, WARN, ERROR,
- CRITICAL (default: INFO).
-
- What to generate:
- -D, --onedir Create a one-folder bundle containing an executable
- (default)
- -F, --onefile Create a one-file bundled executable.
- --specpath DIR Folder to store the generated spec file (default:
- current directory)
- -n NAME, --name NAME Name to assign to the bundled app and spec file
- (default: first script's basename)
- What to bundle, where to search:
- --add-data <SRC;DEST or SRC:DEST>
- Additional non-binary files or folders to be added to
- the executable. The path separator is platform
- specific, ``os.pathsep`` (which is ``;`` on Windows
- and ``:`` on most unix systems) is used. This option
- can be used multiple times.
- --add-binary <SRC;DEST or SRC:DEST>
- Additional binary files to be added to the executable.
- See the ``--add-data`` option for more details. This
- option can be used multiple times.
- -p DIR, --paths DIR A path to search for imports (like using PYTHONPATH).
- Multiple paths are allowed, separated by ``';'``, or
- use this option multiple times. Equivalent to
- supplying the ``pathex`` argument in the spec file.
- --hidden-import MODULENAME, --hiddenimport MODULENAME
- Name an import not visible in the code of the
- script(s). This option can be used multiple times.
- --collect-submodules MODULENAME
- Collect all submodules from the specified package or
- module. This option can be used multiple times.
- --collect-data MODULENAME, --collect-datas MODULENAME
- Collect all data from the specified package or module.
- This option can be used multiple times.
- --collect-binaries MODULENAME
- Collect all binaries from the specified package or
- module. This option can be used multiple times.
- --collect-all MODULENAME
- Collect all submodules, data files, and binaries from
- the specified package or module. This option can be
- used multiple times.
- --copy-metadata PACKAGENAME
- Copy metadata for the specified package. This option
- can be used multiple times.
- --recursive-copy-metadata PACKAGENAME
- Copy metadata for the specified package and all its
- dependencies. This option can be used multiple times.
- --additional-hooks-dir HOOKSPATH
- An additional path to search for hooks. This option
- can be used multiple times.
- --runtime-hook RUNTIME_HOOKS
- Path to a custom runtime hook file. A runtime hook is
- code that is bundled with the executable and is
- executed before any other code or module to set up
- special features of the runtime environment. This
- option can be used multiple times.
- --exclude-module EXCLUDES
- Optional module or package (the Python name, not the
- path name) that will be ignored (as though it was not
- found). This option can be used multiple times.
- --key KEY The key used to encrypt Python bytecode.
- --splash IMAGE_FILE (EXPERIMENTAL) Add an splash screen with the image
- IMAGE_FILE to the application. The splash screen can
- display progress updates while unpacking.
- How to generate:
- -d {all,imports,bootloader,noarchive}, --debug {all,imports,bootloader,noarchive}
- Provide assistance with debugging a frozen
- application. This argument may be provided multiple
- times to select several of the following options.
- - all: All three of the following options.
- - imports: specify the -v option to the underlying
- Python interpreter, causing it to print a message
- each time a module is initialized, showing the
- place (filename or built-in module) from which it
- is loaded. See
- https://docs.python.org/3/using/cmdline.html#id4.
- - bootloader: tell the bootloader to issue progress
- messages while initializing and starting the
- bundled app. Used to diagnose problems with
- missing imports.
- - noarchive: instead of storing all frozen Python
- source files as an archive inside the resulting
- executable, store them as files in the resulting
- output directory.
- --python-option PYTHON_OPTION
- Specify a command-line option to pass to the Python
- interpreter at runtime. Currently supports "v"
- (equivalent to "--debug imports"), "u", and "W
- <warning control>".
- -s, --strip Apply a symbol-table strip to the executable and
- shared libs (not recommended for Windows)
- --noupx Do not use UPX even if it is available (works
- differently between Windows and *nix)
- --upx-exclude FILE Prevent a binary from being compressed when using upx.
- This is typically used if upx corrupts certain
- binaries during compression. FILE is the filename of
- the binary without path. This option can be used
- multiple times.
- Windows and Mac OS X specific options:
- -c, --console, --nowindowed
- Open a console window for standard i/o (default). On
- Windows this option has no effect if the first script
- is a '.pyw' file.
- -w, --windowed, --noconsole
- Windows and Mac OS X: do not provide a console window
- for standard i/o. On Mac OS this also triggers
- building a Mac OS .app bundle. On Windows this option
- is automatically set if the first script is a '.pyw'
- file. This option is ignored on *NIX systems.
- -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 the 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. Use "NONE" to not apply any icon, thereby making
- the OS to show some default (default: apply
- PyInstaller's icon)
- --disable-windowed-traceback
- Disable traceback dump of unhandled exception in
- windowed (noconsole) mode (Windows and macOS only),
- and instead display a message that this feature is
- disabled.
-
- Windows specific options:
- --version-file FILE Add a version resource from FILE to the exe.
- -m <FILE or XML>, --manifest <FILE or XML>
- Add manifest FILE or XML to the exe.
- --no-embed-manifest Generate an external .exe.manifest file instead of
- embedding the manifest into the exe. Applicable only
- to onedir mode; in onefile mode, the manifest is
- always embedded, regardless of this option.
- -r RESOURCE, --resource RESOURCE
- Add or update a resource to a Windows executable. The
- RESOURCE is one to four items,
- FILE[,TYPE[,NAME[,LANGUAGE]]]. FILE can be a data file
- or an exe/dll. For data files, at least TYPE and NAME
- must be specified. LANGUAGE defaults to 0 or may be
- specified as wildcard * to update all resources of the
- given TYPE and NAME. For exe/dll files, all resources
- from FILE will be added/updated to the final
- executable if TYPE, NAME and LANGUAGE are omitted or
- specified as wildcard *. This option can be used
- multiple times.
- --uac-admin Using this option creates a Manifest that will request
- elevation upon application start.
- --uac-uiaccess Using this option allows an elevated application to
- work with Remote Desktop.
-
- Windows Side-by-side Assembly searching options (advanced):
- --win-private-assemblies
- Any Shared Assemblies bundled into the application
- will be changed into Private Assemblies. This means
- the exact versions of these assemblies will always be
- used, and any newer versions installed on user
- machines at the system level will be ignored.
- --win-no-prefer-redirects
- While searching for Shared or Private Assemblies to
- bundle into the application, PyInstaller will prefer
- not to follow policies that redirect to newer
- versions, and will try to bundle the exact versions of
- the assembly.
-
- Mac OS specific options:
- --osx-bundle-identifier BUNDLE_IDENTIFIER
- Mac OS .app bundle identifier is used as the default
- unique program name for code signing purposes. The
- usual form is a hierarchical name in reverse DNS
- notation. For example:
- com.mycompany.department.appname (default: first
- script's basename)
- --target-architecture ARCH, --target-arch ARCH
- Target architecture (macOS only; valid values: x86_64,
- arm64, universal2). Enables switching between
- universal2 and single-arch version of frozen
- application (provided python installation supports the
- target architecture). If not target architecture is
- not specified, the current running architecture is
- targeted.
- --codesign-identity IDENTITY
- Code signing identity (macOS only). Use the provided
- identity to sign collected binaries and generated
- executable. If signing identity is not provided, ad-
- hoc signing is performed instead.
- --osx-entitlements-file FILENAME
- Entitlements file to use when code-signing the
- collected binaries (macOS only).
- Rarely used special options:
- --runtime-tmpdir PATH
- Where to extract libraries and support files in
- `onefile`-mode. If this option is given, the
- bootloader will ignore any temp-folder location
- defined by the run-time OS. The ``_MEIxxxxxx``-folder
- will be created here. Please use this option only if
- you know what you are doing.
- --bootloader-ignore-signals
- Tell the bootloader to ignore signals rather than
- forwarding them to the child process. Useful in
- situations where for example a supervisor process
- signals both the bootloader and the child (e.g., via a
- process group) to avoid signalling the child twice.
作者常用的有[--onefile]、[-w]和[-i],这三个参数的作用分别是
1.将py只打包成一个exe文件
2.可以将命令行隐藏,在有GUI的程序里非常管用,可以把黑窗隐藏,让程序变的美观(如果没有GUI,建议不要使用该参数)
3.可以自定义图标
PyInstaller 工具的命令语法如下:
pyinstaller 选项 选项的参数
不管这个 Python 应用是单文件的应用,还是多文件的应用,只要在使用 pyinstaller 命令时编译作为程序入口的 Python 程序即可。
PyInstaller工具是跨平台的,它既可以在 Windows平台上使用,也可以在 Mac OS X 平台上运行。在不同的平台上使用 PyInstaller 工具的方法是一样的,它们支持的选项也是一样的。
下面先创建一个 app 目录,在该目录下创建一个 app.py 文件,文件中包含如下代码:
接下来使用命令行工具进入到此 app 目录下,执行如下命令:
pyinstaller --onefile app.py
执行上面命令,将看到详细的生成过程。当生成完成后,将会在此 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app.exe 文件,这就是使用 PyInstaller 工具生成的 EXE 程序。
在命令行窗口中进入 dist 目录下,在该目录执行 app.exe ,将会看到该程序生成如下输出结果:
程序开始执行
孙悟空
由于该程序没有图形用户界面,因此如果读者试图通过双击来运行该程序,则只能看到程序窗口一闪就消失了,这样将无法看到该程序的输出结果。
在上面命令中使用了--onefile 选项,该选项指定生成单独的 EXE 文件,因此,在 dist 目录下生成了一个单独的大约为 6MB 的 app.exe 文件(在 Mac OS X 平台上生成的文件就叫 app,没有后缀);与 -F(--onefile) 选项对应的是 -D 选项(默认选项),该选项指定生成一个目录(包含多个文件)来作为程序。
下面先将 PyInstaller 工具在 app 目录下生成的 build、dist 目录删除,并将 app.spec 文件也删除,然后使用如下命令来生成 EXE 文件。
pyinstaller -D app.py
执行上面命令,将看到详细的生成过程。当生成完成后,将会在 app 目录下看到多了一个 dist 目录,并在该目录下看到有一个 app 子目录,在该子目录下包含了大量 .dll 文件和 .pyz 文件,它们都是 app.exe 程序的支撑文件。在命令行窗口中运行该 app.exe 程序,同样可以看到与前一个 app.exe 程序相同的输出结果。
PyInstaller 不仅支持 -F(--onefile)、-D 选项,而且也支持如下表表所示的常用选项。
-h,--help | 查看该模块的帮助信息 |
---|---|
-F,-onefile | 产生单个的可执行文件,参数为py文件路径。 |
-D,--onedir | 产生一个目录(包含多个文件)作为可执行程序,参数为py文件路径。 |
-a,--ascii | 不包含 Unicode 字符集支持,无参数。 |
-d,--debug | 产生 debug 版本的可执行文件,无参数。 |
-w,--windowed,--noconsolc | 指定程序运行时不显示命令行窗口(仅对 Windows 有效),无参数。 |
-c,--nowindowed,--console | 指定使用命令行窗口运行程序(仅对 Windows 有效),无参数。 |
-o DIR,--out=DIR | 指定 spec 文件的生成目录。如果没有指定,则默认使用当前目录来生成 spec 文件,参数为spec文件路径。 |
-p DIR,--path=DIR | 设置 Python 导入模块的路径(和设置 PYTHONPATH 环境变量的作用相似)。也可使用路径分隔符(Windows 使用分号,Linux 使用冒号)来分隔多个路径,无参数。 |
-n NAME,--name=NAME | 指定项目(产生的 spec)名字。如果省略该选项,那么第一个脚本的主文件名将作为 spec 的名字 |
在表中列出的只是 PyInstaller 模块所支持的常用选项,如果需要了解 PyInstaller 选项的详细信息,则可通过 pyinstaller -h 来查看。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。