51

XPでpython 2.6を使用しています。py2exe をインストールしたところ、hello.py から単純な hello.exe を正常に作成できます。ただし、実際のプログラムで py2exe を使用しようとすると、py2exe はいくつかの情報メッセージを生成しますが、dist フォルダーには何も生成しません。

私の setup.py は次のようになります。

from distutils.core import setup
import py2exe

setup(console=['ServerManager.py'])

py2exe の出力は次のようになります。

python setup.py py2exe
running py2exe
creating C:\DevSource\Scripts\ServerManager\build
creating C:\DevSource\Scripts\ServerManager\build\bdist.win32
   ...
   ...
creating C:\DevSource\Scripts\ServerManager\dist
*** searching for required modules ***
*** parsing results ***
creating python loader for extension 'wx._misc_' (C:\Python26\lib\site-packages\wx-2.8-msw-unicode\wx\_misc_.pyd -> wx._misc_.pyd)
creating python loader for extension 'lxml.etree' (C:\Python26\lib\site-packages\lxml\etree.pyd -> lxml.etree.pyd)
   ...
   ...
creating python loader for extension 'bz2' (C:\Python26\DLLs\bz2.pyd -> bz2.pyd)
*** finding dlls needed ***

py2exe はすべてのインポートを見つけたようです (明示的にインポートしていないため、win32 が言及されているのを見て少し驚きました)。また、私のプログラムは次のコマンドで非常にうまく起動します。

python ServerManager.py

明らかに根本的に間違ったことをしていますが、py2exe からエラー メッセージが表示されない場合、何が原因かわかりません。

4

11 に答える 11

42

これをすべての setup.py スクリプトに入れました。

distutils.core.setup(
    options = {
        "py2exe": {
            "dll_excludes": ["MSVCP90.dll"]
        }
    },
    ...
)

これにより py2exe は静かになりますが、dll がユーザーのマシン上にあることを確認する必要があります。

于 2009-04-21T21:29:58.143 に答える
40

wxPython を使用するプログラムの一部をコメント アウトすると、py2exe が問題なく動作することがわかりました。また、ダウンロードに付属する「単純な」サンプル (つまり、Python26\Lib\site-packages\py2exe\samples\simple 内) で py2exe を使用すると、次のエラー メッセージが表示されます。

*** finding dlls needed ***
error: MSVCP90.dll: No such file or directory

したがって、wxPython に関する何かにより、py2exe は Visual Studio 2008 DLL が必要であると考えます。私は VS2008 を持っていませんが、私のプログラムは Python モジュールのディレクトリとして完全に機能します。Web で MSVCP90.DLL のコピーを見つけて Python26/DLL にインストールしたところ、py2exe が正常に動作するようになりました。

py2exeがなくてもコードを完全に実行できるため、この依存関係がどこから来たのかまだわかりません。また、test_wx.py サンプルの場合のように、py2exe がエラー メッセージを表示しなかったのも厄介です。

さらなる更新: py2exe からの出力を別の PC で実行しようとしたときに、MSVCR90.DLL をインストールする必要があることがわかりました。そのため、ターゲット PC に Visual C++ 2008 がまだインストールされていない場合は、Microsoft Visual C++ 2008 Redistributable Packageをダウンロードしてインストールすることをお勧めします。

于 2008-11-28T10:36:56.880 に答える
9

wxPythonはそれとは何の関係もありません。Python 2.6より前は、PythonはWindowsコンパイラとしてVisualStudio2003を使用していました。2.6以降、Visual Studio 2008に切り替えました。これには、状況によってはマニフェストファイルが必要です。これは十分に文書化されています。次のリンクを参照してください。

http://wiki.wxpython.org/py2exe

http://py2exe.org/index.cgi/Tutorial#Step52

また、py2exeを使用してwxPythonアプリケーションを作成している場合は、コンソールではなくWindowsパラメーターを設定する必要があります。多分私のチュートリアルはあなたを助けるでしょう:

http://www.blog.pythonlibrary.org/2010/07/31/a-py2exe-tutorial-build-a-binary-series/

于 2010-11-18T15:07:21.433 に答える
6

これは Python 2.6 のみの依存関係のようです。2.5 未満ではこのエラーは発生しませんでしたが、アップグレード後は発生しました。

この電子メール スレッドには、問題が存在する理由とその修正方法に関する背景が記載されています

vcredist をインストールする必要はありませんでした。現在、私のアプリケーションはインストールを必要とせず、管理者以外でも実行できます。これは失いたくない動作です。そこで、リンクの提案に従い、必要な Microsoft.VC90.CRT.manifest と msvcr90.dll を「このユーザー専用」に Python をインストールして取得しました。「すべてのユーザー」の Python 2.6 インストールの WinSxS フォルダーにある msvcp90.dll も必要でした。3 つのうち 2 つを既に持っていたので、msvcm90.dll を除外してすぐにエラーが発生することはありませんでしたが、将来のエラーを防ぐためにそれを含めました。マニフェストと 3 つの DLL を、フリーズしたアプリケーションが使用する libs フォルダーに配置しました。

私が実行しなければならなかったトリックは、マニフェストと msvcr90.dll の追加のコピーを、py2exe によって生成された実行可能ファイルの横にあるアプリケーション フォルダーのルートに含めることでした。この DLL のコピーは、アプリケーションのブートストラップに使用されますが、libs フォルダーのみを参照しているように見えます。

うまくいけば、その発見は他の誰かを助けるでしょう.

また、py2exeに実際のエラーメッセージを記録させるという同じ問題がありました。その後、stderr がログ ファイルにリダイレクトされていないことに気付きました。py2exe を呼び出すコマンド ラインに "> build.log 2>&1" を追加します。

于 2009-10-15T03:37:08.327 に答える
6
import sys

sys.path.append('C:\\WINDOWS\\WinSxS\\x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2')

MSVCP90.dll各 Windows では、次のサブディレクトリにファイルがあります。C:\\WINDOWS\\WinSxS\\

私の場合、ディレクトリは次のとおりでした: x86_microsoft.vc90.crt_1fc8b3b9a1e18e3b_9.0.30729.4148_none_5090ab56bcba71c2.

に移動しC:\\WINDOWS\\WinSxS\\、Windows ファイル検索を使用して を見つけますMSVCP90.dll

于 2012-09-25T06:37:18.497 に答える
3

参考までに、私にとってはファイルをコピーするのに役立ちました

Microsoft.VC90.CRT.manifest msvcr90.dll

ユーザーのマシン(PythonまたはVC再配布可能ファイルがインストールされていない)の.exeを含むディレクトリに。

ここですべてのヒントをありがとう!

于 2010-04-13T14:43:32.273 に答える
1

出力には、WXを使用していることが示されます。スクリプトをコンソールではなくGUIアプリとして指定してpy2exeを実行してみてください。私が間違っていなければ、それはpy2exeで問題を引き起こす傾向があります。

于 2008-11-28T06:05:46.443 に答える
1

これを試してください:http ://www.py2exe.org/index.cgi/Tutorial#Step52

それは私のために働いた

于 2012-08-10T17:38:41.350 に答える
-1

私のwin8.1では、パスが見つかりません

c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT

逆に、dll は次の場所にあります。

C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX

XXX はお使いの PC によって異なる場合があります

パスを検索して、setup.py にパスを追加することができます。

import sys
sys.path.append('C:/WINDOWS/WinSxS/x86_Microsoft.VC90.CRT_XXXXXXX')
于 2015-02-21T21:20:54.607 に答える
-2
import sys

sys.path.append('c:/Program Files/Microsoft Visual Studio 9.0/VC/redist/x86/Microsoft.VC90.CRT')
于 2009-09-16T15:58:53.823 に答える