【问题标题】:How do I use UPX with pyinstaller?如何将 UPX 与 pyinstaller 一起使用?
【发布时间】:2018-05-23 15:17:12
【问题描述】:

如何将 UPX 与 pyinstaller 一起使用?

我正在关注文档。

我已经下载了 UPX。

我的文件看起来像:

import csv
import selenium
import pandas

print('Hello')

然后我运行:

pyinstaller -F --upx-dir C:\Users\DD\Downloads\upx394w\upx394w\123\upx308w\upx.exe zz.spec

这不会影响文件的大小。

知道如何让它工作吗?

# -*- mode: python -*-

block_cipher = None


a = Analysis(['zz.py'],
             pathex=['C:\\Users\\DA\\13\\14'],
             binaries=[],
             datas=[],
             hiddenimports=[],
             hookspath=[],
             runtime_hooks=[],
             excludes=[],
             win_no_prefer_redirects=False,
             win_private_assemblies=False,
             cipher=block_cipher)
pyz = PYZ(a.pure, a.zipped_data,
             cipher=block_cipher)
exe = EXE(pyz,
          a.scripts,
          a.binaries,
          a.zipfiles,
          a.datas,
          name='zz',
          debug=False,
          strip=False,
          upx=True,
          runtime_tmpdir=None,
          console=True )

【问题讨论】:

    标签: python python-3.x selenium compression pyinstaller


    【解决方案1】:

    需要指定UPX目录,而不是UPX可执行文件:

    例如:

    pyinstaller myfile.py --upx-dir=..\upx391w -y --onefile

    【讨论】:

    • 这行得通,虽然我得到“api-ms-win-crt-multibyte-l1-1-0.dll: CantPackException: can't pack new-exe”。我在某处读到 64 位支持窗口仍处于试验阶段,也许这就是原因
    • 也许您遇到了这个问题?你的 pyinstaller 版本是什么? github.com/pyinstaller/pyinstaller/issues/1565
    • 我搞定了。它减少了 700kbs 的大小,哈哈,虽然不是很多,但它确实有效。
    • 其实我刚才重新测试了,它甚至没有做任何upx。离奇。
    • 只是为了像我这样的新手的好处,您必须从github单独下载UPX并将其解压缩到系统上的某个位置,然后在--upxdir=之后写入该文件夹路径(绝对或相对)。从github.com/upx/upx/releases 获取最新的 UPX。
    【解决方案2】:

    添加一个新答案,因为 PyInstaller 现在(2019 年 9 月)似乎比当前答案和 cmets 建议的更有帮助。

    如果 UPX 正常工作,我会在构建早期看到输出 934 INFO: UPX is available.

    此外,我可以看到 PyInstaller 正在调用 upx 的许多输出行。

    我没有指定--upx-dir,但在我的$PATH 环境变量中确实有upx.exe

    【讨论】:

      【解决方案3】:

      除了 GlennS 的评论:pyinstaller 文档中明确说明了这种行为。所以在这方面,这不是一个无证的意外好处。
      https://pyinstaller.readthedocs.io/en/v3.3.1/usage.html#using-upx

      【讨论】:

        【解决方案4】:

        只需安装upx

        sudo apt install upx
        

        Pyinstaller 搜索 upx 默认情况下,除非您指定标志 --noupx

        上述安装会自动将upx添加到$PATH变量中,然后你就不需要指定--upx-dir标志了。

        其他方法是从 upx's repo 下载 zip 文件并使用 --upx-dir 标志。
        参考@denfromufa的回答。

        对于 Windows,步骤可能会有所不同。

        【讨论】:

          【解决方案5】:

          检查您的脚本名称是否拼写正确。就我而言,我收到了上述错误,因为我使用的是 pyinstaller.exe -F .\my_script.py 但我的脚本名称是 my-script.py(请注意“-”与“_”)。

          【讨论】:

          • 您的答案可以通过额外的支持信息得到改进。请编辑以添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。您可以在帮助中心找到更多关于如何写出好的答案的信息。 ——
          猜你喜欢
          • 2016-12-21
          • 2021-05-17
          • 1970-01-01
          • 2020-02-21
          • 2018-07-22
          • 2019-08-06
          • 2013-02-01
          • 2018-05-04
          • 2018-05-16
          相关资源
          最近更新 更多