17

私は単語処理でいくつかのプロジェクトを開始しており、NumPy と NLTK が必要でした。easy_installPython の新しいモジュールをシステムにコンパイルする方法を知ったのはこれが初めてでした。

私は Python 2.7 x64 と VS 11 および VS 12 を持っています。Cygwin (私が推測する最新のもの) も持っています。VSを使用してコンパイルするファイルで、Pythonコードをコンパイルしたものと同じバージョンのVS envを探すことがわかりました。なぜですか? 私のバージョンである11.0をハードコードしたとき、numpyはいくつかの奇妙なエラーに基づいて構築できませんでしたvcvarsall(見つかったvcvarsall、おそらく誤用されました)。

Windows で Python バイナリをビルドできませんか? そうでない場合、Linux for Windows でクロス コンパイルできますか? (Android SDK は Google と同じ方法を使用)

4

5 に答える 5

32

更新:この回答は 5 年以上前のものです! Python-2.7 はまもなく非推奨になるため、本当に必要なのは Python-3 用の Microsoft Visual C コンパイラです。この Python wiki on MS Windows Compilers を見てください。MS Build Tools 2015 with VC-14.0 は、Python-3.5 および 3.6 の拡張機能をビルドするために必要なものです。VC-14.0 を含む古いMS ビルド ツール 2015または2017 用の新しい MS ビルド ツールをインストールできます。

また、お使いの pip と setuptools のバージョンが最新であれば、そのばかげた古い学校の MSSDK ナンセンスをすべて無視できます。特に、Python 2.7 または MS ビルド ツール 2015 用の VC を使用している場合。

更新: Zooba以下で言及しているように、Python-2.7 用の無料の x86 および AMD64 (x86-64) VC90 c コンパイラが Microsoft から入手できるようになりました。

更新: SDK v7.0 の x64 コンパイラを任意のシェルで直接使用するためのパッチvcvarsall.batpipを適用し、以下の手順に従ってSDK シェルを使用し、環境変数を設定DISTUTILS_USE_SDKMSSdkます。sdk7 の代わりに v90 で Python-2.7 x64 拡張機能をインストールするには、「vcvarsall.bat を修正する」を参照してください。

tl;dr: Windows SDK v7.0 コンパイラを使用し、SDK シェルを開いて呼び出します

C:\> setenv /release /x64
C:\> set DISTUTILS_USE_SDK=1
C:\> MSSdk=1

distutils を使用して Python 2.7.x 拡張機能をビルドするには、pipまたはeasy_install. Python x64 Package Extensions with pip、MSVC 2008 Express & SDK 7を参照してください。

注: Christoph Gohlke の Intel MKL を使用して最適化された Numpyをインストールできます。virtualenv の場合は、バイナリ配布の Windows インストーラーを、pip でインストールできるwheelファイルに変換してみてください。ソースからNumPyをビルドするのは簡単ではありません。GotoBLASのフォークであるOpenBLASが最近導入され、利用可能になったことで、それが可能になりました。Windows x86 および x86-64 用に最適化されたバイナリと、 GotoBLAS やATLASよりもコンパイルが比較的簡単なソースがあります。

: これまで、ソースから NumPy をコンパイルすることはお勧めしませんでした。なぜなら、BLAS をプラットフォームに合わせて最適化する必要があり、これには非常に時間がかかり、リファレンス BLAS (FORTRAN) または CBLAS (C/C++) の実装は比較的パフォーマンスが低かったからです。 . また、NumPy はLAPACKに依存しており、これは BLAS にも依存しており、これは NumPy を構築するための追加のハードルです。ただし、OpenBLAS バイナリは既に LAPACK でコンパイルされているため、この障害は既に取り除かれています。Carl Kleffner の静的 MinGW-w64 ツールチェーンを参照して、Windows で OpenBLAS を使用して NumPy を構築してください。彼は、ABI の非互換性と、正しい Microsoft Visual C Common Runtime ライブラリ ( msvcr90.dllPython-2.7 用) にリンクする問題のいくつかを解決しました。

Windows 7 x64 への Python 拡張機能のインストールに関する主な質問に進みます。

拡張機能をコンパイルするための推奨される方法は、Python 共有ライブラリのコンパイルに使用されるものと同じコンパイラを使用することです [1-3]。Windows 用の公式の Python 2.7.x は、Microsoft Visual Studio 2008 Professional の Microsoft Visual C++ コンパイラ バージョン 9.0 [4] (別名 MSVC90 または単に VC90)を使用してコンパイルされました。これは、 Microsoft DreamSparkから無料で入手できる場合があります。明らかに、x64 コンパイラはデフォルトではインストールされていないため、x86 コンパイラと一緒にインストールされていることを確認してください。注: MS Visual Studio 2008 は使用できなくなった可能性がありますが、MS Visual Studio 2010 をインストールすると、Windows SDK7 からインストールできる MSVC90 ツールチェーンを使用できます。

コマンド ラインから Python インタープリターを実行するときに、ヘッダーを確認することで、Python がビルドされたバージョンを確認できます。: Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32VS 2008 C++ でビルドされたことを意味します。ソースから Python を自分でビルドすることもできますが、これも骨の折れる作業です。一般に、複数のコンパイラ ランタイムを混在させることはお勧めしませんが、実際にはそれらが機能する場合もあります。

GNU GCCを使用したい場合は、mingw-w64を使用する必要があります。これは、MinGWが AMD64/x86-64 ではなくネイティブ x86 アプリケーション専用であるためです。あなたがする必要があります

ただし、最終的には、Python がビルドされたランタイムにリンクする必要があるため、 Visual C++ 2008 redistributablemsvcr90.dllが必要になります。注: mingw-w64 の Windows GCC は、 which is not the same or laterを使用します。msvcrt.dllmsvcr90.dll

無料で実行したい場合は、Microsoft Visual C++ 2008 Express SP1を使用できますが、Express バージョンにはx64 コンパイラがないため、 Windows SDK 7 for .NET Frameworks 3.5 SP1を追加する必要があります。VS2008 Express & SDK 7 で x64 C++ 拡張機能をインストールする手順は、Windows x64 拡張機能の cython サイトにある手順と非常によく似ています。注: MS Visual Studio 2008 Express は使用できなくなり、サポートも終了しました。

参考までに: Microsoft コンパイラを使用してビルドするのに Visual Studio は必ずしも必要ではありません。これらは、適切な SDK パッケージで無料で入手できます。CL.EXEはコンパイラの実行可能ファイルですが、Autotools または CMAKE などの他のツールによって通常構成されるプラットフォーム オプションを設定する必要があります。CMAKE は MSVC でうまく機能しますが、Autotools AFAIK は MSVC では機能せず、Windows でMSYSで利用できるいくつかの POSIX 環境とユーティリティが必要になります。

distutils または setuptools を使用する多くの Python パッケージでは、Windows SDK 7 を使用して、リファレンス ドキュメントや wiki を通じてさまざまな場所に投稿されている指示に従って拡張機能をコンパイルできます。

  1. [スタート] メニューから[すべてのプログラム] 、 [ Microsoft Windows SDK v7.0 ] の順に選択し、 CMD シェルを起動して、Windows SDK 用に最適化されたコマンド ウィンドウを開きます。
  2. ステップ #1 は、[スタート] メニューまたはコマンド プロンプト (別名)から [ファイル名を指定して実行]ボックスに次のように入力することと同じです。C:\Windows\System32\cmd.exe

    %COMSPEC% /E:ON /V:ON /K "%PROGRAMFILES%\Microsoft SDKs\Windows\v7.0\Bin\SetEnv.cmd"
    

    注:/E:ONコマンド拡張機能を有効にするフラグと/V:ON、遅延変数展開を有効にするフラグは、両方ともSetEnv.cmd機能するために必要です。そうしないと、x64 コンパイラがインストールされていないというメッセージ &c が表示されます。

  3. 次にsetenv /Release /x64、Windows 7 x64 リリース専用の SDK 環境変数を設定するものを入力します (デフォルトの debug または x86 に対して)。

  4. 「 hit set DISTUTILS_USE_SDK=1return」と入力してから「and return」と入力して、SDK を使用していること、および SDK がすべての環境変数を決定することset MSSdk=1を伝えます。distutils.msvccompiler
  5. 次に、選択したインストール方法を使用します。
    • pip install pyyaml ntlkこれが推奨される方法です。 ntlk を参照してください。ただし、 setuptoolspipがインストールされている必要があります。
    • python setup.py installダウンロードされ、抽出された tarball ごとに
    • easy_install pyyaml ntlkこれは古い方法であり、卵をインストールする唯一の方法です。

[1] Windows での C および C++ 拡張機能のビルド
[2] distutils.msvccompiler — Microsoft コンパイラ
[3] Python 開発ガイド: はじめに: Windows
[4]この python をコンパイルした Visual Studio のバージョン

于 2012-12-06T20:07:20.110 に答える
13

他の回答以降、Microsoft は、Python 2.7 (および VS 2008/VC9 を使用した任意のバージョンの Python) の拡張機能を構築するためのコンパイラ パッケージをリリースしました。使用方法は次のとおりです。

  1. http://aka.ms/vcpython27に移動し、パッケージをダウンロードしてインストールします (パッケージはかなり小さく、管理者権限は必要ありません)。

  2. setuptools を 6.0 以降に更新する ( pip install -U setuptools)

  3. パッケージをインストールします ( pip install <whatever>)

最新の setuptools バージョンとこのコンパイラ パックの組み合わせにより、これが非常に簡単になります。

于 2014-11-21T16:21:03.923 に答える
0

どうやらそれを行うにはいくつかの方法があります。

  1. mingwを使用してビルドする
  2. VS2008Expressを使用してPython2.7をビルドします。
  3. どのバージョンが3.2をビルドするのに適しているかはわかりませんが、VS2010である可能性があります。
  4. 目的のVSを使用してソースからpythonx64をコンパイルできますが、他のビルド済みパッケージとの互換性の問題が発生します。
于 2012-07-01T20:18:39.833 に答える
0

これは私にとって最もうまくいきました:

  1. インストールVisual Studio Express 2008
  2. http://www.microsoft.com/en-us/download/details.aspx?id=3138Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1からインストール
  3. に移動しC:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\binて開きますVisual Studio 2008 x64 Win64 Command Prompt
  4. そのシェルで、実行しますpip install <package>

この方法でクライアント システムに再配布可能なパッケージをインストールする必要はありません。

于 2015-08-26T19:37:34.093 に答える