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


125

Virtualenvは素晴らしいです。さまざまなPythonのインストールを保持できるので、さまざまなプロジェクトの依存関係がすべて1つの山にまとめられるわけではありません。

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

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


1
以下の答えは私には
有効

回答:


201

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

easy_install binary_installer_built_with_distutils.exe

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

更新

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


2
私は同意します、これは素晴らしいです。ちなみに、7zipを使用している場合は、.exeの名前をzipに変更せずに直接開くことができます。
Sabuncu、2012年

5
ヒント:開発者はlfd.uci.edu/~gohlke/pythonlibsからWindows用のさまざまなビルド済みPythonパッケージをダウンロードできます 。
yangzh 2013

@CodyHatchあなたはこれが私の唯一の回答ではないので、他の私の回答のいくつかもあなたに役立つ可能性があるので、あなたはできる:)
Piotr Dobrogost

1
私は次のことを得る:バイナリインストーラ-を内蔵して-distutils.exe読書の検索pypi.python.org/simple/...リーディングpypi.python.org/simple/...「binary_installer_built_with_distutils.exe」のインデックスページが見つかりませんでしたすべてのパッケージのインデックスをスキャンしています(これには時間がかかる場合があります)pypi.python.org/simpleの読み取りbinary-installer-built-with-distutils.exeエラーのローカルパッケージまたはダウンロードリンクが見つかりません:Requirement.parseに適したディストリビューションが見つかりませんでした( 'binary-instal ler-built-with-d ...
Paul

1
Paul、彼が参照しているexeは、使用しているインストーラーによって異なります...文字どおり「binary-installer-built-with-distutils.exe」ではない
Tristan Reid

70

これはかなり古い質問であり、これからお話しするツールよりも古いものですが、Googleのために、言及するのは良い考えだと思います。easy_installは、Pythonパッケージの黒い羊です。誰もがピップアラウンドの新しい熱さでそれを使用することを認めたくありません。また、レジストリトリックの再生は非標準のEXEインストーラー(distutilsを使用する代わりにインストーラー自体を構築し、インストールパスのレジストリーをチェックしている)に最適ですが、標準のEXEインストーラーにはより良い方法(c)があります。 。

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

この投稿の時点で最近導入されたwheel形式は、egg形式に代わるものであり、ほぼ同じ役割を果たします。このフォーマットは、pip(virtualenvに既にインストールされているツール)でもサポートされています。

何らかの理由でpip install WHEELFILE機能しない場合は、wheel install WHEELFILE


これをありがとう。うまくいけば、より多くの人々があなたの答えに気づき、賛成票を投じます!
Brett Stottlemyer、2014年

明確にするために。あなたはから、たとえば、.exeファイルから.whlを作成することができますlfd.uci.edu/~gohlke/pythonlibsこれで、。これは展開の面で非常に重要です!
JonasGröger、2014

私はこれを行おうとしましたが、エラーホイールがnumpy-MKL-1.8.1.win-amd64-py2.7.exeを変換し、次にpip install numpy-1.8.1-cp27-none-win_amd64.whlを取得しました。次のエラーが発生します。 numpy-1.8.1-cp27-none-win-amd64.whlのダウンロード/解凍要件numpy-1.8.1-cp27-non e-win-amd64.whlを満たすダウンロードが見つかりませんでしたnumpyのディストリビューションは見つかりませんでした-1.8.1-cp27-none-win-amd64.whl
Paul

試しwheel install WHEELFILE、回答の編集でその存在を指摘してください。誰かの特定の問題のデバッグは、SOコメントで簡単に行われるものではありません。
Tritium21 2014年

この目的だけのためにeasy_installを何度も必要とした後、それは素晴らしいことでした。* easy_installにさよならを振ります
KobeJohn

40

最終的に、スクリプト(http://effbot.org/zone/python-register.htm)を調整して、Pythonインストールをレジストリに登録しました。私がするのPythonを選ぶことができ、レジストリ内のPythonの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 __name__ == "__main__":
    RegisterPy()

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


1
Windows 7では、64ビットで、64ビットPythonはregpathを次のように変更する必要がありましたregpath = "SOFTWARE\\Wow6432Node\\Python\\Pythoncore\\%s\\" % (version)
Oleksiy

実際には、Windows 7、64ビットの場合、regpathをそのままにしておいて、それが機能しました。提案されたmod @Oleksiyは機能しませんでした。おそらく、OSのバージョンや設定によって、微妙に異なるものがあります。
ポール

@Ned Batchelderのソリューションが私に有効な唯一のソリューションでした。ホイールの取り付けがうまくいかなかった。それでもパッケージダウンロードエラーが発生しました(詳細については、その回答に関する私のコメントを参照してください)。easy_install binary_installer ...を実行するという提案は機能した可能性がありますが、easy_installでbinary_installer ... exeファイルを見つけることができませんでした。
Paul

7

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


はい、すべての依存関係の開発パッケージをインストールしている限り。私の場合、pycudaにはBoostとCUDAが必要です。
Ned Batchelder、2010

1
@Ned Batchelder はい、すべての依存関係の開発パッケージをインストールしている限り。まあ、バイナリインストーラーはすべての依存関係もインストールしませんか?
Piotr Dobrogost

0

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

dev-env-path/bin/easy_install pycuda

同じバージョン0.94rcが得られます。

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


1
残念ながら、これはソースからビルドしようとします。ビルド済みのバイナリを使用したいと思っていました。
Ned Batchelder、2010

0

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.