Pythonの仮想環境を作ってみる。AWSのLambdaの設定でも活躍します 。

Macbook

仮想通貨の自動トレードの回で、モジュールをzipに固める手順がありました。

今回はせっかくなので、Pythonの仮想環境を作ってみましょう。主にMacbook向けを想定しています。なお、仮想環境を作ること自体はできると思いますが、本記事はまだ勉強中の内容が多いため、間違っているところがあると思います、ご了承ください。また、パッケージとモジュールという単語が出てきますが、私は使い分けがわかっていないです(あとライブラリも・・・)。混同しているのでお気をつけください。

Pythonおよび周辺のシステム

Pythonの仮想環境の作り方は色々あります。色々と複雑なので、まずは用語説明から

  • Python・・・プログラミング言語。機械学習・データ分析界隈でよく利用される。
  • pip・・・Pythonで書かれたパッケージソフトウェアをインストール・管理するためのパッケージ管理システム
  • pyenv・・・Pythonのバージョンを管理するコマンドラインツール。例えば、バージョン3.5.1からバージョン3.7.0に変更するみたいな感じ。特定のプロジェクトだけ利用するバージョンを変えることもできる。
  • virtualenv・・・開発環境を仮想化するソフトウェア。
  • anaconda・・・機械学習やデータ分析等を実施するデータサイエンス向け環境の提供するプラットフォーム。パッケージ管理とデプロイメントを簡略化する。パッケージのバージョンは、パッケージ管理システム condaで行う。python以外のパッケージ管理も行う。

難しいです。。。。

初心者はPythonとpipが分かればOK

仮想環境とかPythonのバージョンとかを考えずに済むのであれば、Pythonとpipさえ分かればPythonを始めることが可能です。その場合は、こんな感じですね。

非常にシンプルですね。この場合はPythonの公式ページからダウンロード・インストールすれば実現できます。これから初めてPythonやってみますっていう人はこれでもいいかもしれないです。

Download Python
The official home of the Python Programming Language

初心者もpyenvを入れておくと後々楽!

初心者でもpyenvぐらいは入れておくと後々楽だと思います。というのも、今までの環境をpyenvで利用する設定がややこしいので、最初からpyenvでpythonのバージョンを管理しておくといいでしょう。

homebrewが入っている人は、コマンド一発でpyenvを導入でき、導入したら必要なバージョンのPythonをインストールしましょう。

$ brew install pyenv
$ pyenv install 3.8.1
$ pyenv global 3.8.1

pyenv global というコマンドで全体的に利用するPythonのバージョンを指定できます。逆にある環境(=フォルダ)だけ、3.7.1を使いたいとしたら、pyenv local というコマンドを使いましょう。

$ cd ターゲットのフォルダ
$ pyenv local 3.7.1

これで、ターゲットのフォルダだけ3.7.1を利用することができるようになります。実態としては「.python-version」という隠しファイルができるのでここにバージョン名が書かれているようです。

ちなみに、Macであれば、homebrewは入れておくと便利なので、ぜひ入れましょう。

pyenv + virtualenv でPython仮想環境を作成

pyenvだけだと、Pythonのバージョンを管理するだけなので、おなじバージョンだけど別の開発環境を準備したい場合に対応できません。ここで登場するのが、virtualenvです。virtualenvを使うと仮想の開発環境を作成することができます。また、作成した環境へ移る時もpyenv を利用できます。

$ brew install virtualenv
$ pyenv virtualenv 3.8.1 project

これで、3.8.1のPythonバージョン(の環境)にprojectという名前で仮想環境が作られます。

$ pyenv versions
system
3.8.5
3.8.5/envs/project
project

このprojectという環境にpyenvで切り替えれば、その環境を利用することができます。

仮想環境を作ると、3.8.5の環境と3.8.5/envs/projectの環境でそれぞれのパッケージのバージョンを変えることができます。片方ではnumpy 16.4.1で、もう一方はnumpy 19.1.1 みたいなことが可能になります。複数人でやるデータ分析のプロジェクトでは、利用しているモジュールのバージョンなどをメンバーで合わせたかったりするので、この方法を利用したりするみたいですね。(あとはdocker とかも使っている気がします。)

ちなみに、私は普段この方法は使っていないので、こちらを参考にさせていただきました。ありがとうございます。

pyenvとpyenv-virtualenvの自分流使い方 - Qiita
はじめに同僚に「Pythonの開発環境って pipenv 一択ですよね」と言われて「いや、自分は pyenv + pyenv-virtualenvで不自由していないんだよな」と思いながらも「こう使…

condaを使って、仮想環境作成・パッケージ管理

ここまでの過程で、仮想環境を作ることはできるのですが、私はcondaというコマンドを使って仮想環境の作成をしています。condaは仮想環境の作成からパッケージの管理までできるコマンドで、anaconda内のコマンドです。anacondaは単体でダウンロード・インストールもできますし、pyenvのバージョン一覧にも存在します。

今はどうなのか知らないですが、numpyのライブラリがpip使ってインストールするものと、conda使ってインストールするもので違うらしく、condaの方がいいよ〜ってその昔に教えてもらったことを踏襲しています。

ただ、パッケージの管理はpipでしています。これはanacondaでない環境でpipを普段使っているからですね。昔はpipとcondaが競合してよくないという話があったみたいですが、今は解消されているみたいです。

筆者の仮想環境の作り方

筆者は、pyenvで環境の切り替え、condaで仮想環境の作成、pipでパッケージの管理を行なっています。ここでは、python3.6のanacondaの仮想環境を作成し、pipで必要なモジュールをインストールして、モジュールをzipで固める作業をします。下記の記事を意識しています。homebrewは入っている前提で進めます。

$ brew install pyenv
$ pyenv install anaconda3-5.3.0
$ pyenv global anaconda3-5.3.0

これで、pyenvのインストールおよびanaconda3-5.3.0の環境ができており、その環境が設定されています。この状態であればcondaコマンドが使えることになります。

$ conda create -n autotrade_36 python=3.6 numpy

これは、autotrade_36という仮想環境をpython3.6のバージョンで作成しています。同時にnumpyもインストールしています(今回は使わないですが、もはや慣れですね)。condaはpythonのバージョンも管理できます。

$ pyenv versions
  system
* anaconda3-5.3.0
  anaconda3-5.3.0/envs/autotrade_36

モジュールを作成するディレクトリに移動して、そこでpipを使ってモジュールをインストールします。(移動は必須ではないが、pyenv local で環境を指定したいので、必要に応じてディレクトリを作成する)

$ cd autotrade_module
$ pyenv local anaconda3-5.3.0/envs/autotrade_36
$
$ pip install git+https://github.com/bitbankinc/python-bitbankcc.git
$ pip install requests
$ pip install boto3

必要なモジュールはこれぐらいだと思います。python-bitbankcc内にてrequestsを利用するのでそれもインストールしていますが、一般的なモジュールであれば付随するモジュールは勝手にインストールしてくれることが多いです。boto3はLambdaの場合はデフォルトでモジュール化されており、わざわざインストールする必要がないかもしれません。これで仮想環境の構築は完了です。

最後にautotrade_36内のモジュール群をzip化してみましょう。pythonを実行して、モジュールの場所を表示します。

$ python
>>> import requests
>>> print(requests.__file__)
/User/user/.pyenv/versions/anaconda3-5.3.0/envs/autotrade_36/lib/python3.6/site-packages/requests/__init__.py
>>>

今回は、「/User/user/.pyenv/versions/anaconda3-5.3.0/envs/autotrade_36/lib/python3.6/site-packages」という場所にモジュールがあるようです。

$ cd /User/user/.pyenv/versions/anaconda3-5.3.0/envs/autotrade_36/lib/python3.6/site-packages
$ open .

open . というコマンドでfinder上でフォルダの場所を開くことができます。ここにあるモジュールをコピーして、lambda_function.pyという関数を格納してzip化するとLambda上にアップロードできる形になります。

まとめ

今回は、Pythonを実行する仮想環境の作成を行いました。複数のやり方があるので合ったやり方を探してみてください。

コメント

タイトルとURLをコピーしました