私は単語処理のいくつかのプロジェクトを始めており、NumPyとNLTKが必要でした。 easy_install
と、pythonの新しいモジュールをシステムにコンパイルする方法を知るのはこれが初めてでした。
Python 2.7 x64 plus VS11およびVS12もあります。Cygwin(私が推測する最新のもの)もあります。VSを使用してコンパイルしたファイルで、同じVSenvを検索することがわかりました。 pythonコード、なぜ?私のバージョンである11.0をハードコーディングしたとき、numpyはvcvarsall
に関するいくつかの奇妙なエラーに基づいてビルドできませんでした(vcvarsall
が見つかり、おそらく誤用されました)。
Windowsでpythonバイナリをビルドできませんか?そうでない場合は、Linux for Windowsでクロスコンパイルできますか?(Android)でGoogleと同じ方法を使用します) SDK)
更新:この回答は5年以上経過しています! Python-2.7は非推奨になりそうなので、本当に必要なのはPython-3用のMicrosoft VisualCコンパイラです。 this Python wiki on MS Windows Compilers 。MS Build Tools 2015 with VC-14.0は、Python-3.5および3.6の拡張機能をビルドするために必要なものです。古い MSビルドツール2015 VC-14.0を含むか新しい 2017のMSビルドツール -リンクをクリックして、見つかるまで下にスクロールします- Visual Studio 2017のビルドツール -これにはVC-14.0も含まれます。
また、pipとsetuptoolsのバージョンが最新の場合は、そのばかげた古い学校のMSSDKナンセンスをすべて無視できます。特に、VC for Python 2.7またはMSビルドツール2015を使用している場合。setuptools-24以降、これらのコンパイラを探す場所がわかっているだけです。 。
更新:Zooba 下記のとおり、 Python-2.7用の無料のx86およびAMD64(x86-64)VC90cコンパイラはMicrosoftから入手可能になりました 。
更新:パッチ_vcvarsall.bat
_ 代わりに任意のシェルでpip
を使用してSDKv7.0のx64コンパイラを直接使用するSDK Shellを使用し、以下の指示に従って_DISTUTILS_USE_SDK
_およびMSSdk
環境変数を設定します。 vcvarsall.batを修正してPython-2.7 x64拡張機能をsdk7ではなくv90でインストールする 。を参照してください。
tl; dr: Windows SDK v7.0コンパイラを使用し、SDKシェルを開いてを呼び出します。
_C:\> setenv /release /x64
C:\> set DISTUTILS_USE_SDK=1
C:\> MSSdk=1
_
distutils、pip
または_easy_install
_を使用してPython 2.7.x拡張機能をビルドする。 Python x64 Package Extensions with pip 、MSVC 2008 Express&SDK 7 。
注:インストールできます ChristophGohlkeのIntelMKLを使用して最適化されたNumpy 。 virtualenvの場合は、バイナリ配布ウィンドウインストーラーをpipでインストールできる wheel ファイルに変換してみてください。ソースからの構築 NumPy はnot些細なことです。 OpenBLAS 、 GotoBLAS のフォークの最近の導入と可用性により可能になりました。 Windows x86およびx86-64で利用可能な最適化されたバイナリ およびGotoBLASまたは [〜#〜] atlas [〜#〜] よりもコンパイルが比較的簡単なソースがあります。 。
注:これまで、ソースからNumPyをコンパイルすることはお勧めしませんでした。これは、非常に時間のかかるプラットフォーム用にBLASを最適化する必要があり、参照BLAS(FORTRAN)またはCBLAS(C/C++)の実装は比較的パフォーマンスが低かった。また、NumPyは [〜#〜] lapack [〜#〜] に依存します。これは、NumPyを構築するための追加のハードルもBLASに依存します。ただし、OpenBLASバイナリはすでにLAPACKでコンパイルされているため、この障害はすでに解消されています。 Windows上でOpenBLASを使用してNumPyを構築するためのCarl Kleffnerの静的MinGW-w64ツールチェーン -彼はABIの非互換性のいくつかを解決し、正しいMicrosoft Visual C共通ランタイムライブラリ(_msvcr90.dll
_ for Python-2.7)。
拡張機能をコンパイルするための推奨される方法は、Python共有ライブラリ[1-3]のコンパイルに使用したものと同じコンパイラを使用することです。 公式Python 2.7.x for Windows は Microsoft Visual Studio 2008ProfessionalのMicrosoftVisual C++コンパイラバージョン9.0 [4](別名MSVC90または単にVC90) を使用してコンパイルされました。これは無料で入手できる可能性があります。 from Microsoft DreamSpark 。明らかにx64コンパイラはデフォルトでインストールされていないため、x86コンパイラと一緒にインストールされていることを確認してください。注:MS Visual Studio2008はインストールされていない可能性があります。利用可能ですが、MS Visual Studio 2010をインストールすると、MSVC90ツールチェーンを使用できるようになります。MSVC90ツールチェーンは、Windows SDK7からインストールできます。
コマンドラインからPythonインタープリターを実行するときにヘッダーを確認することで、pythonが構築されたバージョンを知ることができます。eg:Python 2.7.3 (default, Apr 10 2012, 23:24:47) [MSC v.1500 64 bit (AMD64)] on win32
は、VS 2008 C++でビルドされたことを意味します。ソースからPython自分でビルドできますが、これも骨の折れる作業です。一般に、コンパイラランタイムを混在させることはお勧めしませんが、実際には、それらが引き続き機能する場合があります。
GNU GCC を使用することに心を決めている場合は、 MinGW はネイティブx86アプリケーション専用であるため、 mingw-w64 を使用する必要があります。 AMD64/x86-64ではありません。あなたはする必要があります
pexports.exe
_またはmsys2から_gendef.exe
_のいずれかを使用してライブラリ定義ファイルをエクスポートし、_libpython27.a
_(msys/msys2)を使用して静的ライブラリ_dlltool.exe
_を作成します(ただし、公式の最新リリースPython for Windowsには、すでにこのファイルが_Python27\lib
_フォルダーにあります。ありがとうございます!) 。ただし、最終的にはstillpythonで構築されたランタイム、_msvcr90.dll
_に対してリンクする必要があるため、 Visual C++ 2008再配布可能 。注:mingw-w64のWindows GCCは _msvcrt.dll
_を使用します。これは_msvcr90.dll
_以降と同じではありません。 。
無料でやりたい場合は、 Microsoft Visual C++ 2008 Express SP1 を使用できますが、 Windows SDK 7 for .NET Frameworks 3.5 SP1 を追加する必要があります。バージョンはnot x64コンパイラを持っています。 VS2008 Express&SDK7でx64C++拡張機能をインストールする手順は、 Windows x64拡張機能のcythonサイト の手順と非常によく似ています。 注:MS Visual Studio 2008 Expressは使用できなくなったか、サポートされなくなりました。
参考:Microsoftコンパイラを使用してビルドするのに必ずしもVisualStudioは必要ありません。これらは、適切なSDKパッケージとともに無料で入手できます。 _CL.EXE
_はコンパイラの実行可能ファイルですが、AutotoolsまたはCMAKEなどの他のツールによって通常設定されるプラットフォームオプションを設定する必要があります。 CMAKEはMSVCでうまく機能しますが、Autotools AFAIKはMSVCで機能せず、Windowsでは [〜#〜] msys [〜#〜] で利用できるいくつかのPOSIX環境とユーティリティが必要になります。
Distutilsまたはsetuptoolsを使用する多くのPythonパッケージの場合、リファレンスドキュメントおよびwikiを通じてさまざまな場所に掲載されている指示に従って、Windows SDK7を使用して拡張機能をコンパイルできます。
手順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。
次に、_setenv /Release /x64
_と入力します。これにより、Windows 7 x64リリース専用のSDK環境変数が設定されます(vs debugまたはx86がデフォルトです)。
set DISTUTILS_USE_SDK=1
_を入力してreturnキーを押し、次に_set MSSdk=1
_と入力して戻り、SDKを使用していることとSDKがすべての環境変数を決定することを_distutils.msvccompiler
_に伝えます。pip install pyyaml ntlk
_が推奨される方法です、 ntlkを参照 ですが、 setuptools および pip がインストールされている必要があります。python setup.py install
_ダウンロード、抽出されたtarballごとにeasy_install pyyaml ntlk
_これは古い方法であり、卵をインストールする唯一の方法です。[1] WindowsでのCおよびC++拡張機能の構築
[2] distutils.msvccompiler — Microsoftコンパイラ
[3] Python開発ガイド:はじめに:Windows
[4] これはVisualStudioのどのバージョンですかpythonコンパイル済み
他の回答以来、MicrosoftはPython 2.7(およびVS 2008/VC9を使用したPython)の任意のバージョン)の拡張機能を構築するためのコンパイラパッケージをリリースしました。使用方法は次のとおりです。
http://aka.ms/vcpython27 に移動し、パッケージをダウンロードしてインストールします(パッケージはかなり小さく、管理者権限は必要ありません)
Setuptoolsを6.0以降に更新します(pip install -U setuptools
)
パッケージをインストールします(pip install <whatever>
)
最新のsetuptoolsバージョンとこのコンパイラパックの組み合わせにより、これを非常に簡単に行うことができます。
これは私にとって最もうまくいきました:
Visual Studio Express 2008
_Microsoft Windows SDK for Windows 7 and .NET Framework 3.5 SP1
_を http://www.Microsoft.com/en-us/download/details.aspx?id=3138 からインストールします。C:\Program Files (x86)\Microsoft Visual Studio 9.0\VC\bin
に移動し、_Visual Studio 2008 x64 Win64 Command Prompt
_を開きますpip install <package>
_を実行しますこの方法で行う場合、クライアントシステムに再配布可能なパッケージをインストールする必要はありません。
どうやらそれを行うにはいくつかの方法があります。
Windows 10の場合、Python 2.7.11、Cygwin2.5.2およびx86_64-w64-mingw32-gcc4.9.2または5.4.0(ただし、1の下の注を参照)以下)、他の場所からのコメントをまとめて、これが私のPython拡張機能をコンパイル、リンク、およびmsvcrt.dllとmsvcr90.dll間の競合条件を打ち負かすために私がしなければならなかったことです:
Distutils/cygwinccompilerを編集し、class Mingw32CCompiler
で
古い-mno-cygwin修正を次のように置き換えます
if self.gcc_version < '4' or is_cygwingcc():
no_cygwin = ' -nostdlib -lgcc'
gcc4.9.2の場合---注 5.4.0の場合、「if」はありません。
no_cygwin = ''
適切なコンパイラを配置します。
self.set_executables(compiler='x86_64-w64-mingw32-gcc%s -O -Wall' % no_cygwin,
compiler_so='x86_64-w64-mingw32-gcc%s -mdll -O -Wall' % no_cygwin,
compiler_cxx='x86_64-w64-mingw32-g++%s -O -Wall' % no_cygwin,
linker_exe='x86_64-w64-mingw32-gcc%s' % no_cygwin,
linker_so='x86_64-w64-mingw32-%s%s %s %s'
注 x86_64-w64-mingw32-gcc 5.4.0の場合、より適切に機能するようですwithout msvcr90なので、get_msvcr
条件付きで呼び出します。
if self.gcc_version < '5':
self.dll_libraries = get_msvcr()
次のようにsetup.pyを使用します
libdirs=['C:\\Python27\\libs',...]
macros=[('MS_WIN64','1'),...]
platform="WIN32"
ソースファイルヘッダーの1つにパッチを適用して含める
#ifdef MS_WIN64
#define strdup _strdup
#endif
最後に、
/c/Python27/python [editted setup].py -v build --compiler=mingw32
/c/Python27/python [editted setup].py -v install
上記のいくつかは完全に最適な場所ではないかもしれませんが、それは私の拡張機能を機能させました...