web-dev-qa-db-ja.com

ホスト環境のサイトパッケージフォルダーを含めることなく、virtualenvでpywin32を使用するにはどうすればよいですか?

私は PyInstaller の下でPython 2.6を使用しています。これは、MSが作成した、Pythonなので、MSVC8でコンパイルされています。

問題は、マニフェストの埋め込みサポートが pywin32 拡張に依存していることです。これは、 virtualenv (( PyInstallerからアクセスできるように、必要な拡張機能をインストールする方法が見つからないため、ビルド環境では要点が少し損なわれます。

誰かがこの問題の解決策を見つけましたか?

51
jkp

ええと、即興の方法を見つけなければならなかったので。標準のsetup.pyスクリプトを使用してvirtualenv内にインストールされる、pywin32のハッキングされたバージョンでgitリポジトリを内部的に作成しました。正しく機能させるために多くの手間がかかりましたが、なんとかロードして、依存コードが必要に応じて機能するようになりました。これがコミュニティにとって有益であると人々が感じた場合はコメントを投稿してください:十分な数が得られたら、githubアカウントに何かを載せてみます。

4
jkp

次の解決策を提供する http://old.nabble.com/Windows:-virtualenv-and-pywin32--td27658201.html (現在はデッドリンク)が見つかりました。

  1. 参照 http://sourceforge.net/projects/pywin32/files/ 必要なexeのURLを探します
  2. Virtualenvをアクティブ化する
  3. easy_install http://PATH.TO/EXE/DOWNLOADを実行します

これは、最新バージョンのsetuptoolsで動作します(2014年2月頃、コメントでtovmeodが報告)。


古いバージョンのsetuptoolsを使用している場合(またはそれをsetuptoolsにマージして配布している場合)、次のエラーメッセージが表示されることがあります。

エラー:c:\ users\blah\appdata\local\temp\easy_install-ibkzv7\pywin32-214.win32-py2.6.exeは有効なdistutils Windows .exeではありません

その場合:

  1. 自分でexeをダウンロードする
  2. Virtualenvをアクティブ化する
  3. easy_install DOWNLOADED_FILE.exeを実行します

うまくいけば、「easy_install」ではなく「pip install」を試してみましたが、これは機能せず、おそらく機能しません(引用が必要です)。


最後に、私は http://www.mail-archive.com/[email protected]/msg272040.html で解決策を見つけましたが、テストしていません。

これを解決するには、pywin32.pthファイルを私のvirtualenvサイトパッケージにコピーし、パスを指すようにファイルを編集します。

他のオプションがうまくいかない場合、おそらくこれでうまくいくでしょうか?

74
david.libremone

Python 2.7または3.xの場合、pypiwin32を使用します。

pip install pypiwin32

13

編集:今のところこれをスクラッチしてください、まだインストールに問題があるようです...

私は全体の状況にかなり飽きて、変換されたホイールのセット( "wheel convert <.exe>")を作成しました。私はそれらを最新のビルドのために維持するように努めますが、何か問題があれば叫んでください。

https://tr00st.co.uk/python/wheel/pywin32/

インストールは、pipを使用して、バージョンとアーキテクチャに一致するパッケージをポイントすることで簡単に実行できます。たとえば、Python 3.5/AMD64の場合:

pipインストール https://tr00st.co.uk/python/wheel/pywin32/pywin32-219-cp35-none-win_AMD64.whl

警告:アンインストール手順自体ではクリーンアップできないため、-upgradeプロセスは現在失敗します(win32api.pydのクリーンアップ時にアクセスが拒否されました)-これは、一時ディレクトリを削除する場合にのみ可能です。手動で削除する。これを回避する最も簡単な方法は、アップグレードの代わりにアンインストールして再インストールし、一時フォルダーを手動で削除することです。

0
tr00st

これは、前の回答から改善されている可能性があります。具体的な「ハッキング」なしで、複数のマシンのサンドボックスにpywin32を正常にインストールしたためです。

$ virtualenv sandbox
$ sandbox\scripts\activate
(sandbox) $ git clone https://github.com/Travis-Sun/pywin32.git
(sandbox) $ cd pywin32
(sandbox) $ python setup.py install

次の環境でテスト済み:

0
cthepenier