2016-01-21 60 views
4

我正在使用Python2.7Kivy1.9.2-dev的程序,并试图与PyInstaller-3.0打包作为一个单一的可执行文件不同的系统。PyInstaller在32位Linux - 导入错误: '六' 包需要

我试图将它打包为是这些的系统:

  • 64位Linux薄荷17.3
  • 32位Linux薄荷
  • 17(而升级到17.1和17.3也试过)
  • 32位Windows XP SP3
  • Raspbian(树莓派)

在所有这些系统中的程序运作良好时,刚刚与Python,U运行ncompiled。 (所以,所有的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 /本地/lib/python2.7/dist-packages/“没有”pkg_resources“文件夹,但上面显示它显然存在......它甚至可以成功读取文件。它是否在可执行文件启动时被创建?
  2. 我没有特别使用“六”作任何事情,在这个错误之前,我甚至都不知道它存在。
  3. “Six”IS已安装在我的系统上,由Package Manager和Pip确认。它位于“/usr/local/lib/python2.7/dist-packages/”中。我猜PyInstaller无法找到它出于某种原因(因为,我相信,如果一切都打包正确,它不必在那里的可执行文件运行系统)

所以,我的问题是非常典型的,PyInstaller可能导致这个问题(以防万一,我DID运行“setup.py install”),以及如何解决/修复它?

谢谢!

PS:在一个侧面说明,我提到了Windows和Raspbian可执行文件的问题。在Windows上,只有在同一文件夹中存在“zlib1.dll”的情况下才运行该exe文件(即使使用PyInstaller专门将其打包到exe文件中,它也不起作用),而在Raspbian上,我只能在没有使用“ --onefile“(带”--onefile“,似乎PyInstaller不会将任何Python二进制文件打包到可执行文件中,比如libpython.2.7.so,也可能是其他文件)

回答

8

好,加上“六”进藏包,作为克莱门特认为,没有工作,而是开始尝试和错误的序列最终导致了一个解决方案。 在使用“hiddenimports”进行测试后,我尝试在我的Python代码中输入“six”。编译的可执行文件不再显示此错误!然而,它现在说,名为“包装”的包是必需的......我没有安装。

说得短,从最初的问题开始,我这样做:

  1. 安装 '打包' 使用 '点子':

    须藤PIP安装包装

  2. 添加了这些进口到我的主要Python代码:

    进口六

    进口包装

    进口packaging.version

    进口packaging.specifiers

(添加的所有进口试错,做直到PyInstaller制作可执行终于达成)。

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

0

我有类似的问题。尝试将“六”以及“kivy”添加到spec文件中的hidden_​​packages。如果不起作用,请确保setuptools安装在其19.2版本中。这在Windows上似乎是我的问题。希望能帮助到你。

2

对于以下设置(蟒蛇):

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