Pyenvを使用すると、Pythonの複数のバージョンを簡単に切り替えることができます。それはシンプルで目立たず、1つのことをうまく行う単一目的のツールのUnixの伝統に従います。
このプロジェクトは、RbenvとRuby-Buildからフォークされ、Python用に変更されました。
PATH
にディレクトリを追加することで機能します。以下のMACOSセクションのHomeBrewオプションは、HomeBrewがインストールされている場合にも機能します。
curl https://pyenv.run | bash
詳細については、他のプロジェクトhttps://github.com/pyenv/pyenv-installerをご覧ください
これにより、Pyenvの最新バージョンを使用して、上流の変更を簡単にフォークして提供できます。
$HOME/.pyenv
です(ただし、他の場所にインストールできます): git clone https://github.com/pyenv/pyenv.git ~/.pyenv
cd ~/.pyenv && src/configure && make -C src
上記のLinuxセクションのオプションも機能しますが、HomeBrewは基本的な使用に推奨されます。
HomeBrewを更新してPyenvをインストールします:
brew update
brew install pyenv
最新リリースではなく、Pyenvの最新の開発ヘッドをインストール(および更新)したい場合は、代わりに実行します。
brew install pyenv --head
次に、Pyenvのシェル環境をセットアップすることから始めて、インストール後の残りの手順に従います。
オプション。 brew doctor
の警告を修正するには、「構成」スクリプトがシステムの外に存在します。
TkinterやNumpyなどのPythonとのリンクをリンクするソースからHomebrewフォーミュラを構築する場合(これは、このようなフォーミュラの開発者である場合、または事前に構築されたボトルがあるMacOSのEOLバージョンがある場合にのみ当てはまります。もう提供されず、そのような式を使用しています)。
Pyenvが提供するPythonに対して誤ってリンクするのを避けるために、インタラクティブシェルの構成に次の行を追加します。
bash/zsh:
alias brew= ' env PATH="${PATH//$(pyenv root)/shims:/}" brew '
魚:
alias brew= " env PATH=(string replace (pyenv root)/shims '' "$ PATH " ) brew "
PyenvはWindowsを正式にサポートせず、Linux用のWindowsサブシステムの外側のWindowsで動作しません。さらに、インストールするPythonsは、ネイティブWindowsバージョンではなく、仮想マシンで実行されているLinuxバージョンであるため、Windows固有の機能を取得しません。
Windowsにいる場合は、Native Windows Pythonバージョンをインストールする @Kirankotariのpyenv-win
フォークを使用することをお勧めします。
以下のセットアップは、一般的なユースケースの大多数のユーザーで機能するはずです。詳細とその他の構成オプションについては、詳細な構成を参照してください。
ストックバッシュスタートアップファイルは、どのような状況で、どの順序でどのような追加の構成を実行するかを調達する分布間で大きく異なります。そのため、すべての環境でpyenvを取得する最も信頼できる方法は、pyenv構成コマンドを.bashrc
(インタラクティブシェル用)とBashが使用するプロファイルファイル(ログインシェル)の両方に追加することです。
まず、端末で以下を実行して、 ~/.bashrc
にコマンドを追加します。
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.bashrc
echo ' command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.bashrc
echo ' eval "$(pyenv init -)" ' >> ~ /.bashrc
次に、 ~/.profile
、 ~/.bash_profile
または~/.bash_login
がある場合は、コマンドも追加します。これらのどれもない場合は、 ~/.profile
を作成してコマンドを追加します。
~/.profile
に追加: echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.profile
echo ' command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.profile
echo ' eval "$(pyenv init -)" ' >> ~ /.profile
~/.bash_profile
に追加する: echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.bash_profile
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.bash_profile
echo ' eval "$(pyenv init -)" ' >> ~ /.bash_profile
BASH警告: BASH_ENV
変数が.bashrc
を指すように構成されているシステムがいくつかあります。このようなシステムでは、ほぼ確実にeval "$(pyenv init -)"
lineを.bash_profile
に入れて、 .bashrc
には入力する必要があります。そうしないと、 pyenv
無限のループに入るなど、奇妙な行動を観察することができます。詳細については、#264を参照してください。
echo ' export PYENV_ROOT="$HOME/.pyenv" ' >> ~ /.zshrc
echo ' [[ -d $PYENV_ROOT/bin ]] && export PATH="$PYENV_ROOT/bin:$PATH" ' >> ~ /.zshrc
echo ' eval "$(pyenv init -)" ' >> ~ /.zshrc
非インタラクティブログインシェルでもpyenvを取得したい場合は、コマンドを~/.zprofile
または~/.zlogin
に追加します。
魚3.2.0以下がいる場合は、これをインタラクティブに実行します。
set -Ux PYENV_ROOT $HOME /.pyenv
fish_add_path $PYENV_ROOT /bin
それ以外の場合は、以下のスニペットを実行します。
set -Ux PYENV_ROOT $HOME /.pyenv
set -U fish_user_paths $PYENV_ROOT /bin $fish_user_paths
ここで、これを~/.config/fish/config.fish
に追加します:
pyenv init - | source
PATH
有効になるために変更されます。
exec " $SHELL "
新しいPythonバージョンをインストールしようとする前に、 Pythonビルド依存関係をインストールします。
Pyenvの使用を開始できます。
Pyenvバージョン2.0.x-2.2.xからアップグレードした場合
スタートアップロジックと指示は、2.3.0で簡単に更新されました。 2.0.0-2.2.5の以前のより複雑な構成スキームは引き続き機能します。
PYENV_ROOT
定義して、pyenvがデータを保存するパスを指します。 $HOME/.pyenv
はデフォルトです。 Gitチェックアウトを介してPyenvをインストールした場合は、クローンを作成した場所と同じ場所に設定することをお勧めします。pyenv
実行可能ファイルをPATH
に追加しますeval "$(pyenv init -)"
実行して、シェル関数としてpyenv
シェルにインストールし、シムを有効にし、オートコンプリティeval "$(pyenv init --path)"
を実行することができます追加のPythonバージョンをインストールするには、 pyenv install
を使用します。
たとえば、Python 3.10.4をダウンロードしてインストールするには、実行してください。
pyenv install 3.10.4
pyenv install -l
実行すると、利用可能なすべてのバージョンのリストが表示されます。
注: Pythonバージョンのインストールに問題がある場合は、一般的なビルドの問題に関するWikiページにアクセスしてください。
注:ダウンロードにプロキシを使用する場合は、 http_proxy
およびhttps_proxy
環境変数を設定してください。
注:ビルド時間が長い費用でより速い通訳者が必要な場合は、Python-BuildのReadMeの最大のパフォーマンスを確認するために構築を参照してください。
uninstall
除くすべてのpyenvサブコマンドは、対応するバージョン行の最新バージョンの完全な接頭辞を自動的に解決します。
pyenv install
最新の既知のバージョンを選択し、他のサブコマンドは最新のインストールバージョンを選択します。
たとえば、インストールしてから最新の3.10リリースに切り替えます。
pyenv install 3.10
pyenv global 3.10
pyenv latest -k <prefix>
を実行して、 pyenv install
特定のプレフィックスを解決する方法を確認できます。または、 pyenv latest <prefix>
は、他のサブコマンドがどのように解決するかを確認できます。
詳細については、 pyenv latest
ドキュメントを参照してください。
次のPythonリリースでは、Pyenvは、いくつかの新しい環境のサポートを追加するユーザーが提供するパッチを適用します。これらのパッチは積極的に維持していませんが、既存のリリースは決して変わらないため、これらの環境の後のバージョンでさらに互換性のない変更が発生するまで、それらが動作し続けると想定するのは安全です。
使用するバージョンとしてpyenvインストールされたPythonを選択するには、次のコマンドのいずれかを実行します。
pyenv shell <version>
- 現在のシェルセッションのみを選択しますpyenv local <version>
-現在のディレクトリ(またはそのサブディレクトリ)にいるときはいつでも自動的に選択しますpyenv global <version>
- ユーザーアカウントでグローバルに選択たとえば、上記の新しくインストールされたPython 3.10.4を使用するように選択するものとして選択します。
pyenv global 3.10.4
python
、 pip
などを呼び出すたびに、Pyenvが提供する3.10.4のインストールからの実行可能ファイルがシステムPythonの代わりに実行されます。
「 system
」をバージョン名として使用すると、システムが提供するPythonに選択をリセットします。
選択の仕組みとその使用に関する詳細については、Shimsの理解とPythonバージョンの選択を参照してください。
時間が経つにつれて、 $(pyenv root)/versions
ディレクトリにPythonバージョンが蓄積されます。
古いPythonバージョンを削除するには、 pyenv uninstall <versions>
を使用します。
または、削除するバージョンのディレクトリをrm -rf
だけです。 pyenv prefix
コマンド( pyenv prefix 2.6.8
を備えた特定のPythonバージョンのディレクトリを見つけることができます。ただし、プラグインはアンインストールで追加の操作を実行する場合があることに注意してください。たとえば、pyenv-virtualenvは、アンインストールされているバージョンにリンクされている仮想環境も削除します。
pyenv commands
実行して、利用可能なすべてのサブコマンドのリストを取得します。 --help
を使用してサブコマンドを実行して支援を得るか、コマンドリファレンスを確認します。
インストールするPyenvプラグインは、独自のサブコマンドを追加する場合があることに注意してください。
homebrewを使用してpyenvをインストールした場合は、以下を使用してアップグレードしました。
brew upgrade pyenv
リリースからPyenvの最新の開発責任者に切り替えるには、以下を使用してください。
brew uninstall pyenv
brew install pyenv --head
その後、通常brew upgrade pyenv
してアップグレードできます。
PyenvをPyenv-Installerでインストールした場合、pyenvとすべてのインストールされたプラグインをアップグレードするpyenv-updateプラグインがある可能性があります。
pyenv update
pyenv-installerまたはgitチェックアウトを使用してpyenvをインストールした場合は、gitを使用していつでもインストールをアップグレードすることもできます。
Pyenvの最新開発バージョンにアップグレードするには、 git pull
使用してください。
cd $( pyenv root )
git pull
Pyenvの特定のリリースにアップグレードするには、対応するタグをご覧ください。
cd $( pyenv root )
git fetch
git tag
git checkout v0.1.0
Pyenvのシンプルさにより、一時的に無効にしたり、システムからアンインストールしたりできます。
pyenvのPythonバージョンの管理を無効にするには、シェルスタートアップ構成からpyenv init
invocationsを削除するだけです。これにより、Pyenv ShimsディレクトリがPATH
から削除され、 python
のような将来の呼び出しがPyenvの前と同様にSystem Pythonバージョンを実行します。
pyenv
引き続きコマンドラインでアクセスできますが、Pythonアプリはバージョンの切り替えによって影響を受けません。
pyenvを完全にアンインストールするには、シェルスタートアップ構成からすべてのpyenv構成ラインを削除し、ルートディレクトリを削除します。これにより、 $(pyenv root)/versions/
ディレクトリの下にインストールされたすべてのPythonバージョンが削除されます。
rm -rf $( pyenv root )
パッケージマネージャーを使用してPyENVを最終ステップとしてインストールした場合、PyENVパッケージの削除を実行します。たとえば、homebrewの場合:
brew uninstall pyenv
Pyenvは、プラグインディレクトリを作成し、特定の瞬間に実行する必要がある追加のロジックを使用して、そのサブパスに関するシェルスクリプトをドロップするのと同じように、プラグインを使用して機能を拡張およびカスタマイズする簡単な方法を提供します。
主なアイデアは、 $PYENV_ROOT/<whatever>
の下に置くことができるほとんどのものは$PYENV_ROOT/plugins/your_plugin_name/<whatever>
の下に置くこともできるということです。
Wikiのプラグインは、プラグインをインストールして使用する方法と、一般的なニーズに対応する便利な既存のプラグインのカタログを参照してください。
独自のプラグインを書く際のWikiのプラグインの作成を参照してください。
高レベルでは、PyenvはPATH
に注入されたShim実行可能ファイルを使用してPythonコマンドを傍受し、アプリケーションによってどのPythonバージョンが指定されているかを決定し、コマンドを正しいPythonインストールに合わせます。
python
やpip
などのコマンドを実行すると、シェル(Bash / Zshrc / ...)がディレクトリのリストを検索して、その名前の実行可能ファイルを見つけます。このディレクトリのリストは、 PATH
と呼ばれる環境変数に住んでおり、リスト内の各ディレクトリはコロンで区切られています。
/usr/local/bin:/usr/bin:/bin
PATH
中のディレクトリは左から右に検索されるため、リストの先頭にあるディレクトリ内のマッチング実行可能ファイルは、最後に別のものよりも優先されます。この例では、 /usr/local/bin
ディレクトリが最初に検索され、次に/usr/bin
、そして/bin
検索されます。
Pyenvは、 PATH
の前にシムのディレクトリを挿入することで機能します。
$(pyenv root)/shims:/usr/local/bin:/usr/bin:/bin
Rehashingと呼ばれるプロセスを通じて、Pyenvはそのディレクトリのシムを維持し、 python
、 pip
などのすべてのインストールバージョンにわたってすべてのPythonコマンドを一致させます。
シムは、コマンドをPyenvに渡すだけで、軽量の実行可能ファイルです。したがって、Pyenvがインストールされた状態で、たとえばpip
実行すると、オペレーティングシステムが以下を実行します。
pip
という名前の実行可能ファイルのPATH
を検索しますPATH
の先頭にpip
という名前のpyenvシムを見つけるpip
という名前のシムを実行します。これは、コマンドをpyenvに渡しますシムを実行すると、Pyenvは、次のソースから読み取ることで使用するPythonバージョンを決定します。
PYENV_VERSION
環境変数(指定されている場合)。 pyenv shell
コマンドを使用して、現在のシェルセッションでこの環境変数を設定できます。
現在のディレクトリのアプリケーション固有の.python-version
ファイル(存在する場合)。 pyenv local
コマンドを使用して、現在のディレクトリ.python-version
ファイルを変更できます。
ファイルシステムのルートに到達するまで、各親ディレクトリを検索することにより、最初の.python-version
ファイルが見つかりました(ある場合)。
グローバル$(pyenv root)/version
ファイル。 pyenv global
コマンドを使用してこのファイルを変更できます。グローバルバージョンファイルが存在しない場合、Pyenvは「システム」Pythonを使用することを想定しています(以下を参照)。
特別なバージョン名「 system
」とは、Shims PATH
エントリの後にPATH
でPythonが見つかるものを使用することを意味します(つまり、Pyenv ShimsがPATH
にいなかった場合に実行されるものは何でも)。 Pyenvは、それらのインストールを制御外に考慮し、それらを何らかの形で検査または区別しようとしないことに注意してください。したがって、あなたがmacOSにいて、PyenvのOSバンドルPython 3.8.9とHomebrew-Installed Python 3.9.12および3.10.2を使用している場合、これはまだ単一の「 system
」バージョンであり、それらのどれが最初にかかっていますか指定した実行可能名の下のPATH
が実行されます。
注: Python2またはPython3の複数のバージョンを同時に含む、複数のバージョンを同時にアクティブにすることができます。これにより、Python2とPython3の並行使用が可能になり、 tox
などのツールで必要です。たとえば、PyenvにシステムPythonとPython3( pyenv install
および3.4.2)を使用するように指示するには、Python 3.3.6、3.2.1、および2.5.2も使用できます。バージョン、 pyenv global system 3.3.6 3.2.1 2.5.2
を設定します。次に、適切なpythonX
またはpythonX.Y
名でこれらのバージョンのいずれかを呼び出すことができます。また、newlinesで区切られた.python-version
ファイルで複数のバージョンを指定することもできます。 #
で始まる行は無視されます。
<command>は、<command>を介して<command>
呼び出したときに実行される実際の実行可能ファイルを表示するpyenv which <command>
。たとえば、3.3.6、3.2.1、および2.5.2がインストールされている場合、そのうち3.3.6および2.5.2が選択され、システムPythonが3.2.5、 pyenv which python2.5
$(pyenv root)/versions/2.5.2/bin/python2.5
表示する必要があります。 $(pyenv root)/versions/2.5.2/bin/python2.5
pyenv which python3
- $(pyenv root)/versions/3.3.6/bin/python3
およびpyenv which python3.2
-fall-shroughのためにシステムpythonへのパス(以下を参照してください)。
また、選択したPythonインストールのいずれにも対応する実行可能ファイルが存在しない場合、シムはさらにPATH
上に落ちます。これにより、選択したPythonのインストールによって影が付けられていない限り、システム上の他の場所にインストールされているプログラムを使用できます。
Pyenvがアプリケーションが指定したPythonのバージョンを決定すると、コマンドを対応するPythonインストールに渡します。
各Pythonバージョンは$(pyenv root)/versions
の下で独自のディレクトリにインストールされます。
たとえば、これらのバージョンをインストールする場合があります。
$(pyenv root)/versions/2.7.8/
$(pyenv root)/versions/3.4.2/
$(pyenv root)/versions/pypy-2.4.0/
Pyenvに関する限り、バージョン名は単に$(pyenv root)/versions
の下のディレクトリです。
シェルプロファイルのすべての行が何をしているかを知っている必要がない限り、このセクションをスキップします。
また、Pyenvの動作を制御する環境変数の環境変数セクションも参照してください。
pyenv init
シェルに追加のコマンドをロードするラインを横断する唯一のコマンドです。 RVMから来て、あなたの何人かはこの考えに反対するかもしれません。これは、 eval "$(pyenv init -)"
実際に行うものです。
シムパスをセットアップします。これにより、Pyenvはpython
、 pip
などの呼び出しを傍受して透過的に挿入してリダイレクトできます。 $PATH
に$(pyenv root)/shims
を準備します。また、 PATH
エントリを重複させることなく複数回eval "$(pyenv init -)"
呼び出すことができるPATH
上の$(pyenv root)/shims
の他のインスタンスを削除します。
オートコンプリティをインストールします。これは完全にオプションですが、かなり便利です。 Sourcing $(pyenv root)/completions/pyenv.bash
それを設定します。 ZSHと魚の完成もあります。
シムを再ハッシュします。 Shimファイルを再構築する必要があります。 initでこれを行うと、すべてが最新であることを確認します。 pyenv rehash
いつでも手動で実行できます。
シェル関数としてpyenv
現在のシェルに取り付けます。このビットもオプションですが、Pyenvとプラグインが現在のシェルの変数を変更できます。これは、 pyenv shell
ようないくつかのコマンドが機能するために必要です。 SHディスパッチャーは、 cd
オーバーライドしたり、シェルプロンプトをハッキングしたりするなど、クレイジーなことは何もしませんが、何らかの理由でpyenv
シェル関数ではなく実際のスクリプトになる必要がある場合は、安全にスキップできます。
eval "$(pyenv init --path)"
項目1と3のみを行います。
自分のためにボンネットの下で何が起こるかを正確に確認するには、 pyenv init -
またはpyenv init --path
を実行してください。
eval "$(pyenv init -)"
インタラクティブシェルの起動(ネストされたシェルを含む - 編集者から呼び出されたものなど)で実行されることになっています。
eval "$(pyenv init --path)"
shimsを有効にするために、 eval "$(pyenv init -)"
の代わりに使用できます。また、他のロジックがPyenvのシムを覆う可能性のあるPATH
に加えたものを準備した後、シムをPATH
の前にぶつけます。
~/.bashrc
調達した後、ユーザーごとのbin
ディレクトリをPATH
にプリフするストック~/.profile
prependをパスに向けます。これには、これらの分布に~/.profile
と~/.bashrc
へのpyenv init
コールを追加する必要があります。これは、システムのPIPが非ルートユーザーによってインストールされたモジュールの実行可能ファイルをユーザーごとのbin
ディレクトリにインストールするためです。pyenv init
とShimsを使用したくない場合でも、PyenvのPythonバージョンをインストールする能力の恩恵を受けることができます。 pyenv install
実行するだけで、 $(pyenv root)/versions
にインストールされているバージョンがあります。
必要に応じて手動で実行またはシンプリングすることも、 <command>
が現在構成されているPyenvのバージョン選択の影響を受けるときにいつでもpyenv exec <command>
を使用することができます。
pyenv exec
<command>
の環境で$(pyenv root)/versions/<selected version>/bin
PATH
to rvmと同じように準備します。
次の環境変数でpyenvがどのように動作するかに影響を与えることができます。
名前 | デフォルト | 説明 |
---|---|---|
PYENV_VERSION | 使用するPythonバージョンを指定します。pyenv shell も参照してください | |
PYENV_ROOT | ~/.pyenv | Pythonバージョンとシムが存在するディレクトリを定義します。pyenv root も参照してください |
PYENV_DEBUG | 出力デバッグ情報。 また: pyenv --debug <subcommand> | |
PYENV_HOOK_PATH | wikiを参照してください | Pyenvフックを検索したパスのコロン分離されたリスト。 |
PYENV_DIR | $PWD | .python-version ファイルの検索を開始するディレクトリ。 |
ビルドのカスタマイズに使用できる環境変数のためのPython-BuildのReadMeの特別な環境変数も参照してください。
pyenvソースコードはGithubでホストされています。シェルハッカーでなくても、清潔でモジュール式で理解しやすいです。
テストはコウモリを使用して実行されます:
bats test
bats/test/<file>.bats
問題トラッカーにプルリクエストとファイルバグを送信してください。
変更の送信の詳細については、Contributing.mdを参照してください。
changelog.mdを参照してください。
MITライセンス