Scipy с py2exe

Я получаю следующее сообщение об ошибке, используя python v2.7.3 и scipy v0.11.0 с py2exe v0.6.10 на 64-битной машине, используя 64-битные версии пакетов из Кристоф Гольке. Если кто-то может предоставить полезные и полезные предложения, я бы очень признателен. Вот сообщение об ошибке:

Traceback (most recent call last):
  File "test2.py", line 4, in <module>
  File "scipy\sparse\__init__.pyo", line 191, in <module>
  File "scipy\sparse\csgraph\__init__.pyo", line 146, in <module>
  File "scipy\sparse\csgraph\_shortest_path.pyo", line 12, in <module>
  File "scipy\sparse\csgraph\_shortest_path.pyo", line 10, in __load
  File "_shortest_path.pyx", line 18, in init scipy.sparse.csgraph._shortest_path (scipy\sparse\csgraph\_shortest_path.c:14235)
ImportError: No module named _validation

Компиляция и запуск исполняемого файла работали на старом 32-битном ноутбуке (с 32-разрядными версиями всего), поэтому я думаю, что не могу включать все, что мне нужно. Мой недавно созданный файл test2.exe правильно создает и отображает тот же график, что и на странице scipy Getting Started. Вот мой тест script:

# test2.py
# code is from the scipy web site example and works in Idle

from scipy import sparse
from scipy import optimize
from scipy import special
from numpy import *
from pylab import *

x = arange(0,10,0.01)
for k in arange(0.5,5.5):
     y = special.jv(k,x)
     plot(x,y)
     f = lambda x: -special.jv(k,x)
     x_max = optimize.fminbound(f,0,6)
     plot([x_max], [special.jv(k,x_max)],'ro')
title('Different Bessel functions and their local maxima')
show()

И вот мой файл setup.py:

# setup.py
from distutils.core import setup
import py2exe
import os
import matplotlib
setup(
    windows=[{'script': r'test2.py'}],
    data_files = matplotlib.get_py2exe_datafiles(),
    options = {
        'py2exe': {
            r'compressed': True,
            r'optimize': 2,
            r'includes': [
                r'matplotlib',
                r'matplotlib.backends.backend_tkagg',
                r'matplotlib.pyplot',
                #r'mpl_toolkits',
                r'pytz'
                ],
            r'dll_excludes': [r'MSVCP90.dll'],
            r'excludes': [
                '_gtkagg',
                '_tkagg',
                '_agg2',
                '_cairo',
                '_cocoaagg',
                '_fltkagg',
                '_gtk',
                '_gtkcairo',
                'tcl'
                ]
            }
        },
    )
os.system("pause")  # leaves the command prompt box open so I can read it

Оба test2.py и setup.py находятся в c:\python27 \, и я получаю успешно скомпилированный test2.exe на 64-битной машине. Что касается (возможно) связанной заметки, я могу прочитать, что scipy v0.11.0 представил новые разреженные инструменты графического отображения, и я подозреваю, что это сообщение об ошибке пытается указать мне. Я пропустил что-то, что мне нужно явно включить? Было бы неплохо, если бы scipy имела функцию get_py2exe_datafiles(), такую ​​как matplotlib, чтобы правильно скомпоновать вещи.

Заранее благодарим вас за любую помощь, которую вы можете предоставить, и за то, что вы читаете это далеко.

Ответы

Ответ 1

Кажется, это проблема, общая для py2exe и pyinstaller с scipy 0.11.0, как обсуждалось здесь.

Временное решение, заданное в этом потоке, заключается в том, чтобы импортировать файл вручную:

добавление следующих кодов в вашу программу

def dependencies_for_myprogram():
    from scipy.sparse.csgraph import _validation

Проблема решена как для pyInstaller, так и для py2exe

Вы также можете попробовать включить этот файл с 'includes'. Для py2exe должно быть достаточно, чтобы получить его.

Ответ 2

Проблема решена! Спасибо ОЧЕНЬ много joaquin. В поисках двух дней я не сталкивался с этой ссылкой на pyinstaller. Для будущих читателей, в вариантах py2exe я добавил

scipy.sparse.csgraph._validation

к включенным.