若葉の技術メモ

コンピュータやプログラミングに関して調べたり、取り組んだりしたことをまとめる若葉のノート📓。コンピュータ・プログラミング初めてって方も一緒に勉強していきましょう!初心は大事!いつでも若葉☘のような意気込みで!

  • No.   

若葉の技術メモ

コンピュータやプログラミング・数理に関して調べたり、取り組んだりしたことをまとめる若葉のノート。

コンピュータ・プログラミング・数理が初めてって方も一緒に勉強していきましょう!

初心は大事!いつでも若葉☘のような意気込みで!

【Pythonのバージョンの違いでお悩みの方必見!】Pythonのバージョンを自在に切り替える方法!:仮想環境

Python 2.xPython 3.x

f:id:wakaba-mafin:20181206003040j:plain:w150:right

python2.x用に書かれたソースコードをpython3.xで実行しようとしてエラー。逆にpython3.x用に書かれたソースコードをpython2.xで実行しようとしてエラー

互換性がなくて面倒くさい...って思うことありますよね?

今回は、その面倒なことを避けるためにAnacondaを用いて2系と3系の仮想環境を構築する方法をご紹介します!


仮想環境の目的

なぜ仮想環境を用いる必要があるのでしょうか?

それは目的に応じて開発環境を切り替える必要がある場合があるからです。

例えば、冒頭で述べたpython2.xとpython3.xの違いです。今、あなたが2つのプロジェクトに参加していて、一方は2系での開発、他方は3系での開発であるとしましょう。このとき、あなたのマシンがpython3.xにしか対応していなかったら、2系での開発を行うことができません。例えば、2系では

print "Hello World"

を実行することができますが、この構文を3系で実行しようとするとシンタックスエラーが生じます。python2.xとpython3.xでは文法が異なる箇所が多々あるのです。

つまり、「複数のバージョンを使い分けたい」や「ライブラリ・パッケージが互いに干渉しないようにしたい」という要求のもとで仮想環境が必要になってくるのです。

Anacondaによる仮想環境の扱い

仮想環境を管理する方法ですが、実はAnacondaで行うことができます

以前の記事

wakaba-mafin.hatenablog.com

でJupyterを導入する途中でAnacondaを利用しました。 基本的にAnacondaはデータ解析に必要なライブラリを備えたPythonパッケージなのですが、 Anacondaの機能として仮想環境を構築する機能もついています。

www.anaconda.com

ということで、Anacondaを使って仮想環境を作ってみましょう!

condaコマンド

まずはcondaを確認しましょう。ヘルプを見ると...

$ conda -h
usage: conda [-h] [-V] command ...

conda is a tool for managing and deploying applications, environments and packages.

Options:

〜以下略〜

ずらっとたくさん出てきます💦ですが、今回使うのは基本的に

  • conda create

  • conda info

  • conda env remove

3つだけです!というわけでこれらを駆使して仮想環境を構築・管理していきます。

仮想環境の構築

今回はPython2.7とPython3.4.1の仮想環境を作ってみましょう。

仮想環境の作り方は

$ conda create (-y) -n ${仮想環境名} ${パッケージ}

です。ここで括弧つきのyオプションは確認部分を全てyesと答えるオプションです。

yesと答えることについてはこちらの記事を参考にしてもらえればと思います↓

wakaba-mafin.hatenablog.com

というわけで、python2.7とpython3.4.1の仮想環境の構築

$ conda create -y -n python341 python=3.4.1
$ conda create -y -n python27 python=2.7

でOK。仮想環境の確認は次のコマンドで行います。

$ conda info -e
# conda environments:
#
base                  *  /home/testuser/.pyenv/versions/anaconda3-5.3.0
python27                 /home/testuser/.pyenv/versions/anaconda3-5.3.0/envs/python27
python341                /home/testuser/.pyenv/versions/anaconda3-5.3.0/envs/python341

確かにpython27とpython341という名前の環境ができていますね!baseはデフォルトの環境です。

さて、ここまでで仮想環境の構築はできました!次はこの環境が本当にpython2.7とpython3.4.1の環境になっているかどうかの確認です。

仮想環境の切り替え

というわけで、ここでは実際に仮想環境を切り替えて、python2.7とpython3.4.1を試してみましょう!

仮想環境を切り替え方は

$ conda activate ${仮想環境名}

とするだけ(ここでconda activateが使えなかったときは出力のecho 〜以下略〜の部分を実行してターミナルを再起動、もしくは.bashrcの再読み込みをしてもらえればOKです)。

そして、実際にPython3.4.1の仮想環境に切り替えてバージョンを確認すると、

$ conda activate python341 
$ python -V
Python 3.4.1 :: Continuum Analytics, Inc.

となって、見事Python3.4.1に変わってました!また、Python2.7の仮想環境も

$ conda activate python27
$ python -V
Python 2.7.15

で確かにPython2.7になってます。また、構文エラーも確認してみましょう。

$ conda activate python27
$ python
Python 2.7.15 | packaged by conda-forge | (default, Nov 29 2018, 06:43:57) 
[GCC 4.8.2 20140120 (Red Hat 4.8.2-15)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hello"
Hello
>>> exit()
$ conda activate python341
$ python
Python 3.4.1 |Continuum Analytics, Inc.| (default, Sep 10 2014, 17:10:18) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-1)] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> print "Hello"
  File "<stdin>", line 1
    print "Hello"
                ^
SyntaxError: invalid syntax
>>> exit()

確かにPython2.7の仮想環境ではPython2.7でprint "Hello"を解釈し、Python3.4.1の仮想環境ではPython3.4.1でprint "Hello"を読みにいってシンタックスエラーを起こしています。

最後に仮想環境を終了する場合は

conda deactivate

でOKです。

仮想環境の削除

というわけで、Python2.7の仮想環境とPython3.4.1の仮想環境を構築して、その動作も確認できました。私にはもうこれらの仮想環境はいらないので、この仮想環境を消しちゃいましょう!仮想環境の消し方は

$ conda env remove -n ${仮想環境名}

です。実際に

$ conda env remove -y -n python341
$ conda env remove -y -n python27
$ conda info -e
# conda environments:
#
base                  *  /home/testuser/.pyenv/versions/anaconda3-5.3.0 

はい。ちゃんと仮想環境python27python341が消えましたとさ。

まとめ

今回はAnacondaを使って仮想環境を管理する方法をお伝えしました。Anacondaを使った仮想環境の管理は基本的に

  • 仮想環境の確認 conda info -e

  • 仮想環境の構築 conda create -n ${仮想環境名} ${パッケージ}

  • 仮想環境の削除 conda env remove -n ${仮想環境名}

でできてしまいます!この3つがあれば、簡単にPythonのバージョンを切り替えたり、必要なパッケージのセットを切り替えたりできますね!

間違いのご指摘やご意見・ご質問等ございましたら、ぜひお気軽にコメントのほどよろしくお願いします!