2015-09-28 228 views
6

我遇到类似的问题,报告为here,这似乎是一个未解决的问题。Numpy Pyinstaller ImportError:无法导入名称multiarray

编译一个exe后,pyinstaller构建引发以下错误,这很可能是由numpy的\核心\造成init.py

有一些suggestions,已与冲突的numpy的安装,但是我必须做卸载并重新安装好几次,并搜索其他任何安装,但没有运气。 当前使用numpy-1.9 + MKL二进制文件运行。

我还将multiarray.pyd文件标记为spec文件作为要抓取的二进制文件。没有运气。

不知道是什么原因造成的,因为我对init文件结构不是特别熟悉。任何想法如何得到这个导入?

回溯错误:

Traceback (most recent call last): 
    File "<string>", line 50, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\mpl_toolkits.basemap", line 15, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\matplotlib", line 133, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\matplotlib.rcsetup", line 19, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\matplotlib.colors", line 52, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\numpy", line 200, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\numpy.add_newdocs", line 13, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\numpy.lib", line 8, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\numpy.lib.type_check", line 11, in <module> 
    File "C:\Python27\Lib\site-packages\PyInstaller\loader\pyi_importers.py", line 270, in load_module 
    exec(bytecode, module.__dict__) 
    File "C:\Users\Hp\PycharmProjects\GISdev\build\gis_helper2\out00-PYZ.pyz\numpy.core", line 14, in <module> 
ImportError: cannot import name multiarray 
从init文件所采取的问题

可能的原因:

from __future__ import division, absolute_import, print_function 

from .info import __doc__ 
from numpy.version import version as __version__ 

# disables OpenBLAS affinity setting of the main thread that limits 
# python threads or processes to one core 
import os 
envbak = os.environ.copy() 
if 'OPENBLAS_MAIN_FREE' not in os.environ: 
    os.environ['OPENBLAS_MAIN_FREE'] = '1' 
if 'GOTOBLAS_MAIN_FREE' not in os.environ: 
    os.environ['GOTOBLAS_MAIN_FREE'] = '1' 
from . import multiarray 
os.environ.clear() 
os.environ.update(envbak) 
del envbak 
del os 

from . import umath 
from . import _internal # for freeze programs 
from . import numerictypes as nt 
multiarray.set_typeDict(nt.sctypeDict) 
+0

中的文件后,您可以重新安装numpy。我有一种感觉,这与numpy.core模块中缺少.py文件有关。只有pyd文件存在,但init文件试图导入模块多阵列。 – Praxis

+0

@Richard Snape - 代码可以在python 2.7中从控制台和Pycharm运行良好。只有当exe运行时发生错误,所以我认为这是一个numpy-pyinstaller兼容性问题。 我想知道如果从.pyd文件反编译为.py可能是一个解决方案。错误的来源是。 线14 init.py电话:“进口多阵列” numpy的可明显处理动态加载.pyd不是编译时,但可能需要一个.py文件时,它是在一个exe冻结。 – Praxis

+0

感谢理查德,我真的很感谢你对这个问题的帮助 – Praxis

回答

3

的意见交换之后,这一问题被隔离到一个问题,在自定义OP使用的文件.spec。在.spec,一条线是这样的:

coll = COLLECT(exe, 
      a.binaries, 
      a.zipfiles, 
      a.datas, 
      strip=None, 
      upx=True, 
      name='nptest') 

已经被替换

coll = COLLECT(exe, 
      a.binaries1, 
      a.zipfiles, 
      a.datas, 
      strip=None, 
      upx=True, 
      name='nptest') 

尝试引进一个文件a.binaries1,使pyinstaller使用一些自定义的.dll二进制文件。

面对a.binariesAnalysis对象的成员,需要保留 - 在收集行中添加额外二进制文件的方式如下所示(as per the docs)。请注意,您可以通过更改元组的第一个成员来更改发行版中文件的名称(如果需要)。

coll = COLLECT(exe, 
      a.binaries+[('zipcontainer.dll','C:\\Windows\\System32\\zipcontainer.dll','BINARY')], 
      a.zipfiles, 
      a.datas, 
      strip=None, 
      upx=True, 
      name='nptest') 
+0

.spec文件在哪里位于? –

+0

hi @java_mouse - 查看文档的这一部分:http://pythonhosted.org/PyInstaller/#using-spec-files。默认情况下,它位于当前目录中,除非您在此处设置了选项。该部分还提供了许多关于如何定制它的信息。 –

+0

.spec文件的路径? –

1

我在64位用Pycharm IDE和阿纳康达视窗10

我具有由以下序列解决问题:

  1. 卸载安纳康达的numpy的;
  2. 删除文件夹C相关numpy的文件:\用户(计算机名)\应用程序数据\漫游\ Python的\ Python35 \站点包
  3. 重装numpy的Anaconda的

在你的情况,我想删除文件夹C:\ Python27 \ Lib \ site-packages \ PyInstaller \ loader \

相关问题