赞
踩
puinstaller是一个phthon库,可以将不同平台上的python文件打包为独立的可执行文件(如exe),即可以将python文件或python项目及其依赖项打包到单独的可执行文件中,从而可以在其它机器上运行,而无需为其配置相关环境。
同时有些工具的分发如果不想让第三方看到源代码,或者有些涉密需求的话,也可以使用该工具对原始代码进行隐藏。
项目地址:PyInstaller Manual — PyInstaller 6.3.0 documentation
- 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]
- [--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 Image 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] [--argv-emulation]
- [--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, DEPRECATION,
- ERROR, FATAL (default: INFO). Also settable via and
- overrides the PYI_LOG_LEVEL environment variable.
-
- 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.
- --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 Image or "NONE">, --icon <FILE.ico or FILE.exe,ID or FILE.icns or Image 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. If an image file is entered that isn't in the
- platform format (ico on Windows, icns on Mac),
- PyInstaller tries to use Pillow to translate the icon
- into the correct format (if Pillow is installed). Use
- "NONE" to not apply any icon, thereby making the OS
- show some default (default: apply PyInstaller's icon).
- This option can be used multiple times.
- --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:
- --argv-emulation Enable argv emulation for macOS app bundles. If
- enabled, the initial open document/URL event is
- processed by the bootloader and the passed file paths
- or URLs are appended to sys.argv.
- --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.
上面的参数比较多,在实际的使用过程中并不是所有的参数都会用到。
最简单的就是:
pyinstaller xxx.py
这种打包方式会在当前的目录下生成一些目录和文件,其中打包完成的可执行程序在dist目录下。默认该目录下会生成很多的配置文件,比如dll库和依赖库等内容,对应的可执行文件也在该目录下。同时执行后会启动一个cmd窗口用来打印标准输出。
如果不需要生成很多的配置文件,或者不需要启动cmd窗口的话,可以使用下面的形式:
pyinstaller -F -w xxx.py
这种形式打包没有多余的依赖文件,只有一个exe文件,并且程序执行后不会启动cmd窗口,比较简洁。
对于python项目来说,可能涉及到多个文件,不同文件可能有不同的依赖关系,就需要首先设置spec文件:
pyi-makespec xxx.spec
然后再设置spec文件:
- # -*- mode: python ; coding: utf-8 -*-
-
-
- block_cipher = None
-
-
- a = Analysis(
- ['xxx.spec'], # 需要包含项目中的所有文件,当前目录下的可以直接填写文件名,其它目录下的需要填写绝对路径
- pathex=[], # 项目路径
- binaries=[],
- datas=[], # 非py文件,多个文件使用(),其中分隔的第一个参数为文件路径,第二个参数为打包后的路径
- hiddenimports=[],
- hookspath=[],
- hooksconfig={},
- runtime_hooks=[],
- excludes=[],
- win_no_prefer_redirects=False,
- win_private_assemblies=False,
- cipher=block_cipher,
- noarchive=False,
- )
- pyz = PYZ(a.pure, a.zipped_data, cipher=block_cipher)
-
- exe = EXE(
- pyz,
- a.scripts,
- [],
- exclude_binaries=True,
- name='xxx', # 可执行文件exe的名称
- debug=False,
- bootloader_ignore_signals=False,
- strip=False,
- upx=True, # 表示打包的时候是否进行压缩
- console=True, # 表示可执行文件执行后是否会出现cmd窗口,该窗口仅用于标准输出,不影响源程序运行
- disable_windowed_traceback=False,
- argv_emulation=False,
- target_arch=None,
- codesign_identity=None,
- entitlements_file=None,
- icon='icon.ico', # 程序图标
-
- )
- coll = COLLECT(
- exe,
- a.binaries,
- a.zipfiles,
- a.datas,
- strip=False,
- upx=True,
- upx_exclude=[],
- name='xxx', # 打包文件的目录名称
- )
spec文件配置完成后,执行如下命令即可打包python项目,生成对应的可执行文件。
pyinstaller xxx.spec
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。