web-dev-qa-db-ja.com

pip、virtualenvをインストールし、Python用に配布するための適切な方法は何ですか?

短い質問

バックグラウンド

私の答え to SO質問4314376 では、pipvirtualenvを次のようにインストールできるようにez_setupを使用することをお勧めします。

curl -O http://peak.telecommunity.com/dist/ez_setup.py
Sudo python ez_setup.py
Sudo easy_install pip
Sudo pip install virtualenv

私はもともと、Jesse Nollerのブログ投稿からこれらの説明を引っ張ってきました それで、あなたはMac上でPythonを使いたいですか? 。私はきれいなグローバルなsite-packagesディレクトリを維持するという考えが好きです、そこで私がそこにインストールする他の唯一のパッケージは virtualenvwrapperdistribute です。 (最近--- distribute を私のツールボックスに追加しました このPython公共サービス発表 。これら2つのパッケージをインストールするには、次のものを使用しました。

Sudo pip install virtualenvwrapper
curl -O http://python-distribute.org/distribute_setup.py
Sudo python distribute_setup.py

これ以上setuptoolsとeasy_install

実際に そのPython公共サービスアナウンス に従うために、新しいPythonインストールで、私は以下をするでしょう:

curl -O http://python-distribute.org/distribute_setup.py
Sudo python distribute_setup.py
Sudo easy_install pip
Sudo pip install virtualenv
Sudo pip install virtualenvwrapper

グリフのリバイク

私の答え to SO question 4314376 へのコメントでは、SO user Glyph と述べています。

いいえ。決してSudo python setup.py installをしないでください。あなたのpipインストールを〜/ .localか何かに入れる〜/ .pydistutils.cfgを書きなさい。特にez_setup.pyという名前のファイルはsetuptoolsやeasy_installのような新しいバージョンのものを吸い取る傾向があり、それはあなたのオペレーティングシステムの他のものを壊す可能性があります。

短い質問に戻る

だから グリフの返事 私の最初の質問に私を導く:

243
Matthew Rankin

Python自体にanythingをインストールすることなくこれを行うことができます。

あなたはSudoや特権を必要としません。

ファイルを編集する必要はありません。

Virtualenvをブートストラップ仮想環境にインストールします。その仮想環境を使用してさらに作成します。 virtualenvにはpipとdistributionが同梱されているので、1回のインストールですべてを入手できます。

  1. ダウンロードvirtualenv:
  2. ソースのtarballを解凍する
  3. 解凍したtarballを使って、きれいな仮想環境を作りましょう。この仮想環境は、他の人を「ブートストラップ」するために使用されます。あなたのすべての仮想環境は自動的にpipを含み配布します。
  4. Pipを使って、そのブートストラップ環境にvirtualenvをインストールします。
  5. そのブートストラップ環境を使用してさらに作成しましょう。

これがbashの例です。

# Select current version of virtualenv:
VERSION=12.0.7
# Name your first "bootstrap" environment:
INITIAL_ENV=bootstrap
# Set to whatever python interpreter you want for your first environment:
PYTHON=$(which python)
URL_BASE=https://pypi.python.org/packages/source/v/virtualenv

# --- Real work starts here ---
curl -O $URL_BASE/virtualenv-$VERSION.tar.gz
tar xzf virtualenv-$VERSION.tar.gz
# Create the first "bootstrap" environment.
$PYTHON virtualenv-$VERSION/virtualenv.py $INITIAL_ENV
# Don't need this anymore.
rm -rf virtualenv-$VERSION
# Install virtualenv into the environment.
$INITIAL_ENV/bin/pip install virtualenv-$VERSION.tar.gz

今、あなたはもっと多くを作るためにあなたの "ブートストラップ"環境を使うことができます:

# Create a second environment from the first:
$INITIAL_ENV/bin/virtualenv py-env1
# Create more:
$INITIAL_ENV/bin/virtualenv py-env2

怒る!

注意

これは、あなたがvirtualenvの本当に古いバージョンを使っていないと仮定します。古いバージョンではフラグ--no-site-packges(そしてPythonのバージョンによっては--distribute)が必要でした。これで、ブートストラップ環境をpython virtualenv.py path-to-bootstrapまたはpython3 virtualenv.py path-to-bootstrapだけで作成できます。

173
Walker Hale IV

グリフとは、このようなことをするという意味です。

  1. まだ存在しない場合は、ディレクトリ~/.localを作成します。
  2. ~/.bashrcで、~/.local/binPATHにあり、~/.localPYTHONPATHにあることを確認してください。
  3. 次のものを含むファイル~/.pydistutils.cfgを作成します。

    [install]
    prefix=~/.local
    

    標準のConfigParser形式のファイルです。

  4. ダウンロードdistribute_setup.pyを実行し、python distribute_setup.pyを実行します(no Sudo)。存在しないsite-packagesディレクトリについて不満がある場合は、手動で作成します。

    mkdir -p〜/ .local/lib/python2.7/site-packages /

  5. which easy_installを実行して、それが~/.local/binから来ていることを確認します

  6. pip install virtualenvを実行する
  7. pip install virtualenvwrapperを実行する
  8. フォルダを含む仮想環境を作成します。例えば~/.virtualenvs
  9. ~/.bashrcにadd

    export WORKON_HOME
    source ~/.local/bin/virtualenvwrapper.sh
    

それだけです、Sudoをまったく使用せず、あなたのPython環境は~/.localにあり、OSのPythonから完全に分離されています。免責事項:このシナリオでvirtualenvwrapperがどれほど互換性があるかわからない - 私のシステムではテストできませんでした:-)

21
Vinay Sajip

あなたが私がリンクしたいくつかのチュートリアルでアドバイスされたステップに従うならば この答え 、あなたはWalkerとVinayの答えの中でやや複雑な「手動の」ステップなしで望ましい効果を得ることができます。 Ubuntuをお使いの場合

Sudo apt-get install python-pip python-dev

同等のことはOS Xでもpythonをインストールするために自作を使用することによって達成されます(詳細は ここ )。

brew install python

pipがインストールされていれば、それを使って残りのパッケージを入手することができます(ローカルのpythonインストールを使っているので、OS XではSudoを省略することができます)。

Sudo pip install virtualenvwrapper

(これらはグローバルにインストールする必要がある唯一のパッケージで、OSからのシステムレベルのものと衝突することはないと思います。もしあなたが超安全になりたいのなら、あなたはディストリビューションのバージョンSudo apt-get install virtualenvwrapperを保つことができます)

注:Ubuntu 14.04では pip installでエラーが発生します があるので、pip3 install virtualenv virtualenvwrapperを使用してVIRTUALENVWRAPPER_PYTHON=/usr/bin/python3.bashrc/.zshrcファイルに追加します。

その後、.bashrcファイルに追加します

export WORKON_HOME
source /usr/local/bin/virtualenvwrapper.sh

そしてそれを調達する

. ~/.bashrc

これは基本的にそれです。今の唯一の決定はあなたがシステムレベルのパッケージを含めるためにvirtualenvを作成したいかどうかということです

mkvirtualenv --system-site-packages foo

既存のシステムパッケージを再インストールする必要がない場合は、システムインタプリタのバージョンとシンボリックリンクされています。 注:Sudoを使わなくても新しいパッケージをインストールしたり既存のシステムに含まれるパッケージをアップグレードすることができます - 私はそれをテストしましたがシステムインタプリタを中断することなく動作します。

Kermit@hocus-pocus:~$ Sudo apt-get install python-pandas
Kermit@hocus-pocus:~$ mkvirtualenv --system-site-packages s
(s)Kermit@hocus-pocus:~$ pip install --upgrade pandas
(s)Kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.10.1
(s)Kermit@hocus-pocus:~$ deactivate
Kermit@hocus-pocus:~$ python -c "import pandas; print(pandas.__version__)"
0.8.0

完全に分離された環境が必要な場合の代替手段は、

mkvirtualenv --no-site-packages bar

またはこれがデフォルトのオプションであると仮定すると、単純に

mkvirtualenv bar

その結果、お気に入りのパッケージを自由にそして無意味にインストールできる新しいvirtualenvが得られます。

pip install flask
16
metakermit

Python 3.4以降

Python 3.3では venvモジュール が追加され、Python 3.4では surepipモジュール が追加されました。これにより、ブートストラップピップが簡単になります。

python -m ensurepip

おそらく、仮想環境内でそうするためのvenvの呼び出しが先行しています。

保証ピップは PEP 45 に記述されています。

12
gerrit

Ubuntuの場合:

Sudo apt-get install python-virtualenv

パッケージpython-pipは依存関係なので、同様にインストールされます。

10
Arik Halperin

私たちが職場で使うために私はこの手順を作りました。

cd ~
curl -s https://pypi.python.org/packages/source/p/pip/pip-1.3.1.tar.gz | tar xvz
cd pip-1.3.1
python setup.py install --user
cd ~
rm -rf pip-1.3.1

$HOME/.local/bin/pip install --user --upgrade pip distribute virtualenvwrapper

# Might want these three in your .bashrc
export PATH=$PATH:$HOME/.local/bin
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS="--distribute"
source $HOME/.local/bin/virtualenvwrapper.sh

mkvirtualenv mypy
workon mypy
pip install --upgrade distribute
pip install pudb # Or whatever other Nice package you might want.

セキュリティを重視したポイント:

  1. curlはSSL検証を行います。 wgetは違います。
  2. Pip 1.3.1以降、pipはssl検証も行います。
  3. Github tarballよりもpypi tarballをアップロードできるユーザーは少なくなります。
5
bukzor

更新:2013年7月現在、このプロジェクトはもうメンテナンスされていません。作者は pyenv を使うことを提案します。 (pyenvはvirtualenvの組み込みサポートを持っていませんが、それをうまく使っています。)

Pythonbrewはpythonのバージョンマネージャで、virtualenvをサポートしています。

Venvsを使ってpythonbrewとpython-versionをインストールした後は本当に簡単です。

# Initializes the virtualenv 
pythonbrew venv init

# Create a virtual/sandboxed environment 
pythonbrew venv create mycoolbundle  

# Use it 
pythonbrew venv use mycoolbundle
5
kioopi

Sudo python setup.py installを実行しても問題ありません。

違いは、コピーする.pyファイルの保存先としてあなたのOSのsite-packagesディレクトリを使うということです。

だから、もしあなたがpipをos幅にアクセス可能にしたいのなら、それはたぶん行くべき方法です。私は他の方法が悪いとは言っていませんが、これはおそらく十分に公平です。

3

ActivePythonをインストール 。それはpip、virtualenvとDistributeを含みます。

3
  • あなたはPython自体に何もインストールせずにこれを行うことができます。

  • あなたはSudoや特権を必要としません。

  • virtualenv tarファイルの最新バージョンを見つける必要はありません。

  • 最新の情報を保持するためにbashスクリプトでバージョン情報を編集する必要はありません。

  • curl/wgetまたはtarをインストールする必要はありません。またpipまたはeasy_installも必要ありません。

  • これは2.7および3.Xで機能します。

以下を/tmp/initvenv.pyに保存します。

fromfutureからprint_functionをインポート

import os, sys, shutil, tempfile, subprocess, tarfile, hashlib

try:
    from urllib2 import urlopen
except ImportError:
    from urllib.request import urlopen

tmp_dir = tempfile.mkdtemp(prefix='initvenv_')
try:
    # read the latest version from PyPI
    f = urlopen("https://pypi.python.org/pypi/virtualenv/")
    # retrieve the .tar.gz file
    tar_found = False
    url = None
    sha256 = None
    for line in f.read().splitlines():
        if isinstance(line, bytes):
            line = line.decode('utf-8')
        if tar_found:
            if 'sha256' in line:
                sha256 = line.split('data-clipboard-text')[1].split('"')[1]
                break
            continue
        if not tar_found and 'tar.gz">' not in line:
            continue
        tar_found = True
        for url in line.split('"'):
            if url.startswith('https'):
                break
    else:
        print('tar.gz not found')
        sys.exit(1)
    file_name = url.rsplit('/', 1)[1]
    print(file_name)
    os.chdir(tmp_dir)
    data = urlopen(url).read()
    data_sha256 = hashlib.sha256(data).hexdigest()
    if sha256 != data_sha256:
        print('sha256 not correct')
        print(sha256)
        print(data_sha256)
        sys.exit(1)
    with open(file_name, 'wb') as fp:
        fp.write(data)
    tar = tarfile.open(file_name)
    tar.extractall()
    tar.close()
    os.chdir(file_name.replace('.tar.gz', ''))
    print(subprocess.check_output([sys.executable, 'virtualenv.py'] +
                                  [sys.argv[1]]).decode('utf-8'), end='')
    if len(sys.argv) > 2:
        print(subprocess.check_output([
            os.path.join(sys.argv[1], 'bin', 'pip'), 'install', 'virtualenv'] +

            sys.argv[2:]).decode('utf-8'), end='')
except:
    raise
finally:
    shutil.rmtree(tmp_dir)  # always clean up

そしてそれを使う

python_binary_to_use_in_venv /tmp/initvenv.py your_venv_name [optional packages]

例えば(distributesetuptools互換性レイヤーが本当に必要な場合)

python /tmp/initvenv.py venv distribute

古いPythonバージョンでは、これがInsecurePlatformWarnings¹になるかもしれないことに注意してください。

Virtualenv(名前venvなど)を入手したら、インストールしたばかりのvirtualenvを使用して別のvirtualenvを設定できます。

venv/bin/virtualenv venv2

美人ラッパー

私は一度だけセットアップした後に virtualenvwrapper も見てみることをお勧めします。

% /opt/python/2.7.10/bin/python /tmp/initvenv.py venv virtualenvwrapper

そしてアクティブ化(あなたのログインスクリプトから行うことができます):

% source venv/bin/virtualenvwrapper.sh

次のようなことができます。

% mktmpenv 
New python executable in tmp-17bdc3054a46b2b/bin/python
Installing setuptools, pip, wheel...done.
This is a temporary environment. It will be deleted when you run 'deactivate'.
(tmp-17bdc3054a46b2b)% 

¹ 警告を抑制する方法が見つかりませんでした。これはpiprequestで解決できますが、開発者は互いの原因を指摘しています。私は、私が使っていたpythonのバージョンを最新のバージョンにアップグレードするための、しばしば非現実的な推奨を得ました。これは私のLinux Mint 17インストールが壊れると確信しています。幸いなことにpipはパッケージをキャッシュするので、警告はパッケージのインストールごとに一度だけ行われます。

2
Anthon

私は最近同じ問題に出くわしました。私は「常にvirtualenvを使用する」という考え方に偏っているので、私の問題は、グローバルまたはユーザーのsite-packagesディレクトリにdistributeをインストールせずにpipを使ってvirtualenvをインストールすることでした。これを行うために、私は手動でdistribute、pip、およびvirtualenvをダウンロードし、それぞれについて「python setup.py install --prefix〜/ .local/python-private」を実行しました(一時的な設定はPYTHONPATH =〜/ .local /です)。セットアップスクリプトが配布を見つけることができたようにpython-private)。 virtualenvスクリプトをPATH上の別のディレクトリに移動し、編集して、distributeモジュールとvirtualenvモジュールがsys.path上に見つかるようにしました。多田:/ usr、/ usr/local、または私のユーザーsite-packages dirには何もインストールしませんでしたが、どこでもvirtualenvを実行することができ、そのvirtualenvではpipが得られます。

2
Éric Araujo

OSが提供している古いPythonバージョンの上に、virtualenvの中でさえも、アップグレードされたSSLモジュールをインストールする際にさまざまな問題(下記参照)があったので、今はpyenvを使用します。

pyenv はPythonの新しいバージョンをインストールすることをとても簡単にし、virtualenvsをサポートします。はじめに他の回答にリストされているvirtualenvのレシピよりもはるかに簡単です。

  • Macではbrew install pyenvと入力し、Linuxでは pyenv-installer を使用します。
  • これにより、組み込みのvirtualenvサポートとPythonバージョン切り替え(必要な場合)が得られます。
  • python 2または3でうまく動作します。一度にたくさんのバージョンをインストールすることができます。

これはシステムのPythonから "新しいPython"バージョンとvirtualenvを隔離するのに非常にうまく機能します。最新のPython(2.7.9以降)を簡単に使用できるため、SSLモジュールはすでにアップグレードされています。もちろん、最新のvirtualenvセットアップと同様に、システムのPythonモジュールからは切り離されています。

いくつかの素敵なチュートリアル:

pyenv-virtualenvプラグインは現在チェックするためにpyenv commands | grep virtualenv型に組み込まれています。私は最初からpyenv-virtualenvwrapperプラグインを使用しません - pyenvにもっと統合されているpyenv-virtualenvをどのように利用するかを参照してください。

pyenvrbenv(Rubyのバージョン切り替えに適したツール)をモデルにしており、唯一の依存関係はbashです。

  • pyenvは、非常によく似た名前のpyvenvとは無関係です。これは、最近のPython 3バージョンの一部であり、Pythonバージョンの切り替えを処理しないvirtualenvの同等物です。

注意事項

Pyenvに関する2つの警告:

  1. これはbashやそれに似たシェルからしか動作しません - 具体的には、pyenv-virtualenvプラグインはdashを好みません。これはUbuntuやDebianでは/bin/shです。
  2. 対話的なログインシェル(例えば端末を使ってbash --login)から実行しなければなりません、それは自動化ツール Ansibleのような を使って達成することは必ずしも容易ではありません。

そのため、pyenvは対話的な使用には最適ですが、スクリプトサーバーにはあまり適していません。

SSLモジュールの問題

pyenvを使用する理由の1つは、システム提供の古いPythonバージョンを使用しているときにPython SSLモジュールをアップグレードする際に問題が発生することが多いためです。

2
RichVel

Virtualenvの公式サイトには良い指示があります。 https://pypi.python.org/pypi/virtualenv

基本的には、pipSudo easy_install pipと一緒にインストールし、次にSudo pip install virtualenvを使用してから、次のように環境を作成します。virtualenv my_envvirtualenv --distribute my_env;)私のvirtualenvにdistributepipがインストールされています。

再度、virtualenvページの指示に従います。

Rubyから来た面倒な話、P

0
Victor S

良いニュースはあなたがpython3.4をインストールしたならば、pyvenvは既にインストールされています。これだけ

pyvenv project_dir
source project_dir/bin/activate
python --version   
python 3.4.*

この仮想環境では、pipを使用してこのプロジェクト用のモジュールをインストールできます。

この仮想環境をそのままにしてください。

deactivate
0
maoyang

これがvirtualenvwrapperをインストールするための良い方法です( this の更新)。

ダウンロード virtualenv-1.11.4 (あなたは最新の ここ を見つけることができます)、それを解凍し、開いてくださいterminal

# Create a bootstrapenv and activate it:
$ cd ~
$ python <path to unzipped folder>/virtualenv.py bootstrapenv
$ source bootstrapenv/bin/activate

# Install virtualenvwrapper:
$ pip install virtualenvwrapper
$ mkdir -p ~/bootstrapenv/Envs

# append it to file `.bashrc`
$ vi ~/.bashrc
  source ~/bootstrapenv/bin/activate
  export WORKON_HOME=~/bootstrapenv/Envs
  source ~/bootstrapenv/bin/virtualenvwrapper.sh

# run it now.
$ source ~/.bashrc

それはそれです、今あなたはmkvirtualenv env1lsvirtualenv ..などを使うことができます

注:ダウンロードフォルダからvirtualenv-1.11.4virtualenv-1.11.4.Zipを削除できます。

0
suhailvs