Pythonの仮想環境
Node.jsからPythonを触ることが多くなった最近ですが、みなさんPythonのパッケージ管理ってどうしてますか?
何でもかんでもグローバルにインストールして収集つかなくなったり、複数で作業するとき開発環境をコピーしたりって、
ぶっちゃけ面倒くさくないですか?(思いますよね?)
Node.jsのエコシステムに慣れてしまったせいか、git clone
してnpm install
を叩けば依存パッケージを解決してくれて、、
みたいなお手軽感から抜け出せずにおります。
そこで今回は、Node.js並みにPythonのパッケージ管理を簡単にやる方法を考えよう!です。
外せない要件は以下とします。
- パッケージのメタデータは(ほぼ)自動で管理してくれる
- パッケージはコピー先で一括インストールできる
前提
OS: Mac OS Big Sur
Python: 3.9.5 (pyenv使ってるので何でも)
仮想環境の選定
まあメジャーどころを。。
-
- Python 3.3から標準装備
- すぐ使える
-
- Anacondaをインストールする必要がある
- オマケ感が否めない
-
- サードパーティ製なので要インストール
- Python3.3でvenvとして標準機能に取り込まれた
というわけで、「venv」一択です。
やってみよう
-
仮想環境の作成
- プロジェクトディレクトリ直下にenviron_nameディレクトリができます
$ mkdir project_name $ cd project_name $ python -m venv environ_name
-
アクティベート
source envrion_name/bin/activaate
-
作成した仮想環境にパッケージをインストール
-
今回は試しに
superjson
をインストール(datetime
なんかをシリアライズ化くれるやつ) -
なお、アクティベートするとプロンプトの先頭に環境名が表示されます
(environ_name) project_name $ pip install superjson
-
-
仮想環境にインストールされてるパッケージの確認
(environ_name) project_name $ pip freeze superjson==0.0.13
-
パッケージ一覧を書き出す
(environ_name) project_name $ pip freeze > requirements.txt
-
仮想環境を停止する
(environ_name) project_name $ deactivate
作成した仮想環境を再現する
今回はGitHubからクローン来ることを想定
-
別プロジェクトを作成
$ mkdir new_project $ cd new_project $ git clone ... # 割愛
-
新たに仮想環境を作ってパッケージをインストール
(new_environ) new_project $ pip install -r requirements.txt
-
インストールされたか確認
(new_environ) new_project $ pip freeze superjson==0.0.13
お、なんかいい感じでじゃないでしょうか。。ご参考までに。