PyInstaller on 32-bit Linux - ImportError: The 'six' package is required

PyInstaller on 32-bit Linux - ImportError: The 'six' package is required

我正在使用 Python2.7Kivy1.9.2-dev 制作程序,并尝试打包它与 PyInstaller-3.0 作为单个可执行文件用于不同的系统。

我尝试打包的系统是:

在所有这些系统上,当 运行 和 Python 未编译时,程序运行良好。 (因此,所有 Kivy 依赖项也都很好)。

但是,在使用 PyInstaller 制作的可执行文件中,只有在 64 位 Linux 上制作的可执行文件作为一个文件运行。 Windows 和 Raspbian 可执行文件大部分都可以工作(我稍后会写到),但是在 32 位 Linux 上制作的可执行文件仍然不能 运行。 运行 时出现以下错误(我在 32 位和 64 位 Linux 上都尝试过 运行):

Traceback (most recent call last):
  File "<string>", line 11, in <module>
  File "/media/Data/Programming/Python/installers/PyInstaller-3.0/PyInstaller/loader/pyimod03_importers.py", line 363, in load_module
    exec(bytecode, module.__dict__)
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/__init__.py", line 48, in <module>
  File "/usr/local/lib/python2.7/dist-packages/pkg_resources/extern/__init__.py", line 60, in load_module
ImportError: The 'six' package is required; normally this is bundled with this package so if you get this warning, consult the packager of your distribution.
pyi_rth_pkgres returned -1

以下是我感到困惑的地方:

  1. 在我的“/usr/local/lib/python2.7/dist-packages/”中没有 "pkg_resources" 文件夹,但上面的内容表明它显然在那里......它甚至读取文件那里成功了。它是在可执行文件启动时创建的吗?
  2. 我没有专门使用 "six" 做任何事,在这个错误之前我什至不知道它的存在。
  3. "Six" 已安装在我的系统上,已由程序包管理器和 Pip 确认。它位于“/usr/local/lib/python2.7/dist-packages/”。我猜 PyInstaller 出于某种原因找不到它(因为,我相信,如果所有东西都正确打包,它就不必在可执行文件所在的系统上 运行。)

所以,我的问题很典型,是什么导致 PyInstaller 出现这个问题(以防万一,我为它做了 运行 "setup.py install"),以及如何获得 around/fix吗?

谢谢!

PS:在旁注中,我提到了 Windows 和 Raspbian 可执行文件的问题。在 Windows 上,当同一文件夹中存在 "zlib1.dll" 时,exe 仅 运行s(即使使用 PyInstaller 专门打包到 exe 中,它也不起作用),并且在 Raspbian 我只让程序在不使用“--onefile”的情况下运行(使用“--onefile”,PyInstaller 似乎没有将任何 Python 二进制文件打包到可执行文件中,比如 libpython.2。7.so,也许还有其他人)

我遇到了类似的问题。尝试将 "six" 和 "kivy" 添加到规范文件中的 hidden_packages。如果它不起作用,请确保在其 19.2 版本中安装了 setuptools。在 Windows 上这似乎是我的问题。希望对你有帮助。

好吧,正如 Clement 所建议的那样,将 'six' 添加到隐藏包中并没有奏效,但开始了一系列 trial-and-error,最终导致了解决方案。 在 "hiddenimports" 测试无效后,我尝试将 'six' 导入到我的 Python 代码中。并且编译后的可执行文件不再显示此错误!但是,现在它说需要名为 'packaging' 的包...我没有安装。

简而言之,从最初的问题开始,我是这样做的:

  1. 已安装 'packaging' 使用 'pip':

    sudo pip 安装打包

  2. 将这些导入添加到我的主要 Python 代码中:

    导入六个

    进口包装

    进口packaging.version

    进口packaging.specifiers

(添加的所有导入都是 trial-and-error,完成直到 PyInstaller-made 可执行文件最终运行)。

似乎有点 hack-y,因为制作 64 位的可执行文件 Linux 不需要任何这些导入,但至少它现在可以工作了,可执行文件的大小基本上是不受影响。

对于以下设置 (anaconda):

PyInstaller: 3.2
Python: 3.5.2
Platform: Windows-10-10.0.10240-SP0
Numpy: 1.11.1

以及以下mwe.py

import numpy
print ("hello world")

我必须执行以下操作才能修复:

pip install packaging

使用以下 bat 文件构建(^ 是 BAT 行的延续):

pyinstaller --noconfirm ^
        --hidden-import six ^
        --hidden-import packaging ^
        --hidden-import packaging.version ^
        --hidden-import packaging.specifiers ^
        --hidden-import packaging.requirements ^
        mwe.py