py2exe с enthought и pandas

Я пытаюсь создать исполняемый файл с помощью python, py2exe, используя Enthought. program.py начинается с:

import pandas as pd
import pyper as pr
r=pr.R(use_pandas=True)

setup.py выглядит следующим образом:

from distutils.core import setup
import py2exe
import matplotlib
import sys
opts={"py2exe":{"bundle_files"}}
sys.argv.append('py2exe')
opts = {'py2exe': {"bundle_files" : 3, "includes" : [ "matplotlib.backends", "matplotlib.backends.backend_qt4agg", "pylab","numpy", "matplotlib.backends.backend_tkagg"], 'excludes':['_gtkagg', '_tkagg', '_agg2', '_cairo', '_cocoaagg', '_fltkagg', '_gtk', '_gtkcairo'], 'dll_excludes': ['libgdk-win32-2.0-0.dll', 'libgobject-2.0-0.dll']}}
setup(console=['program.py'],zipfile=None,options=opts,data_files=matplotlib.get_py2exe_datafiles())

После запуска:python setup.py py2exe были созданы две папки dist и build. Но при запуске program.exe я получил следующее:

Dll load failed: The specified module could not be found
Traceback (most recent call last):  
File "program.py", line 1, in module  
File "pandas\__init__.pyc", line 6, in module  
File "pandas\hashtable.pyc", line 12, in module  
File "pandas\hashtable.pyc", line 10, in module  
File "numpy.pxd.", line 157, in init pandas.hastable (pandas\hastable.c:19547)  
File "numpy\__init__.pyc", line 143, in module  
File "numpy\lib\add_newdocs.pyc", line 9, in module  
File "numpy\lib\__init__.pyc", line 13, in module  
File "numpy\lib\polynomial.pyc", line 17, in module  
File "numpy\linalg\__init__.pyc", line 48, in module  
File "numpy\linalg\linalg.pyc", line 23, in module  
File "numpy\linalg\lapack_lite.pyc", line 12, in module  
File "numpy\linalg\lapack_lite.pyc", line 10, in __load  
ImportError: DLL load failed: The specified module could not be found** 

Я использую Canopy 1.1.0 с Pandas 0.12.0-2 на 64-Windows 7.

Спасибо за любую помощь.


person Gaston Cissé    schedule 18.09.2013    source источник
comment
Кажется, вам не хватает '' перед matplotlib.backends.backend_qt4agg opts = {'py2exe': {"bundle_files" : 3, "includes" : [ "matplotlib.backends", "matplotlib.backends.backend_qt4agg",... Кроме того, вам не нужно включать numpy и pandas?   -  person EdChum    schedule 18.09.2013
comment
Спасибо! Я побежал "matplotlib.backends.backend_qt4agg". pandas использовался, потому что program.py импортирует CSV-файл в качестве фрейма данных.   -  person Gaston Cissé    schedule 18.09.2013
comment
Так вы говорите, что это работает сейчас? Если это так, я могу опубликовать это как ответ   -  person EdChum    schedule 18.09.2013
comment
Нет, это не работает. Все та же ошибка.   -  person Gaston Cissé    schedule 18.09.2013


Ответы (1)


Похоже, что в .exe, созданном py2exe, могут отсутствовать библиотеки DLL Intel MKL, которые поставляются с Canopy (EPD). В зависимости от того, какая у вас версия Canopy (EPD), библиотеки DLL NumPy могут быть связаны с библиотеками Intel MKL. Эти библиотеки DLL должны находиться в каталоге C:\Python27\Scripts (или соответствующем каталоге Scripts, если вы установили EPD в другом месте) — ищите библиотеки DLL, имя файла которых начинается с mk2.


РЕДАКТИРОВАТЬ: Указанный выше путь работает только для более старых версий EPD. Для более поздней версии Canopy библиотеки DLL обычно расположены где-то вроде C:\Users\<user>\AppData\Local\Enthought\Canopy\App\appdata\canopy-1.1.0-1371-win-x86_64\Scripts.

person Mark Dickinson    schedule 19.09.2013
comment
dLL mk2 находятся в C:\Users\~\AppData\Local\Enthought\Canopy32\App\appdata\canopy-1.1.0.1371.win-x86\Scripts и все еще не работают. Однако проблема была решена с помощью pyinstaller. Спасибо - person Gaston Cissé; 20.09.2013
comment
А, спасибо. Я пропустил момент, когда вы сказали, что используете Canopy 1.1.0; путь C:/Python27 действителен для старых EPD. Я обновлю ответ. - person Mark Dickinson; 20.09.2013