2015-03-17 2 views
5

У меня довольно простой модуль Python, который я пытаюсь скомпилировать в файл exe Windows. В моем сценарии я использую библиотеки wxPython и Pandas. Файл exe PyInstaller, который генерируется ТОЛЬКО работает/открывается, когда библиотека Pandas исключена из моего модуля.PyInstaller and Pandas

У меня такая же проблема, когда я использую --onefile OR - onedir в PyInstaller. Я нашел онлайн, что «новая» версия PyInstaller (2.1) должна была позаботиться об этой ошибке. Кто-нибудь есть идеи о том, что делать?

PyInstaller: версия 2.1 панды: версия 0.15.2 Python: версия 2.7

Благодаря

ответ

6

Я столкнулся с той же проблемой. Я варил вниз к простому сценарию, как этот hello.py:

import pandas 
print "hello world, pandas was imported successfully!" 

Чтобы получить панды импортировать во время выполнения правильно я должен был изменить Hello.spec к следующему:

# -*- mode: python -*- 

block_cipher = None 

def get_pandas_path(): 
    import pandas 
    pandas_path = pandas.__path__[0] 
    return pandas_path 

a = Analysis(['Hello.py'], 
     pathex=['C:\\ScriptsThatRequirePandas'], 
     binaries=None, 
     datas=None, 
     hiddenimports=[], 
     hookspath=None, 
     runtime_hooks=None, 
     excludes=None, 
     win_no_prefer_redirects=None, 
     win_private_assemblies=None, 
     cipher=block_cipher) 

dict_tree = Tree(get_pandas_path(), prefix='pandas', excludes=["*.pyc"]) 
a.datas += dict_tree 
a.binaries = filter(lambda x: 'pandas' not in x[0], a.binaries) 

pyz = PYZ(a.pure, a.zipped_data, 
     cipher=block_cipher) 
exe = EXE(pyz, 
     a.scripts, 
     exclude_binaries=True, 
     name='Hello', 
     debug=False, 
     strip=None, 
     upx=True, 
     console=True) 
scoll = COLLECT(exe, 
      a.binaries, 
      a.zipfiles, 
      a.datas, 
      strip=None, 
      upx=True, 
      name='Hello') 

Затем я побежал:

$pyinstaller Hello.spec --onefile 

из командной строки и получил сообщение «привет мир», которое я ожидал. Я до сих пор не совсем понимаю, почему это необходимо. У меня есть обычная сборка панд, которая подключена к библиотекам MKL, но мне непонятно, что это вызывает провал выполнения.

Это похоже на ответ здесь: Pyinstaller not correclty importing pycripto... sometimes

5

У меня была аналогичная проблема с pyinstaller версии 3.3. Решение состояло в том, что существует недостающий hiddenimport крючок, как описан here

Я создал новый файл под Pyinstaller/Крючки/называемый hook-pandas.py и поставить содержание, как описано в этой фиксации here и заново pyinstaller вручную с помощью установки питона .py в каталоге Pyinstaller.

Проблема не повторялась, когда я создал exe из моего скрипта pandas с помощью pyinstaller с помощью опции -onefile.

+0

Это сработало для меня, хотя мне не пришлось переустанавливать Pyinstaller. – kaisquared