• Python脚本打包


    python脚本是明文,另外,python运行时需要一些动态库和python模块的支持,在发布时,可能不便于部署。所以需要打包。

    先试试PyInstaller

    [root@localhost stress]# pyinstaller --help
    usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
                       [--add-data ]
                       [--add-binary ] [-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 ]
                       [--disable-windowed-traceback] [--version-file FILE]
                       [-m ] [--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
                            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
                            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
                            ".
      -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 , --icon
                            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 , --manifest
                            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.
    [root@localhost stress]# 

    pyinstaller会把所有的依赖项完全挖过来。最基础的命令行很简单:

    1.如果只需要打包一个可执行文件

    pyinstaller your_script.py

    2.如果只需要打包多个可执行文件 

    pyinstaller your_script.py another.py  subdir/file1.py

    3.如果需要打包配置用的数据文件:  

    pyinstaller your_script.py another.py  subdir/file1.py --add-data 'cfg/my_app_cfg.json:./cfg

     --add-data会同时指定需要包含的数据文件在目标文件系统的中的相对路径。

    最终打包后可发行包会放在dist目录下。

  • 相关阅读:
    Scala开发环境搭建
    【Python百日进阶-Web开发-Feffery】Day398 -“一起Dash”训练营Lesson-08_利用fac构建表单(下)、re正则表达式
    springboot系列(二十四):如何实现Excel文件导出?这你得会 | 超级详细,建议收藏
    使用folium绘制移动轨迹
    二叉树递归套路总结
    [MRCTF2020]套娃
    几个易错的python小知识点
    element-ui使用el-date-picker日期组件常见场景
    【算法】Convert to Base -2 负二进制转换
    如何一步步优化负载均衡策略
  • 原文地址:https://blog.csdn.net/twicave/article/details/133881486