我正在使用一个程序Python2.7 and Kivy1.9.2-dev,并尝试将其打包PyInstaller-3.0对于不同的系统作为单个可执行文件。
我尝试将其打包的系统是:
- 64 位 Linux Mint 17.3
- 32位Linux Mint 17(升级到17.1和17.3时也尝试过)
- 32 位 Windows XP SP3
- 树莓派(树莓派)
在所有这些系统上,程序在未编译的情况下使用 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
这是我感到困惑的地方:
- 在我的“/usr/local/lib/python2.7/dist-packages/”内部,没有“pkg_resources”文件夹,但上面的内容表明它显然在那里......它甚至成功读取了那里的文件。它是在可执行文件启动时创建的吗?
- 我没有专门使用“六”来表示任何东西,在这个错误之前我什至不知道它的存在。
- 正如包管理器和 Pip 所确认的,我的系统上安装了“6”。它位于“/usr/local/lib/python2.7/dist-packages/”中。我猜想 PyInstaller 由于某种原因找不到它(因为我相信,如果所有内容都正确打包,那么它不必位于运行可执行文件的系统上。)
所以,我的问题非常典型,是什么可能导致 PyInstaller 出现此问题(以防万一,我确实为其运行了“setup.py install”),以及如何解决/修复它?
Thanks!
PS:顺便说一句,我提到了 Windows 和 Raspbian 可执行文件的问题。在 Windows 上,该 exe 仅当同一文件夹中存在“zlib1.dll”时运行(即使使用 PyInstaller 专门打包到 exe 中,它也不起作用),而在 Raspbian 上,我只在不使用“的情况下让程序运行” --onefile”(使用“--onefile”,似乎 PyInstaller 不会将任何 Python 二进制文件打包到可执行文件中,例如 libpython.2.7.so,也许还有其他文件)