AWS-Amplifyで構成されたプロジェクトにて、LambdaFunctionをPythonで書かなくちゃいけなくなりました。普段Node.jsばっか書いてるので、バージョン管理でハマっちゃいましたので、ここでまとめて書いてみようという試みです。
AWS-Amplifyまで含めると長い話になるので、この記事ではいったん仮想環境の構築までを議論します。
Python本体(exe)のバージョン管理の領域
Pythonのバージョン管理の領域は主に3つとなります。
- 開発マシン
- 開発系ではトップレベルのPython環境で、何気なくpyを呼び出したときに出てくるPythonのバージョンを指します
- プロジェクト
- このプロジェクトが指定する、Python環境を指しています
- デプロイする環境
- 実際に動作している環境です。プロジェクトといっしょになる(はず)
この領域に対して厳密に環境構築を行う必要があります。
*ただし、この記事ではデプロイする環境に関しては議論の対象外としています。
Pythonのパッケージ管理の領域
Python本体とは別に、パッケージ(ライブラリ)を管理する必要があります。
- 開発マシン
- プロジェクト
- デプロイする環境
の3領域を意識しなければならないのは一緒です。
環境構築の前に
すでに開発マシンに入っているPythonをきれいに除去してあげる必要があります。
アンインストーラが適切ですが、本体ファイルを除去する必要があるかもしれません。
# python本体がどこなのか、見つける
where python
where py
where python3
開発マシンのPython本体バージョン管理
pyenvを利用します。この操作は特権で実施する必要があります。
Windowsを利用していますので、pyenv-winをChocolaty経由でインストールします。
このpyenvがPython本体を管理します。
choco install pyenv-win
おわったら、refreshenvしてpyenvを呼び出します。
# ダウンロード済みのバージョン
pyenv versions
# 利用可能なバージョン
pyenv install --list
# ダウンロードする。
pyenv install [好きなバージョン]
# グローバルなPythonバージョン
pyenv global [好きなバージョン]
# 現在のpythonバージョン
pyenv version
後述するpipenvでpythonのライブラリも環境に影響を与えずに管理がしたいです。
なので、開発マシンのPython本体はpyenvでプロジェクトのPython本体とライブラリはpipenvで管理します。
pipenvはPython環境(本体とライブラリ)をまとめて構築します。vertualenv(venv)はpipenvに内蔵されているので、併用の必要はありません。
pipenvのインストール
pip install pipenv
ここまでが、開発マシンに対する設定の手順でした。
ここからは、各プロジェクトに対する設定になります。
コマンドはプロジェクトディレクトリにて実行していきます。
pipenvの初期化
# 実行前に、python本体のバージョンを合わせておきます。
pyenv local 3.8.10
# 初期化
pipenv --python 3.8
実行すると、Pipfileができます。
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
[requires]
python_version = "3.8"
Pipfileを書き換える
[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true
[dev-packages]
[packages]
numpy = "<2"
pandas = "*"
[requires]
python_version = "3.8"
わけあってnumpyのバージョン2未満と、pandasを利用したいです。
これは実動作にも必要なので、packagesに入れます。
テストモジュールに必要なものなどは、dev-packagesに入れてもいいかもしれませんね。
# Pipfileの適用
pipenv install
これで、Python3.8と前提になるパッケージを内蔵した仮想開発環境ができました。
pipenvとvenv
vertualenv(venv)はpipenvに内蔵されています。ということは、.venvフォルダがどこかにあるはずだと思いました。本体とライブラリをまとめた場所があるはずですからね。
C:\Users\%USERPROFILE%\.virtualenvs
%USERPROFILE%はユーザー名です。
ここにディレクトリ名を先頭にして並んでいます。
[プロジェクトのディレクトリ名]-[hash]
どこかでみたことある構成・・・。
pipenvでできた仮想環境を呼び出す。
仮想環境にインストールしたパッケージに依存したファイルを実行するには、仮想環境のshellを呼び出す必要があります。
venvではactivateを呼び出す必要がありました。pipenvではコマンドが用意されています。
# 仮想環境のShell呼び出し
pipenv shell
# Pythonの呼び出し
python hoge.py
まとめ
- Python開発で意識しなければならない環境は3つだ
- 開発マシンのPython本体はpyenvで管理する
- 仮想環境とはPython本体と前提になるライブラリを含み、pipenvで構成する
- venvはpipenvに内蔵されているため、利用しない
- Pipfileでライブラリを管理する
以上がPythonの仮想環境の構築方法です。