PyInstaller on 32-bit Linux - ImportError: The 'six' package is required
PyInstaller on 32-bit Linux - ImportError: The 'six' package is required
我正在使用 Python2.7 和 Kivy1.9.2-dev 制作程序,并尝试打包它与 PyInstaller-3.0 作为单个可执行文件用于不同的系统。
我尝试打包的系统是:
- 64 位 Linux 薄荷 17.3
- 32 位 Linux Mint 17(升级到 17.1 和 17.3 时也尝试过)
- 32 位 Windows XP SP3
- Raspbian (Raspberry Pi)
在所有这些系统上,当 运行 和 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" 文件夹,但上面的内容表明它显然在那里......它甚至读取文件那里成功了。它是在可执行文件启动时创建的吗?
- 我没有专门使用 "six" 做任何事,在这个错误之前我什至不知道它的存在。
- "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' 的包...我没有安装。
简而言之,从最初的问题开始,我是这样做的:
已安装 'packaging' 使用 'pip':
sudo pip 安装打包
将这些导入添加到我的主要 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
我正在使用 Python2.7 和 Kivy1.9.2-dev 制作程序,并尝试打包它与 PyInstaller-3.0 作为单个可执行文件用于不同的系统。
我尝试打包的系统是:
- 64 位 Linux 薄荷 17.3
- 32 位 Linux Mint 17(升级到 17.1 和 17.3 时也尝试过)
- 32 位 Windows XP SP3
- Raspbian (Raspberry Pi)
在所有这些系统上,当 运行 和 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" 文件夹,但上面的内容表明它显然在那里......它甚至读取文件那里成功了。它是在可执行文件启动时创建的吗?
- 我没有专门使用 "six" 做任何事,在这个错误之前我什至不知道它的存在。
- "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' 的包...我没有安装。
简而言之,从最初的问题开始,我是这样做的:
已安装 'packaging' 使用 'pip':
sudo pip 安装打包
将这些导入添加到我的主要 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