web-dev-qa-db-ja.com

エラー:Microsoft Visual C ++ 2008再頒布可能パッケージがインストールされているにもかかわらず、「MSVCP90.dll:そのようなファイルまたはディレクトリはありません」

python setup.py py2exeを実行してソースからパッケージをビルドしようとしています

これはsetup.pyのコードのセクションであり、関連があると思います。

if sys.platform == "win32": # For py2exe.
    import matplotlib
    sys.path.append("C:\\Program Files\\Microsoft Visual Studio 9.0\\VC\\redist\\x86\\Microsoft.VC90.CRT")
    base_path = ""
    data_files = [("Microsoft.VC90.CRT", glob.glob(r"C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT\*.*")),

それが示すエラー:

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

ただし、「Microsoft Visual C++ 2008再頒布可能パッケージ」をインストールしました。 32ビットを実行していますpython 64ビットWindows8で実行しています。 32ビットバイナリを構築します。

また、「C:\ ProgramFiles\Microsoft Visual Studio9.0\VC\redist \」のようなフォルダはありません。これは私のコンピュータに含まれているものです:

enter image description here

編集:

C:\ドライブでmsvcp90.dllを検索すると、次のような奇妙なパスにインストールされていることがわかりました。

enter image description here

19
claws

依存関係を完全に無視することをお勧めします。 MSVCP90.dllのオプションとして指定されたdll_excludesのリストにpy2exeを追加します。ユーザーは、Microsoft Visual C++ 2008再配布可能ファイルをインストールする必要があります。例:

setup(
    options = {
            "py2exe":{
            ...
            "dll_excludes": ["MSVCP90.dll", "HID.DLL", "w9xpopen.exe"],
            ...
        }
    },
    console = [{'script': 'program.py'}]
)
12
nneonneo

(他の回答は代替ソリューションを説明しているため、新しい回答)

WinSxSディレクトリからファイルを取得し、それらをC:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRTディレクトリ(通常はVisual Studioによって作成されますが、お持ちではありません)にコピーできます。それらをコピーして、次の構造を取得します。

  +-Microsoft.VC90.CRT
  | |
  | +-Microsoft.VC90.CRT.manifest
  | +-msvcm90.dll
  | +-msvcp90.dll
  | +-msvcr90.dll

次に、セットアッププログラムを実行できるようになり(他の回答のようにmsvcp90.dllを除く)、Microsoft.VC90.CRTの下のファイルが正常に検出され、データファイルとしてバンドルにコピーされます。

詳細については、 py2exeチュートリアル を参照してください。

3
nneonneo

私は、あなたが直面している問題や、pip install cythonを使用したCythonのようなパッケージのインストールなど、Windowsでの複雑化に関して非常に多くの問題を抱えていました。

2週間の苦痛の後で私にとって最もうまくいった解決策は、提供されたWindows用の非公式のMinGW GCCバイナリをダウンロードして実行することでした ここ 。あなたはそのショットを与えて、それが役立つかどうか見てみたくなるかもしれません。

すでに実行している場合は、MinGWをアンインストールすることをお勧めします。それが厳密に必要かどうかはわかりませんが、念のためいつもやっています。 Cygwinと並べて問題なくインストールしました。

0
jdotjdot

ディレクトリ内のスペースと関係があると思います。 .rstrip()を使用してみてください。たとえば、次のように入力します。

directory='C:\Program Files\Microsoft Visual Studio 9.0\VC\redist\x86\Microsoft.VC90.CRT'
directory=directory.rstrip()

その後、実際のパスを使用するのと同じように、変数ディレクトリを使用できます。

これにより、pythonは、以前は解読できなかったディレクトリを認識できるようになります。

0
PygameNerd