16

Christoph Gohlkeのパッケージの 64 ビット バージョンを使用する 64 ビット マシンで py2exe v0.6.10 を使用して python v2.7.3 および scipy v0.11.0 を使用すると、次のエラー メッセージが表示されます。誰かが関連性のある有用な提案を提供できれば、私はそれを大いに感謝します. エラーメッセージは次のとおりです。

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 ページに示されているのと同じグラフを適切に作成して表示します。ここに私のテストスクリプトがあります:

# 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\ にあり、64 ビット マシンで正常にコンパイルされた test2.exe を取得します。(おそらく) 関連するメモとして、scipy v0.11.0 で新しいスパース グラフ ツールが導入されたことを読むことができます。これが、エラー メッセージが私に指摘しようとしている場所であると思われます。明示的に含める必要があるものがありませんか? scipy にmatplotlib のようなget_py2exe_datafiles()関数があれば、物事を正しくバンドルするのに役立ちます。

あなたが提供できるあらゆる助けと、ここまで読んでくれてありがとう。

4

2 に答える 2

15

これは、こちらで説明されているように、scipy 0.11.0 を使用する py2exe および pyinstaller に共通の問題のようです。

そのスレッドで提供されている一時的な解決策は、ファイルを手動でインポートすることです。

次のコードをプログラムに追加します

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

pyInstaller と py2exe の両方で解決された問題

または、このファイルを「includes」で含めることもできます。py2exe がそれを取得するのに十分なはずです。

于 2013-01-08T13:49:20.880 に答える
13

問題が解決しました!ホアキン、どうもありがとう。2日間検索しても、そのpyinstallerリンクに遭遇しませんでした. 将来の読者のために、追加したpy2exeのオプションに

scipy.sparse.csgraph._validation

インクルードに。

于 2013-01-08T14:33:07.593 に答える