web-dev-qa-db-ja.com

Python 2.7のMicrosoft Visual C ++コンパイラ

Python 2.7 のMicrosoft Visual C++コンパイラ)をダウンロードしてインストールした場合、_vcvarsall.bat_のフルパスは次のとおりです。

_C:\Users\UserName\AppData\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat
_

ただし、次のコードはそのパスを返すことができません。

_from distutils import msvc9compiler
msvc9compiler.find_vcvarsall(9.0)
_

インストーラーはインストール情報をレジストリに書き込みません。また、find_vcvarsall()のソースコードからは、_vcvarsall.bat_設定から_VS90COMNTOOLS_ファイルを見つけることができないようです。 _vcvarsall.bat_を含むフォルダーの名前はVCである必要があるためです。

_productdir = os.path.join(toolsdir, os.pardir, os.pardir, "VC")
_

レジストリまたはフォルダ名を変更せずにコンパイラを使用するにはどうすればよいですか?

21
HYRY

Setuptoolsを6.0以降に更新します。それらのバージョンでは、setuptoolsはvcvarsall.batでMicrosoft Visual C++ Compiler for Python 2.7を自動検出できます。

以下を参照してください。

  1. https://pypi.python.org/pypi/setuptools/6.1#id4
  2. https://bitbucket.org/pypa/setuptools/issue/258
24
heronotears

インストールしようとしているパッケージの_setup.py_ファイルを確認します。古いパッケージの場合、distutils.core.setup()ではなくsetuptools.setup()をインポートしている可能性があります。

私はこれらの要因を組み合わせて(2015年に)これに遭遇しました。

  1. Python 2.7 from http://aka.ms/vcpython27 のMicrosoft Visual C++コンパイラ

  2. distutils.core.setup()を使用する古いパッケージ

  3. pipを使用するのではなく、_python setup.py build_を実行しようとしています。

最近のバージョンのpipを使用する場合、_setup.py_がdistutilsを呼び出す場合でも、パッケージにsetuptoolsを使用するよう強制(monkeypatch)します。ただし、pipを使用せず、代わりに_python setup.py build_を実行する場合、ビルドプロセスはdistutils.core.setup()を使用します。これは、コンパイラのインストール場所を認識しません。


溶液

ステップ1:適切なVisual C++ 2008コマンドプロンプトを開きます

[スタート]メニューまたは[スタート]画面を開き、 "Visual C++ 2008 32ビットコマンドプロンプト"(pythonが32ビットの場合)または "Visual C++ 2008 64ビットコマンドプロンプト"を検索します。 (pythonが64ビットの場合)。実行します。コマンドプロンプトでは、タイトルバーにVisual C++ 2008 ...と表示されます。

ステップ2:環境変数を設定する

開いたばかりのコマンドプロンプトでこれらの環境変数を設定します。

_SET DISTUTILS_USE_SDK=1
SET MSSdk=1
_

リファレンス http://bugs.python.org/issue23246

ステップ3:ビルドとインストール

cdをビルドするパッケージに追加し、_python setup.py build_を実行してから、_python setup.py install_を実行します。 virtualenvにインストールする場合は、ビルドする前にアクティブ化します。

22
Christian Long

クリスチャンロングは実用的なソリューションを提供します。ただし、「Visual C++ 2008 32ビット/ 64ビットコマンド」で毎回変更したくない場合は、「vcvarsall.bat」の場所、つまり「C:\ Users\UserName\AppData」を簡単に見つけることができます。\Local\Programs\Common\Microsoft\Visual C++ for Python\9.0\vcvarsall.bat」、Python27\Lib\distutils\msvc9compiler.pyのfind_vcvarsall(version)関数を変更します

このような:

def find_vcvarsall(version):
    productdir= "C:/Users/UserName/AppData/Local/Programs/Common/Microsoft/Visual C++ for Python/9.0"
    vcvarsall = os.path.join(productdir, "vcvarsall.bat")
    if os.path.isfile(vcvarsall):
        return vcvarsall
    else:
        return None

シンプルで見苦しいが便利。

8
wuliang8910

私はこのパッケージで同じ問題を抱えていましたが、彼らは実際にクリーンインストールでそれをテストしなかったようです。

最後に、キーを追加してCOMPUTER\HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\VisualStudio\9.0\Setup\VC次に、productdirという名前の文字列値を追加し、その値をvcvarsall.batへのパスに設定しました。これは、あなたと同じです。

5
Daniel Samuels

コマンドラインでsetuptoolsをアップグレードします。

pip install --upgrade setuptools

6.0以上のsetuptoolsの最新バージョンは、Microsoft Visual C++ Compiler for Python 2.7

4
alfonso