Numpy Pyinstaller ImportError: cannot import name multiarray

Numpy Pyinstaller ImportError: cannot import name multiarray

我遇到了与报告的问题类似的问题 here,这似乎是一个未解决的问题。

编译一个exe后,pyinstaller构建抛出如下错误,可能是numpy\core\ init.py

有一些 suggestions 与冲突的 numpy 安装有关,但是我已经卸载并重新安装了好几次,并且没有找到任何其他安装。 当前 运行 numpy-1.9+MKL 二进制文件。

我也已将 multiarray.pyd 文件标记为要抓取的二进制文件。运气不好。

不知道是什么原因造成的,因为我对 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)

在评论交流后,问题被隔离为 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 对象的成员,需要保留 - 在 collect 行中添加额外二进制 gile 的方法是这样的 (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')

我在 64 位上使用 Pycharm IDE 和 Anaconda Windows 10.

我已经按照以下顺序解决了问题:

  1. 卸载 Anaconda 中的 numpy
  2. 删除文件夹C:\Users\(COMPUTER NAME)\AppData\Roaming\Python\Python35\site-packages
  3. 中相关的numpy文件
  4. 在 Anaconda 中重新安装 numpy

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

中的文件后重新安装 numpy