「アウトプットと言う名の備忘録@Texas」

日本じゃない何処かの脳筋パイソニスタによる何かしらの走り書き

【Flask超入門】その0:Conda で仮想環境構築+自動起動

こんにちは!
絶賛転職活動中!脳筋ニシキです!

先日ご縁があって、とあるディベロッパー採用マネージャーの方と話す機会を頂いたのですが、その方の口からやたらと

『Flaskを使って〇〇』
『うちではFlaskが〜〜』

とFlask推しと取れる発言が多く、今までDjagoしか触ったことのない僕としては、
『こいつはちょっとはFlask触れといたほうがいいな』
と強く感じ、週末を使ってFlaskで少し遊んでみることにしました。

仮想環境を作る

f:id:At_sashimi_py:20191013060248p:plain
今日ここで触れるのはFlaskではなく、仮想環境になります。
(Flaskについてはまた後日!)

仮想環境のメリット

個々のプロジェクトごとに使用されるライブラリ(特定のバージョン)のみインストールされている綺麗で無駄のない環境を用意できる上に管理しやすい

という点だと僕は認識しています。

なので今回はFlaskで遊ぶための仮想環境を作っていきます。

conda環境というアプローチ

仮想環境については色々なアプローチがあると思いますが、
僕が個人的にオススメのAnacondaを使った方法をご紹介したいと思います。

conda.io

環境

MacBook Pro (macOS Mojave)
python=3.7.4
conda=4.7.5

対象者

  • インストールはしたものの Anaconda 初心者
  • conda で複数のプロジェクトをスマートに管理したい
  • そもそも仮想環境って何?

とういう方々に向けて書き記していきたいと思います。

まずはプロジェクトのディレクトリを作成

mkdir {ディレクトリ名}

今回はFlaskで遊ぶというシナリオなので
ディレクトリ名は”flask_project”とします。

$ mkdir flask_project

ディレクトリ内に移動し

$ cd flask_project/

ディレクトリ内に仮想環境構築

conda create --name {任意の仮想環境名} {任意ライブラリ等}

以下の condaコマンドで仮想環境を作ります。
その際必要なライブラリ等も同時にインストールします。

$ conda create --name flask_project_env flask sqlalchemy numpy pandas

実行しますか?と聞かれるので、問題がなければ "y" を選択。

$ Proceed ([y]/n)? y

準備が整うと以下のような Activate と Deactivate のメッセージが出てくると思うので

#
# To activate this environment, use:
# > conda activate flask_project_env
#
# To deactivate an active environment, use:
# > conda deactivate
#

早速起動 (Activate) してみましょう!

仮想環境起動!

conda activate {仮想環境名}

$ conda activate flask_project_env

以下のようなエラーメッセージが出た場合

CommandNotFoundError: Your shell has not been properly configured to use 'conda activate'.
To initialize your shell, run

    $ conda init <SHELL_NAME>

Currently supported shells are:
  - bash
  - fish
  - tcsh
  - xonsh
  - zsh
  - powershell

See 'conda init --help' for more information and options.

IMPORTANT: You may need to close and restart your shell after running 'conda init'.

説明に沿って

$ conda init bash

と入力し、ターミナルを再起動。

すると

(flask_project_env)

出来ました!

pip list でインストールされてるライブラリーを確認してみると

$ pip list
Package         Version  
--------------- ---------
certifi         2019.9.11
Click           7.0      
Flask           1.1.1    
itsdangerous    1.1.0    
Jinja2          2.10.3   
MarkupSafe      1.1.1    
mkl-fft         1.0.14   
mkl-random      1.1.0    
mkl-service     2.3.0    
numpy           1.17.2   
pandas          0.25.1   
pip             19.2.3   
python-dateutil 2.8.0    
pytz            2019.3   
setuptools      41.4.0   
six             1.12.0   
SQLAlchemy      1.3.9    
Werkzeug        0.16.0   
wheel           0.33.6   

上で指定したライブラリーとそれらに付随したライブラリーが表示されていると思います。

仮想環境の内容をYAMLファイルに出力して保存

仮想環境が整ったら、以下のコマンドで ”environment.yaml” を生成しておきます。

conda env export > {任意のファイル名}.yaml

$ conda env export > environment.yaml

中身は以下のようになります。

$ cat environment.yaml 
name: flask_project_env
channels:
  - defaults
dependencies:
  - blas=1.0=mkl
  - ca-certificates=2019.8.28=0
  - certifi=2019.9.11=py37_0
  - click=7.0=py37_0
  - flask=1.1.1=py_0
  - intel-openmp=2019.4=233
  - itsdangerous=1.1.0=py37_0
  - jinja2=2.10.3=py_0
  - libcxx=4.0.1=hcfea43d_1
  - libcxxabi=4.0.1=hcfea43d_1
  - libedit=3.1.20181209=hb402a30_0
  - libffi=3.2.1=h475c297_4
  - libgfortran=3.0.1=h93005f0_2
  - markupsafe=1.1.1=py37h1de35cc_0
  - mkl=2019.4=233
  - mkl-service=2.3.0=py37hfbe908c_0
  - mkl_fft=1.0.14=py37h5e564d8_0
  - mkl_random=1.1.0=py37ha771720_0
  - ncurses=6.1=h0a44026_1
  - numpy=1.17.2=py37h99e6662_0
  - numpy-base=1.17.2=py37h6575580_0
  - openssl=1.1.1d=h1de35cc_2
  - pandas=0.25.1=py37h0a44026_0
  - pip=19.2.3=py37_0
  - python=3.7.4=h359304d_1
  - python-dateutil=2.8.0=py37_0
  - pytz=2019.3=py_0
  - readline=7.0=h1de35cc_5
  - setuptools=41.4.0=py37_0
  - six=1.12.0=py37_0
  - sqlalchemy=1.3.9=py37h1de35cc_0
  - sqlite=3.30.0=ha441bb4_0
  - tk=8.6.8=ha441bb4_0
  - werkzeug=0.16.0=py_0
  - wheel=0.33.6=py37_0
  - xz=5.2.4=h1de35cc_4
  - zlib=1.2.11=h1de35cc_3
prefix: /anaconda3/envs/flask_project_env

こうすることで同じ仮想環境が次のコマンドで再構築することが可能に。

$ conda create -f envirornment.yaml

【おまけ】

超便利!自動仮想環境起動スクリプト

github.com

こちらを参考にさせていただきました。ありがとうございます。

$ nano ~/.bash_profile

で以下をbash_profileに付け足すと

# Auto activate conda environments
function conda_auto_env() {
  if [ -e "environment.yaml" ]; then
    ENV_NAME=$(head -n 1 environment.yaml | cut -f2 -d ' ')
    # Check if you are already in the environment
    if [[ $CONDA_PREFIX != *$ENV_NAME* ]]; then
      # Try to activate environment
      source activate $ENV_NAME &>/dev/null
    fi
  fi
}

export PROMPT_COMMAND="conda_auto_env;$PROMPT_COMMAND"

これで、"environment.yaml" が存在するディレクトリに移動すると自動で仮想環境を起動してくれます。これホント便利!

駆け足でしたが、これでCondaを使った仮想環境の準備が整いました!
次回から早速今回構築した仮想環境を使って Flask で遊んでいきます!

【Flask超入門】その1
atsashimipy.hatenablog.com

ありがとうございました!