web-dev-qa-db-ja.com

Python windowsパッケージをvirtualenvにインストールできますか?

Virtualenvは素晴らしいです。異なるプロジェクトの依存関係がすべて共通の山に投げ込まれないように、多くの別個のPythonインストールを保持できます。

しかし、.exeインストーラーとしてパッケージ化されたパッケージをWindowsにインストールする場合、virtualenvにインストールするよう指示するにはどうすればよいですか?たとえば、pycuda-0.94rc.win32-py2.6.exeがあります。実行すると、レジストリが調べられ、インストールするPython26が1つだけ見つかります。これは、私のvirtualenvのベースとなっている一般的なPython26です。

Virtualenvにインストールするように指示するにはどうすればよいですか?

124
Ned Batchelder

最終的に、スクリプトを調整して( http://effbot.org/zone/python-register.htm )レジストリにPythonインストールを登録します。 Python)を選択してthePythonレジストリで、Windowsを実行インストーラー、レジストリを元に戻す:

# -*- encoding: utf-8 -*-
#
# script to register Python 2.0 or later for use with win32all
# and other extensions that require Python registry settings
#
# Adapted by Ned Batchelder from a script
# written by Joakim Löw for Secret Labs AB / PythonWare
#
# source:
# http://www.pythonware.com/products/works/articles/regpy20.htm

import sys

from _winreg import *

# Tweak as necessary
version = sys.version[:3]
installpath = sys.prefix

regpath = "SOFTWARE\\Python\\Pythoncore\\%s\\" % (version)
installkey = "InstallPath"
pythonkey = "PythonPath"
pythonpath = "%s;%s\\Lib\\;%s\\DLLs\\" % (
    installpath, installpath, installpath
)

def RegisterPy():
    try:
        reg = OpenKey(HKEY_LOCAL_MACHINE, regpath)
    except EnvironmentError:
        try:
            reg = CreateKey(HKEY_LOCAL_MACHINE, regpath)
        except Exception, e:
            print "*** Unable to register: %s" % e
            return

    SetValue(reg, installkey, REG_SZ, installpath)
    SetValue(reg, pythonkey, REG_SZ, pythonpath)
    CloseKey(reg)
    print "--- Python %s at %s is now registered!" % (version, installpath)

if __== "__main__":
    RegisterPy()

このスクリプトを実行するには、Pythonを登録します。レジストリに入力されます。Windows7およびVistaでは、管理者権限が必要です。

40
Ned Batchelder

はい、できます。あなたが必要なのは

easy_install binary_installer_built_with_distutils.exe

びっくりした? distutilsで作成されたWindows用のバイナリインストーラーは、.exeと.Zipを1つの.exeファイルに結合しているように見えます。拡張子を.Zipに変更して、有効なZipファイルであることを確認します。私は私の質問への答えを読んだ後にこれを発見しました Windows用のpsycopg2でバイナリ卵をどこでダウンロードできますか?

更新

最近、Tritium21の回答で述べたように、easy_installの代わりにpipを使用する必要があります。 Pipは、distutilsによって作成されたバイナリパッケージをインストールできませんが、バイナリパッケージを新しい wheel 形式でインストールできます。 wheel packageを使用して、古い形式から新しい形式に変換できます。最初にインストールする必要があります。

200
Piotr Dobrogost

これは非常に古い質問であり、これから説明するツールよりも前のことですが、Googleのために言及するのは良い考えだと思います。 easy_installは、pythonパッケージングの黒い羊です。誰もがpipの新しいホットさでそれを使用することを認めたくありません。また、レジストリトリックをプレイすることは、非標準EXEインストーラー( distutilsを使用する代わりにインストーラーを自分でビルドし、インストールパスのレジストリをチェックしています)、標準EXEインストーラーのBetter Way(c)があります。

pip install wheel
wheel convert INSTALLER.EXE
pip install NEW_FILE_CREATED_IN_LAST_STEP.whl

この記事で最近紹介されたホイール形式は、卵形式の代わりであり、ほぼ同じ役割を果たします。この形式は、pip(virtualenvに既にインストールされているツール)でもサポートされています。

何らかの理由でpip install WHEELFILEは動作しません。wheel install WHEELFILE

70
Tritium21

easy_installは、多くの一般的なパッケージをカバーするdistutilsのbdist_wininstターゲットを使用してビルドされている限り、.exeパッケージをインストールできます。ただし、そうでないものは他にもたくさんあります(wxPythonは私が苦労したものです)

7
Simon King

環境のeasy_installを使用してPyCUDAをインストールできます。

dev-env-path/bin/easy_install pycuda

同じバージョン0.94rcが提供されます。

Windowsでは、easy_install.exeはScriptsディレクトリにあります。

0
simplyharsh

.msiの場合、msiexecを使用してコマンドラインオプションを指定できる場合があります。 Python installer 自体はTARGETDIRを許可しますが、distutilsがこれをディストリビューションインストーラーに組み込むかどうかはわかりません。

.exeを使用している場合、きれいな方法はないと思います。 1つのオプションは、7Zip(またはwinzipなど)のようなプログラムを使用して、exeの内容を直接抽出し、関連するフォルダーを仮想サイトパッケージフォルダーにコピーすることです。たとえば、「processing-0.5.2.win32-py2.5.exe」を抽出すると、フォルダー「PLATLIB\processing」が見つかります。このフォルダーをvirtualenvパスにコピーし、実行時の問題なく使用します。 (しかし、それがいつもそんなに簡単かどうかはわかりません。)

0
ars