Python多バージョン開発環境管理ツールの紹介


前言
Pythonの開発では、いくつかの場合、複数のバージョンのPythonを同時にインストールする必要があります。たとえば:
複数のPythonプロジェクトがあり、各項目はPythonバージョンに依存しています。
Pythonプロジェクトがあります。複数のPythonバージョンを同時にサポートする必要があります。
では、どのようにして1台のマシンで複数のバージョンのPython(具体的には、PythonはPython解釈器)のインストールとメンテナンスを効率的に実現しますか?
このほかに、一つのマシンに複数のバージョンをインストールするあるPythonの第三者ライブラリの需要に直面するかもしれません。例えば、複数のPythonプロジェクトがあり、各プロジェクトは異なるバージョンのPython第三者ライブラリrequestsに依存しています。この時、どのように1台のマシンで複数バージョンのPython requestsライブラリのインストールとメンテナンスを実現しますか?
本論文では神器を紹介します。これは最も簡潔な方法を提供し、上記の二つのニーズを同時に満足させる。
マルチバージョンPython管理
多バージョンPython管理を実現するツールをpyenvといいます。そのインストールコマンドは、

curl https://pyenv.run | bash
インストールが完了したら、簡単な配置が必要です。次のいくつかの設定情報をファイルに追加します。bashrcでは、コマンドexc"USSHELL"を実行して、設定を有効にします。

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"
次に、インストールと構成が成功したかどうかは、pyenvバージョンを確認することによって確認することができる。

root@hzettv53:~# pyenv -v
pyenv 1.2.12
pyenvはソースコードに基づいてPythonのコンパイルとインストールを行います。したがって、私たちは先にコンパイル関連のいくつかの依存パッケージをインストールする必要があります。これらの依存性はオペレーティングシステムに関連しているからである。したがって、異なるオペレーティングシステムでは、インストールコマンドが異なります。
一般的なUbuntu/Debianシステムを例にとって、インストールコマンドは:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev xz-utils tk-dev libffi-dev liblzma-dev python-openssl
今はpyenvを使ってPythonをインストールできます。新しいバージョンをインストールする前に、今インストールされているPythonのバージョンを確認します。

root@hzettv53:~# pyenv versions
* system (set by /root/.pyenv/version)
root@hzettv53:~# python -V
Python 2.7.12
現在使用されているのはオペレーティングシステムのPythonです。バージョンは2.7.12です。この時、Python 3.7.2などの新しいバージョンをインストールしたいなら、コマンドを実行するだけです。

pyenv install -v 3.7.2
なお、pyenvはPythonソースコードに基づいてコンパイル・インストールされているので、このステップは少し遅くなります。忍耐強く待つ必要があります。インストールが完了したら、システムのPythonバージョンを確認します。

root@hzettv53:~# pyenv versions
* system (set by /root/.pyenv/version)
3.7.2
root@hzettv53:~# python -V
Python 2.7.12
システムの中にはもう二つのバージョンのPythonがあります。しかし、現在使用されているのはまだシステムバージョンです。新しくインストールされたバージョンを使うなら、

root@hzettv53:~# pyenv global 3.7.2
root@hzettv53:~# pyenv versions
system
* 3.7.2 (set by /root/.pyenv/version)
root@hzettv53:~# python -V
Python 3.7.2
ここでコマンドpyenv global 3.7.2はグローバルPythonバージョンを変更しました。現在のフォルダでPython 3.7.2を使用したいなら、実行できます。現在のシェル環境でPython 3.7.2を使用したいなら、実行できます。
global、local、shellの3つのPythonバージョンを同時に設定したら、どれが本当に有効ですか?ここに優先順位があります。つまりshell>local>globalです。例えば、pyenv local 3.7.2とpyenv global 3.7.3を前後して実行した場合、localの優先度がglobalより高いため、現在有効になっているPythonバージョンは3.7.2です。
このように、単一のマシンに複数のバージョンをインストールするPythonを簡単に実現し、実際の必要に応じて、Pythonバージョンを柔軟に切り替えることができます。
マルチ仮想環境管理
異なる項目間では、Pythonのバージョンに依存するだけでなく、Pythonのサードパーティライブラリのバージョンに依存することもあります。私たちはプロジェクトに依存しているPythonと第三者ライブラリを統一して仮想環境と呼びます。複数のPythonプロジェクトが同時に存在する場合、それぞれの仮想環境に依存して、どうやって効果的に管理されますか?
この時、私達は依然としてpyenvを使って私達の目標を達成することができます。下記のコマンドを使用して、Pythonバージョンを指定する仮想環境を作成できます。

pyenv virtualenv <python_version> <environment_name>
仮想環境の名前はPythonプロジェクト名を体現することを提案しています。例えば、myprojectというプロジェクトがあります。Python 3.7.2に基づいて開発すれば、コマンドを実行できます。

pyenv virtualenv 3.7.2 myprojectenv
このように、私達はmyprojectenvという仮想環境を作りました。それはどう使いますか?私たちはこの仮想環境を使用したいところ(例えば、cdからプロジェクトmyprojectまでのフォルダパス)で、以下のコマンドを実行すればいいです。

pyenv local myprojectenv
この時、現在使用されているPythonとpipは仮想環境myprojectienvを指していることが分かります。

root@hzettv53:~/workspace/test# pyenv which python
/root/.pyenv/versions/myprojectenv/bin/python
root@hzettv53:~/workspace/test# pyenv which pip
/root/.pyenv/versions/myprojectenv/bin/pip
これは、この時pipコマンドでインストールしたすべてのPython第三者パッケージが、システムパスではなく仮想環境myprojectenvにインストールされていることを意味します。このようにPythonプロジェクトとその依存Python開発環境(すなわち仮想環境)との結合を実現した。Pythonの異なるプロジェクトは、それぞれ異なるPython仮想環境を使用することができます。互いに影響しません。
もしPythonプロジェクトが二つのPython仮想環境を使う必要があるなら?私たちは二つの仮想環境(例えば、myprojectenvとmyprojectenv 2)を作成して、使用する時にスイッチすればいいです。

root@hzettv53:~/workspace/myproject# pyenv local myprojectenv
root@hzettv53:~/workspace/myproject:~# python -V
Python 3.7.2
root@hzettv53:~/workspace/myproject# pyenv local myprojectenv2
root@hzettv53:~/workspace/myproject:~# python -V
Python 2.7.12
締め括りをつける
開発環境の効率的な管理はソフトウェア工程の難題であり、特に複数の環境を同時に維持する必要がある時。pyenvは、複数のバージョンのPythonと複数のタイプのPythonの仮想環境をシングルマシンで実現する効果的な管理を提供する。pyenvの使用はとても簡単で、使いやすいです。
githubアドレス
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。