web-dev-qa-db-ja.com

Python 2.7 for Windowsのlxmlの構築

Python 2.7 for Windows 64ビットマシンでlxmlをビルドしようとしています。lxmlEgg for Python 2.7バージョンです。それでコンパイルしています。私はこのサイトの指示に従っています

http://lxml.de/build.html

静的リンクセクションの下。エラーが発生しています

C:\Documents and Settings\Administrator\Desktop\lxmlpackage\lxml-2.2.6\lxml-2.2.
6>python setup.py bdist_wininst --static
Building lxml version 2.2.6.
NOTE: Trying to build without Cython, pre-generated 'src/lxml/lxml.etree.c' need
s to be available.
ERROR: 'xslt-config' is not recognized as an internal or external command,
operable program or batch file.

** make sure the development packages of libxml2 and libxslt are installed **

Using build configuration of libxslt
Building against libxml2/libxslt in one of the following directories:
  ..\libxml2-2.7.6--win32--w2k--x64\lib
  ..\libxslt-1.1.26--win32--w2k--x64--0002\lib
  ..\zlib-1.2.4--win32--w2k--x64
  ..\iconv-1.9.1--win32--w2k--x64-0001\lib
running bdist_wininst
running build
running build_py
running build_ext
building 'lxml.etree' extension
error: Unable to find vcvarsall.bat

誰でもこれを手伝ってくれますか? Microsoft Visual Studioを使用するようにパスを設定しようとしました。コマンドラインからvcvarsall.batを実行できますが、pythonに問題があります

35
Kamal

これにはVS 2008を使用していないに違いない:)

Distutilsには def find_vcvarsall(version): function(推測するもの、vcvarsall.batを探します)があり、次のコメントがあります。

最初に、レジストリでVS 2008のproductdirを見つけようとします。それが失敗した場合、VS90COMNTOOLS env varにフォールバックします。

VS 2008を使用していない場合は、レジストリキーも適切な環境変数もないため、distutilsはvcvarsall.batファイルを見つけることができません。notは、PATH環境変数を介してbatファイルに到達できるかどうかを確認します。

解決策は、Visual StudioのToolsディレクトリを指すようにVS90COMNTOOLS変数を定義することです。

言われていることは 11.4。distutils.msvccompiler — Microsoft Compiler のPythonドキュメントのセクションをご覧ください。

通常、拡張モジュールは、Pythonのコンパイルに使用したのと同じコンパイラーでコンパイルする必要があります。

Python-listメーリングリストで Visual Studio Express 2008を今すぐダウンロード というタイトルのメールのMartin v。Loewis

Python 2.6、2.7、および3.1はすべて、そのリリース(つまり2008)で構築されています。別の長い伝統があるため、Python拡張モジュールは、Python自体と同じコンパイラバージョン(より具体的にはCRTバージョン)でビルドする必要があります。これらのリリースのモジュールには、VS 2008またはVS 2008 Expressのコピーが必要です。

上記のステートメントに照らして、Python 2.7のlxmlをビルドしたい場合はVS90COMNTOOLSの設定が処理しますが、shouldはVS 2008を使用しますtheソリューションではないvcvarsall.batファイルを見つける。

それは言われています:)人々は新しいコンパイラで古いCRTを使用しようとします:
Visual Studio 2010のC++コンパイラをVisual Studio 2008のC++ランタイムライブラリで使用できますか?
特定のCRTバージョンを使用するようにC++コンパイラを強制する方法
VS 2008-古いCランタイムに対するリンク

スレッド内のKev Dwyer(使用されるVSのバージョンの重要性を指摘するため)とStefan Behnel(コンパイラの構成を扱う場所としてdistutilsを指すため)に感謝します Windowsでlxmlを構築する問題-エラー:vcvarsall.batが見つかりません lxmlメーリングリスト。私も感謝しますagronholm from freenode #distutils IRC distutilsにvcvarsall.batファイルを探すコードが含まれていることを確認してください。

61
Piotr Dobrogost

推奨される解決策を実行した後:

  1. microsoftからVCForPython27.msiをダウンロードし、
  2. インストール(Win7、Python(x、y)2.7.9 32bit)、
  3. 環境変数VS90COMNTOOLSをインストールディレクトリ値(C:\ Program Files(x86)\ Commonに入力/更新するFiles\Microsoft\Visual C++ for Python\9.0)

私の問題はまだ存在していました(CでPython拡張機能をビルドしたい).

すべてが実際に機能する前に、次の2つの信じられないほど汚い調整を行う必要がありました。

  1. 変更 "msvc9compiler.py"in "C:\ Python27\Lib\distutils"、関数find_vcvarsall、現在は "Visual C++ for Python"to "VC"の代わりに。
  2. "C:\ Program Files(x86)\ Common Files\Microsoft\Visual C++ for Python\9.0 \"の下のディレクトリファウンダーを "C:\ Program Files(x86)\ Common Files\Microsoft\Visual C++ for Python \"(つまり、1レベル上のレベル)。

誰がここで何か間違ったことをしていたのかわかりません。おそらく私です。

編集。 this distutilsのバグ で説明されている問題のため、ディレクトリの移動は機能します。

vS90COMNTOOLSが設定されていても、%installdir%/vcvarsall.batではなく%installdir%/VC/vcvarsall.batにインストールされているため、msvc9compilerはvcvarsall.batを見つけることができません。

説明されている回避策は、Visual C++コマンドプロンプトを使用しています。

  1. PythonコマンドプロンプトにMSVCを入力

  2. SET DISTUTILS_USE_SDK = 1

  3. SET MSSdk = 1

  4. python.exe setup.py ...

4
Jorj McKie

Jorj McKieはほぼ正しかった:実際に VCForPython27.msi をインストールするだけでは十分ではありません。distutilsにはfind_vcvarsallが見つからないという問題があります。実際、この問題はdistutilsに直接ではなく、VCForPython27.msiのパッケージ方法とvcvarsall.batの配置場所にあります(フォルダーレイアウトはVS2008 SDKとは異なります)。

簡単な回避策は、これにパッチを当てる際にPython 2.7.11:distutilsの代わりにsetuptoolsを使用してください。

Distutilsにこだわっている場合の別の手動回避策:

1) Enter MSVC for Python command Prompt
2) SET DISTUTILS_USE_SDK=1
3) SET MSSdk=1
4) you can then build your C extensions: python.exe setup.py ...

Gregory Szorcによるバグレポートと回避策: http://bugs.python.org/issue23246

IPython内で%% cythonマジックを使用するための詳細情報と回避策: https://github.com/cython/cython/wiki/CythonExtensionsOnWindows

3
gaborous

https://github.com/develersrl/gccwinbinaries

同様の問題がありました。これは、インストールウィザードを使用して1つの環境設定を設定する以外に、即座に機能しました。

0
Robbie Capps