2013-02-19 2 views
2

Я пытаюсь заморозить скрипт Python с помощью cx_Freeze. В скрипте используются панды. Когда я запустить исполняемый файл, созданный cx_Freeze, я получаю следующее TraceBack:Ошибка при замораживании pandas/NumPy 1.7.0 с помощью cx_Freeze

[...] 
File "C:\Python27\lib\site-packages\pandas\__init__.py", line 6, in <module> 
from . import hashtable, tslib, lib 
File "ExtensionLoader_pandas_hashtable.py", line 11, in <module> 
File "numpy.pxd", line 156, in init pandas.hashtable (pandas\hashtable.c:20273) 
File "C:\Python27\lib\site-packages\numpy\__init__.py", line 147, in <module> 
from core import * 
AttributeError: 'module' object has no attribute 'sys' 

только панды код, я использую (для тестирования) является:

from pandas import DataFrame 
import pandas as pd 
d = {'one' : [1., 2., 3., 4.], 
    'two' : [4., 3., 2., 1.]} 
df = DataFrame(d) 

Когда я пытаюсь включить «панд» под «пакеты» в файле настройки cx_Freeze, он не в процессе замораживания с:

ValueError: too many values to unpack 

Я сталкивался с такой же проблемой для 32 и 64-битных версий Python 2.7.3 на Windows7 (64-бит). Версия pandas - 0.10.1, а cx_Freeze - 4.3.1.

Есть ли у вас кто-нибудь из вас, панды или боги cx_Freeze, есть идея?

+0

Разве это «ValueError» от зависания или от запуска замороженного кода? Есть ли трассировка? –

+0

Это Traceback во время замораживания, я должен был бы опубликовать полный Traceback позже сегодня. –

+0

Если это заканчивается как [this traceback] (https://gist.github.com/takluyver/4501992), это [ошибка, с которой кто-то сталкивался] (https://bitbucket.org/anthony_tuininga/cx_freeze/issue/16/ path-in-strange-code-path), но я не смог воспроизвести. Возможно, ошибка Windows. –

ответ

5

Я просто смотрел на/NumPy/ядро ​​/ INIT .py и заметил на второй последней строке:

есть «дель SYS»

если вы закомментировать эту строку, она работает как и ожидалось. Я также заметил, что нет «del sys» в numpy 1.6.2

вы можете попытаться связаться с numpy, чтобы проверить, зачем им это нужно.

+0

Отлично, это работает! большое спасибо. Однако вам все равно нужно указывать «numpy» в «пакетах». –

+1

Привет, Felix Я использую include = ['numpy']. например: options = dict (сжатый = True, includes = ['numpy'], исключает = ['Tkinter', 'tcl', 'ttk', 'tkinter'], optimize = 2), setup ( name = "numpybug ", version =" 0.1 ", description =" Пример скрипта cx_Freeze ", options = dict (build_exe = options), executables = executables) Это работает для меня. – dynamicgl

+0

Привет, Феликс, просто сообщите, что я опубликовал заметку о списке почтовых ящиков, и позже вы отправили патч для cx_freeze. ссылка находится здесь: http://sourceforge.net/p/cx-freeze/bugs/36/ надеюсь, что это полезно. – dynamicgl

0

Причина возникновения обеих ошибок: NumPy 1.7.0 (pandas строит на NumPy). Когда я запускаю код с NumPy 1.6.2, все работает.

+0

@ThomasK вы могли бы взглянуть на мою минималистическую [образец кода] (https://gist.github.com/fzumstein/5007372), чтобы дать мне подсказку, почему NumPy 1.7.0 терпит неудачу, а 1.6.2 не? Спасибо –

+0

Когда я копирую папку 'numpy' вручную в папку сборки, она работает. Однако, перечислив его в '' пакетах: ['numpy'] 'не помогает. –