2015-09-28 8 views
6

Я столкнулся с аналогичной проблемой с сообщением here, что, по-видимому, является нерешенной проблемой.Numpy Pyinstaller ImportError: невозможно импортировать имя multiarray

После компиляции EXE, pyinstaller сборка выдает следующее сообщение об ошибке, которая, вероятно, вызванная NumPy \ ядре \ init.py

Есть некоторые suggestions, что он должен делать с противоречивыми установками Numpy однако у меня есть несколько раз удалили и переустановили и без каких-либо успехов искали любые другие установки. В настоящее время работает с двоичными файлами numpy-1.9 + MKL.

Я также отметил файл multiarray.pyd в файле spec как двоичный файл для захвата. Не повезло.

Не знаю, что вызывает это, поскольку я не особенно знаком с структурой файла инициализации. Любая идея, как получить импорт?

Traceback ошибки:

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 

Возможная причина проблемы, взятой из файла инициализации:

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

У меня такое чувство, что это связано с отсутствием .py-файлов в модуле numpy.core. Существуют только файлы pyd, но файл инициализации пытается импортировать модуль multiarray. – Praxis

+0

@ Рихард Снейп - код отлично работает в python 2.7 как с консоли, так и с Pycharm.Это происходит только тогда, когда exe запускается с ошибкой, поэтому я думаю, что это проблема совместимости с numpy-pyinstaller. Мне интересно, может ли быть декомпиляция из .pyd-файлов в .py. Источник ошибки. линии 14 в init.py вызовов: «от импорта multiarray» Numpy, очевидно, может обрабатывать загрузку .pyd динамически, когда не компилируется, но может потребоваться файл .py, когда он заморожен в ехе. – Praxis

+0

Спасибо, Ричард, я был бы очень признателен за вашу помощь в этом вопросе. – Praxis

ответ

3

После обмена в комментарии, проблема была изолирована к проблеме в обычае .spec файл, используемый OP. В .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.binaries является членом Analysis объекта и должен оставаться - путь, чтобы добавить дополнительный двоичный Gilė в сборной линии, как это (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

Я использую PyCharm IDE и Anaconda на 64-битной ОС Windows 10.

меня решить эту проблему следующих последовательностей:

  1. удалить NumPy в анаконде;
  2. удалить связанные Numpy файлы в папке C: \ Users (имя компьютера) \ AppData \ Roaming \ Python \ Python35 \ сайт-пакеты
  3. Переустановка Numpy в Anaconda

В вашем случае, я полагаю, вы можете переустановить numpy после удаления файлов в папке C: \ Python27 \ Lib \ site-packages \ PyInstaller \ loader \

Смежные вопросы