はじめに
こちらの記事でも紹介しましたが。Pythonの仮想環境やパッケージ管理は様々なツールが乱立しており、2021年のAnaconda有料化以降その傾向がさらに増したと感じています。
初学者がPythonを始める際にまず戸惑うのがこの環境構築部分だと思うので、その指針となるようOSごとにベストな環境を検討し、ベストプラクティスと呼べる記事を目指したいと思います。
より良い記事を目指したいので、間違いや抜け漏れ等ありましたら、コメントで指摘頂けますと幸いです!
前提条件
以下の条件のもとでの環境構築を記事の対象とします。
- エディタはVisual Studio Codeを使用
- 商用無料のツールに限る (Anacondaは対象外)
- OSは①Windows, ②Mac(M1/M2), ③Linux(Ubuntu等)の3種類を対象とする(Intel Macは扱わない)
- DockerはPythonに限定されない仮想化手法のため、本記事では扱わない
また、Pythonにおける「パッケージ」は「ライブラリ」と呼ばれる事も多いですが、本記事では「パッケージ」表記に統一します。
まとめ
いきなり結論から述べますが、以下3種類の方法の中から、用途やOSに応じて使い分けるのが良いかと思います
1.pyenv + venv | 2.pyenv + Poetry | 3.Conda + conda-forge | |
---|---|---|---|
導入の手軽さ | ◎ (venvはデフォルトインストール済) |
◯ (コマンドでインストール可) |
× (リポジトリの指定等がやや複雑) |
学習の手軽さ | × (pyenvとvenvの学習が必要) |
× (pyenvとPoetryの学習が必要) |
◯ (condaコマンドのみ学習でOK) |
パッケージ依存関係の解決 | × | ◯ | ◯ |
Windowsおすすめ | ◯ (本番環境との親和性重視 =Web開発向き) |
◯ (バランス重視) |
◯ (操作の簡単さ重視) |
Macおすすめ (M1/M2) |
◯ (非対応の機械学習パッケージあり) |
◯ (非対応の機械学習パッケージあり) |
◎ (M1/M2 Macへの対応が早い) |
Linuxおすすめ | ◎ (シンプルさ重視) |
◯ (依存関係の解決重視) |
◯ (Macと共通化したい場合) |
※おすすめの基準には上記「導入の手軽さ」「学習の手軽さ」「パッケージ依存関係の解決」以外に、「対象OSとの相性」「検索による情報の見つかりやすさ」を考慮しています。詳しくは後述します
筆者の主観が入りますが、概ね以下のフローチャートのように選択すると良いかと思います (詳しくは後述します)
なお、実用上ハマりやすいプロキシ環境での使用方法についても、以下の記事に別途まとめました
必要知識
ここから先は、Pythonのパッケージ管理が何をやっているかを解説します。
「御託はいいから早く使いたい!」という方は、「3種類の方法比較」の項目まで飛んでください
まず、一般的に「パッケージ管理」と呼ばれている要素を、以下の4つの機能に分割して考える必要があります。
A. インタプリタ切替 (Pythonのバージョンを切り替える)
B. パッケージ切替 (パッケージのバージョンを切り替える)
C. パッケージインストール (パッケージをインストールする)
D. リポジトリ (パッケージのインストール元)
一般的に「パッケージ管理ツール」と呼ばれているものは、上記機能の一部のみをカバーしているため、全ての機能を実現するためには複数のツールを組み合わせる必要があります。
それぞれの機能について紹介を進めます。
A.インタプリタ切替
Pythonには複数のバージョンが存在します。
Python公式ホームページからは3.11.1
や3.9.16
のように多くのバージョンがダウンロードできますが、ここでどのバージョンを選ぶかで、対応OSやパッケージ、コードの挙動等に差が生じる事があるため、システム開発時には明示的に指定する事が求められます。
このようなPython本体のバージョンの切替を「インタプリタ切替」と呼び、以下のようなツールで実現できます
・主なインタプリタ切替ツール
ツール名称 | 概要 |
---|---|
pyenv | 古くから用いられており、情報が多い |
pyenv-virtualenv | 同一バージョンのインタープリタ環境を複数準備できる (操作が複雑なため本記事では紹介せず) |
Conda | 後述の「B.パッケージ切替」「C.パッケージインストール」を同一ツールで実現できる |
なお、こちらの記事で紹介されているように、Windowsでは複数バージョンのPythonのexeファイルを各々インストールすればインタプリタ切替を実現できるので、pyenv等のインタプリタ切替ツールは基本的に不要です (3.7.6と3.7.7のように最下位のマイクロバージョンのみ異なるインタプリタを両方インストールしたい場合pyenvが必要となりますが、レアケースだと思います)
またMacやLinuxであっても、Pythonのバージョンを変える必要がない場合、pyenv等のインタプリタ切替ツールは不要です。こちらの方が運用はシンプルになるでしょう
B.パッケージ切替
パッケージ(ライブラリ)のバージョンを管理します。
一般的に「仮想環境」と呼ばれているものは、「A. インタプリタ切替」「B.パッケージ切替」を併せて、Pythonのバージョンとパッケージのバージョンを変えた環境を複数作成することを指します。
パッケージ切替には、主に以下のツールを活用できます
・主なパッケージ切替ツール
ツール名称 | 概要 |
---|---|
venv | Pythonにデフォルトで入っている |
Pipenv | 「C.パッケージインストール」機能も兼ねる&依存関係の管理 |
Poetry | Pipenvとほぼ同機能だが、後発でよりモダンな構成となっている |
Conda | 「A.インタプリタ切替」「C.パッケージインストール」を同一ツールで実現できる |
なおPipenvとPoetryは機能が似通っておりますが、以下のGithubスターの推移からも分かる通り、後発のPoetryの普及が進んでいるため、本記事ではPipenvは取り扱わない事とします(Pipenvの使用法はこちらの記事を参照ください)
C.パッケージインストール
「D.リポジトリ」からパッケージをローカル側にダウンロードしてインストールする機能です。
・主なパッケージインストールツール
ツール名称 | 概要 |
---|---|
pip | Pythonにデフォルトで入っている。本番環境(Docker)では殆どの場合これが使用される |
Pipenv | 「B.パッケージ切替」機能も兼ねる&依存関係の管理 |
Poetry | Pipenvとほぼ同機能だが、後発でよりモダンな構成となっている |
Conda | 「B.パッケージ切替」「C.パッケージインストール」を同一ツールで実現できる |
「B.パッケージ切替」と似通ったツール構成となっていますが、1番目のpipを選択した場合のみツールが別となります (とはいえpipもvenvもPythonにデフォルトで含まれているため、インストールは不要)
なお、パッケージのインストール元は「D.リポジトリ」に依存するため、同じツールで同じコマンドでインストールを実行したとしても、「D.リポジトリ」が異なるとインストールされるパッケージのバージョンは変わることにご注意ください。
D.リポジトリ
こちらはツールというよりデータ取得元の話となりますが、Pythonの各種パッケージをインストールするためには、インストール元となるインターネット上のデータ格納場所(リポジトリ)が必要となります。
知識として抜けがちな要素ですが、Mac (M1/M2)での環境構築や、Condaにおける有料化回避において非常に重要な知識となります。
・主なリポジトリ
名称 | 「C.パッケージインストール」との関係 | 概要 |
---|---|---|
PyPI | pip, Poetryがデフォルトで使用 | 誰でも自由にアップロードできる無料リポジトリ |
(Anaconda) | Anaconda, Minicondaがデフォルトで使用 | Anaconda社が管理する有料リポジトリ |
conda-forge | Miniforgeがデフォルトで使用 | 一般ユーザコミュニティが管理する無料リポジトリ(参考) |
それぞれ簡単に解説します
・PyPIリポジトリ
PyPIリポジトリはこちらの記事で紹介したように、誰でもアップロードできる門戸が広く設定されたリポジトリと呼べ、pipやPoetryでデフォルト使用されている事から、最も広く活用されています。
よって
- 最新のバージョンがいち早く反映される
- 対応しているパッケージの種類が多い
- 将来的に本番環境への移植を想定する場合、リポジトリを揃えられる(Docker等では基本的に運用がシンプルなPyPIリポジトリを利用するケースが多い)
等のメリットがありますが、自由であるために管理が行き届かないケースも多く、不具合や特定の環境で動作しないバージョンのパッケージがインストールされてしまうリスクもあります。
とはいえWindowsやLinuxでメジャーどころのパッケージをインストールする場合、このような不具合情報が迅速に共有されて修正される事が多いので、基本的にはPyPIを採用するケースが多いです。
一方で注意すべきはM1/M2 Mac (Apple Silicon)で、CPUのアーキテクチャ(arm64)が最大手のIntel/AMD勢(amd64)と大きく異なるため、こちらの記事で紹介したようにamd64用に準備されたバージョンのパッケージが動かないケースも多く、パッケージ側の対応も遅れがちです。このケースではApple Siliconへの対応が早いconda-forgeリポジトリがおすすめです
・Anacondaリポジトリ
Anaconda社が管理するリポジトリで、Anaconda社の選んだ安定したバージョンのパッケージを選んでインストールしてくれるため、PyPIリポジトリよりも不具合発生リスクが低い(ただし、最新バージョンの反映は遅い)ですが、2021年より商用利用が有料化されています。
なお、Anacondaよりもパッケージ数を絞ったMinicondaという構成も存在します(下図参照)
・conda-forgeリポジトリ
Anacondaリポジトリと近い (パッケージ構成が上述のMinicondaに近い)ですが、こちらは企業ではなくオープンソースコミュニティが管理しているリポジトリのため、無料で使用できます。
他の機能(前述のA〜C)でCondaを利用しつつAnacondaの有料化を回避するためには、デフォルトのリポジトリをconda-forgeに切り替える事が必要となります。(後述)
また特筆すべきはApple Siliconへの対応の早さで、前述のPyPIにおけるApple Siliconでの不具合の多さを鑑みると、M1/M2 Macではconda-forgeリポジトリが第一の選択肢となるかと思います。
冒頭で紹介した3方法で使用しているツール
ここまで「A. インタプリタ切替」「B. パッケージ切替」「C. パッケージインストール」「D. リポジトリ」の4機能の概要と使用ツールについて解説しました。
冒頭で紹介した3種類の方法では、それぞれどのツールを利用しているかを以下にまとめました。
1.pyenv + venv | 2.pyenv + Poetry | 3. Conda + conda-forge | |
---|---|---|---|
A.インタープリタ切替 | pyenv | pyenv | Conda |
B.パッケージ切替 | venv | Poetry | Conda |
C.パッケージインストール | pip | Poetry | Conda |
D.リポジトリ | PyPI | PyPI | conda-forge |
venvと比べてPoetryの方が、Poetryと比べてCondaの方が使用するツールの数が減り、管理が統一化できる事が分かります。
3種類の方法比較
冒頭のまとめで3種類の方法を紹介しましたが、具体的にどのように選択するかを解説します
選択フローチャート
筆者の主観が入りますが、概ね以下のようなフローで選択すると、OSや用途に適したパッケージ管理構成を実現できるかと思います (インタプリタ切替に関してはこちらの記事を参考にさせて頂きました)
Windowsの場合
Windowsはどの方法でもパッケージ管理ができ、いずれの方法もよく利用されているためGoogle検索で情報も得やすいです。
以下のメリット・デメリットを鑑みて、用途に応じて選択するのが良いかと思います
(なお、前述のようにWindowsではpyenvは使用しない事にご注意ください)
1.venv | 2.Poetry | 3.Conda + conda-forge | |
---|---|---|---|
最新バージョンのパッケージ利用 | ◎ (PyPIリポジトリ) |
◎ (PyPIリポジトリ) |
◯ (conda-forgeリポジトリの場合。PyPIリポジトリを利用すれば最新バージョンのインストールも可) |
依存関係の管理 | × | ◯ | ◯ |
パッケージインストールエラーの少なさ | × (未管理のPyPIリポジトリ) |
× (未管理のPyPIリポジトリ) |
◯ (管理されたconda-forgeリポジトリ) |
ツールの統一性 | × (venv+pipの2種類) |
◯ (Pyenvの1種類) |
◯ (Condaの1種類) |
本番環境(Docker+pip)との親和性 | ◎ (リポジトリとインストールツールを揃えられる) |
◯ (リポジトリを揃えられる) |
× (リポジトリもインストールツールも異なる) |
いずれも一長一短ですが、
- 初心者 or 管理されたリポジトリでインストールエラーを減らしたい: 「3.Conda + conda-forge」
- 最新バージョンを使いたい or 本番環境への移植も想定したい: 「2.Poetry」
- 本番環境との親和性最優先: 「1.venv」
のように使い分けるのがおすすめです。
迷ったら、以下がおすすめです
Web開発: 「1.Conda + conda-forge」 (@shibukawa さんのコメントより)
数値計算・機械学習: 「3.Conda + conda-forge」(筆者の過去の経験上、PyPIで最新版に上げるとnumpy等の数値計算パッケージでエラーが出る事が多かったので、安定版の提供を重視したconda-forgeリポジトリの方が試行錯誤なく使いやすいと感じています)
またインタプリタ切替が必要であれば、「1. pyenv + venv」「2.pyenv + Poetry」はインタプリタ用(pyenv)とパッケージ切替用(venv, Poetry)の2種類の仮想環境を使い分ける必要があり、操作がやや煩雑です。Condaは仮想環境を1種類に統一できるので、その分管理がシンプルになります。
※なお、Windows環境でWSLやDockerを使用する場合、内部のOSは基本的にLinuxとなるため、「Linuxの場合」を参照ください
Mac (M1/M2)の場合
前述のように、M1/M2 Mac (Apple Silicon)ではPyPIリポジトリによるインストールでは不具合が出るケースが多いため、基本的にはconda-forgeリポジトリを簡単に利用できる「3.Conda + conda-forge」がおすすめです
※なお、M1/M2 Mac環境でDockerを使用する場合、コンテナ内のOSは基本的にLinuxとなるため、「Linuxの場合」を参照ください
※直近の対応状況
@shibukawa さんのコメントによると、2023/3現在メジャーなパッケージのApple Siliconネイティブ対応もかなり進んで来ており、特にWeb系で利用するパッケージは基本的にPyPIからのインストールでもエラーの発生は稀で、「1.pyenv + venv」「2.pyenv + Poetry」でも問題なく利用できるそうです
一部の機械学習パッケージ (LightGBM, TensorFlow, PyTorch)はまだconda-forgeからインストールする必要があるようなので、機械学習用途を想定するのであれば「3.Conda + conda-forge」を使用した方が良さそうです
Linuxの場合
Windowsの場合と選択肢は似ていますが、本番環境を想定した運用が多いことや、PoetryやCondaの活用例の少なさを考慮すると、Windowsと比べ「1.pyenv + venv」の優位性が高まると考えています。
(なお、Windowsの場合と異なり、1, 2の方法でインタプリタ切替を実現したい場合pyenvのインストールが必要となる事にご注意ください)
また、Linux環境での使用率が高いDockerとの相性も、追加ツールのインストールが不要でDockerfile等の構成をシンプルにできる「1.pyenv + venv」に分があると言えそうです
1.pyenv + venv | 2.pyenv + Poetry | 3.Conda + conda-forge | |
---|---|---|---|
最新バージョンのパッケージ利用 | ◎ (PyPIリポジトリ) |
◎ (PyPIリポジトリ) |
◯ (conda-forgeリポジトリの場合。PyPIリポジトリを利用すれば最新バージョンのインストールも可) |
依存関係の管理 | × | ◯ | ◯ |
パッケージインストールエラーの少なさ | × (未管理のPyPIリポジトリ) |
× (未管理のPyPIリポジトリ) |
◯ (管理されたconda-forgeリポジトリ) |
ツールの統一性 | × (pyenv+venv+pipの3種類) |
◯ (pyenv+Poetryの2種類) |
◎ (Condaの1種類) |
本番環境(Docker+pip)との親和性 | ◎ (リポジトリとインストールツールを揃えられる) |
◯ (リポジトリを揃えられる) |
× (リポジトリもインストールツールも異なる) |
検索性 | ◯ (活用例多い) |
× (活用例少ない) |
× (活用例少ない) |
インストールツールの少なさ | ◎ (pyenv, インタプリタ切替が不要ならなし) |
× (pyenv+Poetry, インタプリタ切替が不要ならPoetryのみ) |
◯ (Conda) |
Linuxは共用環境やテスト環境として使われる事が多いという特性上、「余計なツールは入れたくない」「本番環境に近づけたい」という需要が高いと考察されます。追加でインストールが必要な「2.Poetry」や「3.Conda」よりも、デフォルトでインストールされている「1.venv」の方がこの用途にマッチしていると言えるでしょう。(Linux環境で開発した成果物は本番用のDockerに移植するケースも多く、その際にrequirements.txtを流用できる事も、Linuxで1.venvを利用するメリットとなりそうです)
あくまで分析等のアドホックな用途に絞る場合や、M1/M2 Macと環境を統一化したい場合(こちらの方が記事にされています)は、「2.Poetry」や「3.Conda」も選択肢に入るかと思います
またTensorflowやPyTorch等の深層学習フレームワークを使用する場合、公式でもCondaによる依存パッケージのインストールを推奨しているので、これらのライブラリを使用する場合は本番環境との親和性の観点でも「3.Conda」を利用しても良いかと思います。
実践
先ほど紹介した3つの方法でパッケージ管理を実践する方法を紹介します。
(各方法へは以下リンクからも飛べます)
基本的な流れ
基本コンセプトとして、プロジェクトごとに仮想環境を作成してパッケージを使い分け、不要になったら仮想環境を削除してベースのPython環境は綺麗な状態を保つ事が望ましいです。
上記のコンセプトに従い、以下の流れで開発環境 (パッケージ管理環境)を構築します
①必要ツールのインストール (最初の1回のみ)
②仮想環境作成
③仮想環境にパッケージをインストール
④エディタに仮想環境を紐付ける
なお、コマンドはWindowsの場合PowerShellまたはコマンドプロンプト、Macの場合はターミナル(zsh)、Linuxの場合はターミナル(bash)で実行する事を前提とします。
事前準備
Pythonの環境を構築する前に、以下の記事を参考に開発に必要なVSCodeをインストールしてください
1. pyenv + venv
「1. pyenv + venv」による具体的なパッケージ管理手順を解説します
①必要ツールのインストール
Windows, Mac, Linuxの場合それぞれインストール方法を解説します
(前述のようにM1/M2 Macではvenvは非推奨ですが、インストール方法の紹介はします)
Windowsの場合
前述のようにpyenvはインストール不要なので、以下のみをインストールします
- インタプリタ切替: Pythonのexeファイルをインストール
・Pythonのexeファイルをインストール
Python公式から、必要なバージョンのPythonのexeファイルをダウンロードしてインストールします。
exeファイルを開いたら以下のInstall Now
を押し、指示に従って進めばOKです。
なお、2023年時点のWindows Pythonインストーラは「Pythonランチャ」という複数バージョン切替機能が追加されているため、「Add python.exe to PATH」のチェックは不要です(参考)
複数のPythonバージョン(インタプリタ)を使い分けたい場合、複数のexeファイルをインストールすればOKです。
インストール済のPythonバージョン一覧は以下コマンドで表示できます。
py -0p
M1/M2 Macの場合
前述のようにM1/M2 Macでvenv (というよりPyPIリポジトリ)の利用は推奨しませんが、以下をインストールする事で使用自体は可能です
- インタプリタ切替: pyenvをインストール
また前述のように、Pythonのバージョンを変える必要がない場合pyenvは不要なので、インストールするかは適宜選択してください
・pyenvのインストール
こちらを参考にインストールを進めます。
まず、以下コマンドでHomebrewを使用してpyenvをインストールします
brew update
brew install pyenv
以下コマンドで、pyenvのバージョンを確認します
pyenv -v
※pyenvへのパスの通し方
以下操作でpyenvにパスを通し、スタートアップ時からpyenvが適用されるようにできます
以下コマンドでシェルの種類を確認します
echo $SHELL
/bin/zsh
のように表示されればシェルはzsh、/bin/bash
のように表示されればシェルはbasyです。最新版のMacOSであれば基本的にはzshのはずなので、その前提で操作を進めます。
以下コマンドでpyenvの設定がシェルに適用されます
eval "$(pyenv init -)"
以下コマンドでスタートアップ設定 (~/.zshrc)にパスを通す事もできます
(M1/M2 Macではpyenvをメインで使用しない方が良いので、本操作は基本的に実施しない方が良いでしょう)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.zshrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.zshrc
echo 'eval "$(pyenv init -)"' >> ~/.zshrc
Linux(Ubuntu)の場合
以下をインストールする必要があります
- インタプリタ切替: pyenvをインストール
なお前述のように、Pythonのバージョンを変える必要がない場合pyenvは不要なので、インストールするかは適宜選択してください
・pyenvのインストール
こちらを参考にインストールを進めます。
まず、以下コマンドでpyenvをGitHubからダウンロードします。
git clone https://github.com/pyenv/pyenv.git ~/.pyenv
※pyenvへパスを通す
以下コマンドでpyenvにパスを通し、スタートアップ時からpyenvが適用されるようにします
(pyenvをメインで使用したくない場合は本操作は不要です)
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
②仮想環境作成
プロジェクトに紐づいた仮想環境を作成します。
プロジェクト用フォルダの作成
エクスプローラやFinder、mkdirコマンド等で、下図のような感じで環境構築したいフォルダ(プロジェクト用のディレクトリ)を準備しておきます
作成したフォルダに以下コマンドで飛び、以降の操作を進めます
cd 作成したプロジェクト用フォルダのパス
pyenvでインタプリタ切替
※pyenvを使用しない場合 (Windows使用時 or Pythonのバージョン切替が不要な場合)、本作業は不要です。「・Pythonバージョンの確認」に飛んで下さい
以下コマンドで、pyenvでインストールできるPythonのバージョンを確認します
pyenv install -l
表示されたバージョンの中から、インストールしたいバージョンのインタプリタを選択し、以下コマンドでインストールします (既に欲しいバージョンをインストール済の場合は不要)
pyenv install バージョン名
例えば3.11.1をインストールしたい場合、以下コマンドでインストールします
pyenv install 3.11.1
インストール済のバージョンは、以下コマンドで確認できます
pyenv versions
以下コマンドで、プロジェクト用フォルダにPythonバージョンを反映します(参考)
(事前にcd プロジェクト用フォルダのパス
コマンドで該当ディレクトリに移動してください)
pyenv local バージョン名
以下コマンドで反映したバージョンが表示されれば成功です
pyenv version
Pythonバージョンの確認
以下コマンドで該当フォルダの環境を表示し、目当てのPythonバージョンが表示されることを確認します
cd プロジェクト用フォルダのパス
python --version
なお、インタプリタ切替を実施したのにうまくバージョンが反映されない (システムデフォルトのPythonバージョン等が表示される)場合、基本的にはPythonのexeやpyenvにパスが通っていない事が原因の事が多いので、OS毎に以下を参考にしてください
・Windowsの場合
以下コマンドでインストールされているPythonバージョンの一覧を表示します
py -0p
-V:3.11 * C:\Users\ユーザ名\AppData\Local\Programs\Python\Python311\python.exe
-V:3.10 C:\Users\ユーザ名\AppData\Local\Programs\Python\Python310\python.exe
後ほどvenvで仮想環境作成する際のpython -m venv [新しい環境名]
というコマンドを、py -バージョン名 venv [新しい環境名]
のように変える事で、パスが通っていなくとも以降の操作を実行できます。
例えば3.10を使用したい場合
py -3.10 -m venv [新しい環境名]
となります
※ @natsuriver さんにコメント頂きましたが、
~\AppData\Local\Programs\Python\Python310\python.exe -m venv --upgrade-deps [新しい環境名]
のようにインタプリタのexeファイルをフルパス指定しても、同様の操作を実現できるようです。
・M1/M2 Macの場合
前述のようにeval "$(pyenv init -)"
コマンドでシェルにpyenvのパスを適用します
・Linuxの場合
pyenvへパスを通すを実施したのち、再起動してください。
venvで仮想環境作成
venvでパッケージ切替用の仮想環境を作成します。
以下コマンドで、プロジェクト用フォルダ内に仮想環境を作成します。「新しい環境名」は自由命名でOKです
cd プロジェクト用フォルダのパス
python -m venv [新しい環境名]
Windosの場合は前述のように以下コマンドで実行します
cd プロジェクト用フォルダのパス
py -バージョン名 venv [新しい環境名]
以下のように作成した仮想環境用のフォルダが生成します
③仮想環境にパッケージをインストール
作成した仮想環境にパッケージをインストールします
仮想環境のアクティベート
パッケージのインストール前に、対象の仮想環境を有効化します
OSに応じて以下のコマンドで仮想環境をアクティベートできます
Linux/Macの場合: source [環境名]/bin/activate
Windows(コマンドプロンプト)の場合: [環境名]\Scripts\activate.bat
下記のようにアクティベートした環境名がシェルの最初にカッコ表示されれば成功です
(環境名) [カレントフォルダ名]>
deactivate
コマンドで、仮想環境を終了(デアクティベート)できます
(環境名) [カレントフォルダ名]> deactivate
※ちなみにPowerShellでアクティベートコマンドを実行すると、「このシステムではスクリプトの実行が無効になっているため、‥を読み込むことができません」というようなエラーが出ることがあります。
こちらのリンクのように、 PowerShell のスクリプトの実行が実行ポリシーによって許可されていないことが原因なので、最初の1回のみ
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
としてあげれば、スクリプトの実行が有効となり、
[環境名]\Scripts\activate.ps1
としてあげれば、アクティベートされます
・パッケージのインストール
※仮想環境をアクティベートした状態からスタートしてください
下記のようにpip install [パッケージ名]
で、パッケージをインストールできます
pip install パッケージ名
例えばpandasをインストールしたい場合は以下のようになります
pip install pandas
pip list
で、インストールされているパッケージのバージョンが確認できます
(環境名) >pip list
Package Version
--------------- -------
numpy 1.19.4
pandas 1.1.4
pip 20.2.1
python-dateutil 2.8.1
pytz 2020.4
setuptools 49.2.1
six 1.15.0
④エディタに仮想環境を紐付ける
作成した仮想環境をエディタ(VSCode)に紐付けます
まずVSCodeで以下のようにプロジェクト用フォルダを開きます
以下のように適当な.pyファイルを作成し、右下のpythonバージョンをクリックしたのち、venvで作成済の仮想環境を選択します
※作成した仮想環境がリストに見当たらない場合、Enter interpreter path
をクリックして仮想環境フォルダ内のpython.exeのパスを指定します
【参考】その他pyenvの便利なコマンド
上で紹介したもの以外に、pyenvでよく使うコマンドを参考に記載します
インストール済のバージョン一覧
繰り返しとなりますが、pyenvでインストール済のPythonバージョン一覧は以下で表示できます
pyenv versions
インストール済のPythonバージョンの削除
インストール済のPythonバージョンは以下で削除できます (バージョン名はすぐ上のpyenv versions
で確認)
pyenv uninstall バージョン名
pyenvのアンインストール
・Macの場合
前述のようにHomebrewでインストールしていれば、以下コマンドでアンインストールできます
brew uninstall pyenv
pyenvへパスを通している場合、.zshrcからも該当する3行を忘れずに削除してください
・Linuxの場合
以下コマンドで、pyenvのルートフォルダを確認します (恐らく$HOME/.pyenv
となっているはずです)
printenv PYENV_ROOT
以下コマンドで、ルートフォルダを削除すればpyenvがアンインストールされます
rm -rf pyenvのルートフォルダ
pyenvへパスを通している場合、.bashrcからも該当する3行を忘れずに削除してください
【参考】その他venvの便利なコマンド
venvでよく使うコマンドを参考に記載します
仮想環境のコピー
仮想環境をアクティベートした状態から下記コマンドで、パッケージ構成をrequirements.txtに出力できます。
(環境名1) >python -m pip freeze > requirements.txt
このテキストファイル内に、インストールされているパッケージ一覧が記載されています
numpy==1.19.4
pandas==1.1.4
python-dateutil==2.8.1
pytz==2020.4
six==1.15.0
このテキストファイルを他のプロジェクトフォルダに移し、別の仮想環境を作成・アクティベートしたのち下記コマンドを打つと、該当するパッケージ全てをまとめてインストールしてくれます
(環境名2) >python -m pip install -r requirements.txt
チーム内でパッケージを共通化したい場合に便利ですね!
ちなみに、仮想環境に入らずに同様のコマンドを実行すると、デフォルト環境にrequirements.txtに記載されたパッケージをまとめてインストールしてくれます。
バージョンを指定してパッケージをインストール
以下のようにバージョンを指定してパッケージをインストールできます
pip install numpy==1.19.3
パッケージのアンインストール
以下コマンドでパッケージをアンインストールできます。
pip uninstall パッケージ名
仮想環境の初期化
デアクティベートした状態で、下記コマンドで初期化できます
python -m venv --clear [環境名]
仮想環境の削除
デアクティベートした状態で、仮想環境のフォルダを丸ごと削除するだけでOKです。
エクスプローラで仮想環境のフォルダを削除 (Mac, Linuxではrm -rf
コマンド)するか、
PowerShellで環境の存在するディレクトリに移動して下記コマンドを実行します
Remove-Item [環境名] -Recurse -Force
2.pyenv + Poetry
「2.pyenv + Poetry」による具体的なパッケージ管理手順を解説します
①必要ツールのインストール
Windows, Mac, Linuxの場合それぞれインストール方法を解説します
(前述のようにM1/M2 MacではPoetryは非推奨ですが、インストール方法の紹介はします)
なお、公式によるとPoetryはPython3.7以上のみ対応しているようです
Windowsの場合
前述のようにpyenvはインストール不要であり、以下をインストールする必要があります
- インタプリタ切替: Pythonのexeファイルをインストール
- パッケージ切替: Poetryをインストール
・Pythonのexeファイルをインストール
1.pyenv + venvの場合と同様なので、こちらを参照ください
・Poetryのインストール
こちらの公式ホームページの方法に則り、インストールを進めます。
PowerShellから以下コマンドでPoetryをインストールできます
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py -
上記コマンドを実行すると、途中で
To get started you need Poetry's bin directory (C:\Users\ユーザ名\AppData\Roaming\Python\Scripts) in your `PATH`
environment variable.`
のような、「パスを追加してください」的なメッセージが表示されるので、
環境変数設定(参考)のPathに以下のようにC:\Users\ユーザ名\AppData\Roaming\Python\Scripts
の部分を追加してください
以下コマンドでPoetryのバージョンが表示されれば成功です
poetry -V
M1/M2 Macの場合
前述のようにM1/M2 MacでPoetry (というよりPyPIリポジトリ)の利用は推奨しませんが、使用時は以下をインストールする必要があります
- インタプリタ切替: pyenvをインストール
- パッケージ切替: Poetryをインストール
また前述のように、Pythonのバージョンを変える必要がない場合pyenvは不要なので、インストールするかは適宜選択してください
・pyenvのインストール
1.pyenv + venvの場合と同様なので、こちらを参照ください
・Poetryのインストール
以下コマンドでHomebrewからインストールできます
brew install poetry
以下コマンドでPoetryのバージョンが表示されれば成功です
poetry -V
Linux(Ubuntu)の場合
以下をインストールする必要があります
- インタプリタ切替: pyenvをインストール
なお前述のように、Pythonのバージョンを変える必要がない場合pyenvは不要なので、インストールするかは適宜選択してください
・pyenvのインストール
1.pyenv + venvの場合と同様なので、こちらを参照ください
・Poetryのインストール
こちらの公式ホームページの方法に則り、インストールを進めます。
以下コマンドでPoetryをインストールできます
curl -sSL https://install.python-poetry.org | python3 -
なお、curlをインストールしていない場合以下コマンドでインストールしてください
Debian系 (Ubuntu, RaspberryPi等)の場合: sudo apt install curl
RedHat系 (RHEL, Amazon Linux等)の場合: sudo yum install curl
以下コマンドでPoetryのバージョンが表示されれば成功です
poetry -V
②仮想環境作成
プロジェクトに紐づいた仮想環境を作成します。
プロジェクト用フォルダの作成
「1.pyenv + venv」ではプロジェクト用フォルダを手動で作成しましたが、Poetry使用時はPoetryコマンドで作成すると、この後の操作がやりやすくなります。
以下コマンドで、プロジェクト用フォルダを作成します
cd プロジェクト用フォルダの上位フォルダのパス
poetry new プロジェクト用フォルダ名
以下のようにプロジェクト用フォルダが生成します
poetry-demo
├── pyproject.toml
├── README.rst
├── poetry_demo
│ └── __init__.py
└── tests
├── __init__.py
└── test_poetry_demo.py
詳細は後述しますが、構成内のpyproject.toml
を編集する事で、プロジェクト内のPythonやパッケージのバージョン管理、依存関係管理を実施する事ができ、Poetryにおけるパッケージ管理の中心となるファイルと言えます。
また、以下コマンドで既存のフォルダをプロジェクト用フォルダとして初期化する事もできます。
cd プロジェクト用フォルダのパス
poetry init
作成したフォルダに以下コマンドで飛び、以降の操作を進めます
cd 作成したプロジェクト用フォルダのパス
pyenvでインタプリタ切替
※pyenvを使用しない場合 (Windows使用時 or Pythonのバージョン切替が不要な場合)、本作業は不要です。「・Pythonバージョンの確認」に飛んで下さい
以下コマンドで、pyenvでインストールできるPythonのバージョンを確認します
pyenv install -l
表示されたバージョンの中から、インストールしたいバージョンのインタプリタを選択し、以下コマンドでインストールします (既に欲しいバージョンをインストール済の場合は不要)
pyenv install バージョン名
例えば3.11.1をインストールしたい場合、以下コマンドでインストールします
pyenv install 3.11.1
インストール済のバージョンは、以下コマンドで確認できます
pyenv versions
以下コマンドで、プロジェクト用フォルダにPythonバージョンを反映します(参考)
(事前にcd プロジェクト用フォルダのパス
コマンドで該当ディレクトリに移動してください)
pyenv local バージョン名
以下コマンドで反映したバージョンが表示されれば成功です
pyenv version
Pythonバージョンの確認
以下コマンドで該当フォルダの環境を表示し、目当てのPythonバージョンが表示されることを確認します
cd プロジェクト用フォルダのパス
python --version
なお、インタプリタ切替を実施したのにうまくバージョンが反映されない (システムデフォルトのPythonバージョン等が表示される)場合、基本的にはPythonのexeやpyenvにパスが通っていない事が原因の事が多いので、OS毎に以下を参考にしてください
・Windowsの場合
以下コマンドでインストールされているPythonバージョンの一覧を表示します
py -0p
-V:3.11 * C:\Users\ユーザ名\AppData\Local\Programs\Python\Python311\python.exe
-V:3.10 C:\Users\ユーザ名\AppData\Local\Programs\Python\Python310\python.exe
後ほどPoetryで仮想環境作成する際に、右側に記載されたC:\Users\ユーザ名\AppData\Local\Programs\Python\Python310\python.exe
のようなpython.exeのフルパスを使用するので、メモしておいてください
・M1/M2 Macの場合
前述のようにeval "$(pyenv init -)"
コマンドでシェルにpyenvのパスを適用します
・Linuxの場合
pyenvへパスを通すを実施したのち、再起動してください。
Poetryで仮想環境作成
Poetryのpoetry env
コマンドで、仮想環境を作成します。
前準備として、pyproject.tomlを修正する必要があります。
pyproject.tomlはデフォルトでは以下のようになっています
[tool.poetry]
name = "プロジェクト名"
version = "0.1.0"
description = ""
authors = メールアドレス等が記載される
readme = "README.md"
packages = [{include = "プロジェクト名"}]
[tool.poetry.dependencies]
python = "^3.11"
[build-system]
requires = ["poetry-core"]
build-backend = "poetry.core.masonry.api"
上記のpython = "^3.11"
の部分は、「3.11以上」を表しており、3.10のようなより低いバージョンのPythonがインストールできなくなっています。
低いバージョン、例えば3.10をインストールしたい場合、python = "^3.10"
のように修正してください。
上記pyproject.tomlを正しく設定できたら、以下コマンドでインタプリタ切替用の環境を作成します
poetry env use pythonのバージョン
例えばpython3.10を使用したい場合、以下のように指定します
poetry env use python3.10
Windowsの場合は、以下のように該当する前述のpython.exeのフルパスを指定する必要があります
poetry env use C:\Users\ユーザ名\AppData\Local\Programs\Python\Python310\python.exe
③仮想環境にパッケージをインストール
作成した仮想環境にパッケージをインストールします
仮想環境のアクティベート
パッケージのインストール前に、Poetryで仮想環境を起動します
以下コマンドで、新規シェルで仮想環境を起動できます
cd プロジェクト用フォルダのパス
poetry shell
下記のようにアクティベートした環境名がシェルの最初にカッコ表示されれば成功です
(環境名) [カレントフォルダ名]>
exit
コマンドで、仮想環境を終了できます (似たコマンドにdecativate
がありますが、詳細はこちらを参照ください)
(環境名) [カレントフォルダ名]> exit
※ちなみにPowerShellでアクティベートコマンドを実行すると、「このシステムではスクリプトの実行が無効になっているため、‥を読み込むことができません」というようなエラーが出ることがあります。
こちらのリンクのように、 PowerShell のスクリプトの実行が実行ポリシーによって許可されていないことが原因なので、最初の1回のみ
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser -Force
としてあげれば、スクリプトの実行が有効となり、
poetry shell
としてあげれば、アクティベートされます
パッケージのインストール
※仮想環境をアクティベートした状態からスタートしてください
下記のようにpoetry add パッケージ名
で、パッケージをインストールできます
poetry add パッケージ名
例えばpandasをインストールしたい場合は以下のようになります
poetry add pandas
ここでインストールしたパッケージが、pyproject.tomlの[tool.poetry.dependencies]
に記載されます
抜粋
:
[tool.poetry.dependencies]
python = "^3.10"
pandas = "^1.5.2"
:
抜粋
さらに、インストール時の依存関係がpoetry.lock
に記述されます。このpyproject.toml
とpoetry.lock
の2つのファイルを組み合わせることで、環境をコピーした際にも依存関係を制御する事ができます。
# This file is automatically @generated by Poetry and should not be changed by hand.
[[package]]
name = "contourpy"
version = "1.0.6"
description = "Python library for calculating contours of 2D quadrilateral grids"
category = "main"
optional = false
python-versions = ">=3.7"
files = [
{file = "contourpy-1.0.6-cp310
:
色々と依存関係が記述される
pip list
で、インストールされているパッケージのバージョンが確認できます
(環境名) >pip list
Package Version Editable project location
--------------- ------- -------------------------------------------------
numpy 1.24.1
pandas 1.5.2
pip 22.3.1
poetry-test 0.1.0 /Users/ユーザ名/Programs/Python/Test/poetry_test
python-dateutil 2.8.2
pytz 2022.7
setuptools 65.6.3
six 1.16.0
wheel 0.38.4
poetry show
で、Poetryでインストールされたパッケージのみのバージョンが確認できます
(環境名) >poetry show
numpy 1.24.1 Fundamental package for array computing in Python
pandas 1.5.2 Powerful data structures for data analysis, time ser...
python-dateutil 2.8.2 Extensions to the standard Python datetime module
pytz 2022.7 World timezone definitions, modern and historical
six 1.16.0 Python 2 and 3 compatibility utilities
④エディタに仮想環境を紐付ける
作成した仮想環境をエディタ(VSCode)に紐付けます
まずVSCodeで以下のようにプロジェクト用フォルダを開きます
以下のように適当な.pyファイルを作成し、右下のpythonバージョンをクリックしたのち、Poetryで作成済の仮想環境を選択します
※作成した仮想環境がリストに見当たらない場合、Enter interpreter path
をクリックして仮想環境フォルダ内のpython.exeのパスを指定します
【参考】その他Poetryの便利なコマンド
Poetryの以下コマンドを覚えておくと便利です
仮想環境のコピー
前述のpyproject.tomlおよびpoetry.lockを他のフォルダにコピーすることで、仮想環境を依存関係も含めて再現する事ができます。
まずコピー先のプロジェクト用フォルダを以下コマンドで作成します (先ほどの新規作成時と同様)
cd プロジェクト用フォルダの上位フォルダのパス
poetry new プロジェクト用フォルダ名
作成したフォルダ内にコピー元のpyproject.tomlとpoetry.lockを上書き保存し、以下コマンドで依存関係も含めて仮想環境を再現する事ができます
poetry install
該当のPythonバージョンがPC内に見つからずうまく行かない場合、pyenvで該当のインタプリタを有効化してから再度トライしてください。
以下コマンドで環境をアクティベートし、Pythonスクリプト等を動かして環境をコピー出来ている事が確認できれば完了です
poetry shell
依存関係も含めて環境をコピーできるため、venvと比べてより忠実なパッケージ環境のコピーを実現できることが分かります
依存関係を無視して環境をコピー
poetry.lockをコピーせずpyproject.tomlのみをコピーしてpoetry install
コマンドを実行する事で、依存関係を無視して (pyproject.tomlに記載されているパッケージのバージョンのみ再現)パッケージ環境をコピー出来ます
パッケージのバージョン更新
以下コマンドで、pyproject.tomlに記載されている制約内でパッケージのバージョンを最新にアップデートできます。
poetry update
パッケージのアンインストール
以下コマンドでパッケージをアンインストールできます。
poetry remove パッケージ名
requirements.txtへの出力
1.venvの場合と同様、仮想環境をアクティベートした状態から下記コマンドで、パッケージ構成をrequirements.txtに出力できます。
(環境名) >poetry export -f requirements.txt --output requirements.txt
このテキストファイル内に、インストールされているパッケージ一覧が記載されています
contourpy==1.0.6
cycler==0.11.0
fonttools==4.38.0
joblib==1.2.0
kiwisolver==1.4.4
matplotlib==3.6.2
numpy==1.24.1
packaging==22.0
pandas==1.5.2
Pillow==9.3.0
# Editable install with no version control (poetry-test==0.1.0)
-e /Users/ユーザ名/Programs/Python/Test/環境名
pyparsing==3.0.9
python-dateutil==2.8.2
pytz==2022.7
scikit-learn==1.2.0
scipy==1.9.3
seaborn==0.12.2
six==1.16.0
threadpoolctl==3.1.0
途中の# Editable install with no version control (poetry-test==0.1.0)
と-e /Users/ユーザ名/Programs/Python/Test/環境名
の部分は消した方が良いでしょう。
これをDockerfile等のpip install
コマンドの入力とする事で、本番環境にパッケージ構成を流用できます
また、以下Poetryコマンドで依存関係等も含めてrequirement.txtに出力する事もできます (参考)
(記載が長大で可読性が落ち、少しやりすぎ感もあるので、どちらを選択するかは適宜選択してください)
poetry export -f requirements.txt --output requirements.txt
仮想環境の一覧表示
仮想環境一覧は、以下コマンドで表示できます。
なお、ここで表示される仮想環境はPC内全ての仮想環境ではなく、あくまで現在のフォルダ内のpyproject.tomlに紐づいた仮想環境一覧のため、pyproject.tomlが置かれたフォルダ (プロジェクトのルートフォルダ)内でコマンドを実行してください。
poetry env list
現在の仮想環境の詳細
現在の仮想環境の詳細を、以下コマンドで表示できます (参考)
poetry env info
仮想環境の削除
仮想環境は、以下コマンドで削除できます
poetry env remove pythonのバージョン
例えばPython3.10の仮想環境を削除したい場合、以下となります
poetry env remove python3.10
現在のプロジェクト内の仮想環境を全て削除したい場合は、以下となります
poetry env remove --all
Poetryのアンインストール
・Windowsの場合
以下コマンドでアンインストールできます
(Invoke-WebRequest -Uri https://install.python-poetry.org -UseBasicParsing).Content | py - --uninstall
インストール時に追加した環境変数も忘れずに削除しましょう
・Macの場合
前述のようにHomebrewでインストールしていれば、以下コマンドでアンインストールできます
brew uninstall poetry
pyenvへパスを通している場合、.zshrcからも該当する3行を忘れずに削除してください
・Linuxの場合
以下コマンドで、pyenvのルートフォルダを確認します (恐らく$HOME/.pyenv
となっているはずです)
printenv PYENV_ROOT
以下コマンドで、ルートフォルダを削除すればpyenvがアンインストールされます
rm -rf pyenvのルートフォルダ
pyenvへパスを通している場合、.bashrcからも該当する3行を忘れずに削除してください
3. Conda + conda-forge
「Conda + conda-forge」による具体的なパッケージ管理手順を解説します
①必要ツールのインストール
Windows, Mac, Linuxの場合それぞれインストール方法を解説します
Windowsの場合
インタプリタ切替&パッケージ切替用のツールとしてCondaをインストールする必要がありますが、最も定番のAnacondaを利用すると、Anacondaリポジトリの商用有料化に引っかかってしまいます。
無料のconda-forgeリポジトリがデフォルト設定されたMiniforgeというツールを使うと、有料化を回避しつつ簡単にインストールできます。
- インタプリタ切替&パッケージ切替: Miniforgeをインストール
※なお、Miniforgeは登場して日が浅いツールのため、情報の少なさに不安のある方は後述のMinicondaインストーラを使用するのも良いかと思います
・Miniforgeのインストール
こちらのMiniforgeのGitHubから、Windows用のインストーラ (Miniforge3-Windows-x86_64
と書いたリンク)をダウンロードします
ダウンロードしたexeを実行して基本的にはNext
で進めば良いですが、以下の画面のみ注意が必要です。
Condaを長期的にメインで使用するのであれば、基本的にはRegister Miniforge3 as my default Python 3.10
をチェックしてエディタに登録した方が良いです。
またAdd Miniforge3 to my PATH environment variable
をチェックしてパスを通すとPowershell等でcondaコマンドを利用できて便利ですが、上のチェックはPowershellで常に(base)
のようなベース仮想環境名が表示されて煩わしくもあるので、それを避けたい方は以下コマンドでスタートアップで仮想環境が起動しないようにできます
conda config --set auto_activate_base false
スタートメニューからMiniconda3→Anaconda Promptを開き、以下コマンドでcondaのデフォルト環境(base)上にインストールされているPythonのバージョン等の情報が表示されれば成功です
conda info
※環境名表示をOFFにする
シェルにbase環境名が表示されるのを避けたい場合、上ではconda config --set auto_activate_base false
コマンドで仮想環境の自動起動をOFFにしていました。
これ以外にも、
conda config --set changeps1 False
というコマンドで、環境表示を消す事ができます(入力後にターミナルの再起動が必要です)。こちらのコマンドはあくまでシェルへの(base)
表示を消すだけで仮想環境自体は起動されるので、好みに合わせてどちらのコマンドを利用するかを選択して頂ければと思います。
【参考】Minicondaインストーラによるインストール
※本稿はMiniforgeをインストールした場合は不要な操作です。
前述のようにMiniforgeの信頼性に不安がある方向けに、先ほど紹介したMinicondaをインストールした上で、リポジトリを切り替える方法も解説します。
Minicondaのホームページから好きなバージョンのインストーラをダウンロードします
ダウンロードしたら基本的にはNextで進めば良いですがMinifogeの場合と同様にPATHを通すかのチェックは適宜選択してください
インストールが完了して再起動したら、スタートメニューからMiniconda3→Anaconda Promptをクリックします。
以下コマンドでデフォルトで使用されている
conda config --show channels
以下のように表示されるかと思います
channels:
- defaults
上記のdefaults
が有料のAnacondaリポジトリを表しているので、以下コマンドでこれを削除してconda-forgeを登録します
conda config --remove channels defaults
conda config --add channels conda-forge
再びconda config --show channels
コマンドでリポジトリを確認し、以下のようになっていれば成功です
channels:
- conda-forge
M1/M2 Macの場合
M1/M2 Macでは以下をインストールする必要があります
- インタプリタ切替&パッケージ切替: Miniforgeをインストール
・Miniforgeのインストール
こちらのMiniforgeのGitHubから、Apple Silicon用のインストーラ (Miniforge3-MacOSX-arm64
と書いたリンク)をダウンロードします
ターミナルから以下のコマンドでダウンロードフォルダに移動し
cd ~/Downloads
以下のコマンドでダウンロードしたMiniforge3-MacOSX-arm64.shを実行してください
bash Miniforge3-MacOSX-arm64.sh
途中色々と聞かれますが、全てEnterを押すかyesで進んでください。
インストール完了後、シェルを一度閉じてから開き直し、以下コマンドでcondaのデフォルト環境(base)上にインストールされているPythonのバージョン等の情報が表示されれば成功です
conda info
シェル実行時の最後の選択肢でnoを選択してしまってcondaコマンドが認識されない場合、以下コマンドで有効化できます
eval "$(~/miniforge3/bin/conda shell.bash hook)"
conda init
Windowsの場合と同様、シェルで常に(base)
のような仮想環境名が表示されるのが煩わしい方は、以下コマンドでデフォルトでの仮想環境有効化を無効にできます
conda config --set auto_activate_base false
Linux(Ubuntu)の場合
以下をインストールする必要があります
- インタプリタ切替&パッケージ切替: Miniforgeをインストール
こちらのMiniforgeのGitHubから、Linux用のインストーラを以下CPUに応じてダウンロードします
Intel/AMD系CPUの場合: Miniforge3-Linux-x86_64
Arm系CPUの場合: Miniforge3-Linux-aarch64
※GUIが使えない場合、以下コマンドでもダウンロードできます
wget https://github.com/conda-forge/miniforge/releases/latest/download/Miniforge3-Linux-x86_64.sh
Intel/AMD系CPUの前提で話を進めます
ターミナルから以下のコマンドでダウンロードフォルダに移動し
cd ダウンロード先のフォルダ
以下のコマンドでダウンロードしたMiniforge3-Linux-x86_64.sh等を実行してください
bash Miniforge3-Linux-x86_64.sh
途中色々と聞かれますが、全てEnterを押すかyesで進んでください。
インストール完了後、シェルを一度閉じてから開き直し、以下コマンドでcondaのデフォルト環境(base)上にインストールされているPythonのバージョン等の情報が表示されれば成功です
conda info
シェル実行時の最後の選択肢でnoを選択してしまってcondaコマンドが認識されない場合、以下コマンドで有効化できます
eval "$(~/miniforge3/bin/conda shell.bash hook)"
conda init
Windowsの場合と同様、シェルで常に(base)
のような仮想環境名が表示されるのが煩わしい方は、以下コマンドでデフォルトでの仮想環境有効化を無効にできます
conda config --set auto_activate_base false
②仮想環境作成
プロジェクトに紐づいた仮想環境を作成します。
プロジェクト用フォルダの作成
「1.pyenv + venv」や「2.pyenv + Poetry」ではプロジェクト用フォルダ内に仮想環境を作成しましたが、Condaではプロジェクト用フォルダとは独立に仮想環境を作成する事ができます(もちろん、プロジェクト毎に仮想環境を作成しても問題ありません)
とはいえVSCodeの操作にプロジェクト用フォルダが必要となるので、「1.pyenv + venv」の時と同様、エクスプローラやFinder、mkdirコマンド等で、下図のような感じで作成します。
作成したフォルダに以下コマンドで飛び、以降の操作を進めます
cd 作成したプロジェクト用フォルダのパス
Condaで仮想環境作成
前述のように、Condaではインタプリタ(Pythonのバージョン)切替とパッケージ切替を同一のツールで実施できます。
よって「1.pyenv + venv」2.pyenv + Poetry」のように仮想環境作成前にpyenvでインタプリタを準備する必要はなく、仮想環境作成とPythonバージョン指定を同時に実行できます。
(本記事内で②の項目を比べてみると分かりますが、Pythonのバージョンを変えて仮想環境を作成したい場合、venvやPoetryを利用するよりもCondaの方が圧倒的に手間が少ないのでおすすめです)
以下コマンドで、Pythonのバージョンを指定して仮想環境を作成します
conda create --name 仮想環境名 python=Pythonのバージョン
例えば"py39"という名称でPython3.9の仮想環境を作成したい場合、以下コマンドを実行します
conda create --name py39 python=3.9
作成済の仮想環境は、以下コマンドで一覧表示できます。
conda env list
表示例
# conda environments:
#
base * /Users/ユーザ名/miniforge3
仮想環境名 /Users/ユーザ名/miniforge3/envs/仮想環境名
③仮想環境にパッケージをインストール
作成した仮想環境にパッケージをインストールします
仮想環境のアクティベート
パッケージのインストール前に、Condaで仮想環境を起動(アクティベート)します
以下コマンドで、仮想環境をアクティベートできます
conda activate 仮想環境名
下記のようにアクティベートした仮想環境名がシェルの最初にカッコ表示されれば成功です
(環境名) [カレントフォルダ名]>
conda deactivate
コマンドで、仮想環境を終了できます
(環境名) [カレントフォルダ名]> conda deactivate
※なお、環境名の指定なしでconda activate
コマンドを打つと、以下のようにベースの仮想環境(base)が有効化されます
(base) [カレントフォルダ名]>
・パッケージのインストール
※仮想環境をアクティベートした状態からスタートしてください
下記のようにconda install [パッケージ名]
で、パッケージをインストールできます
(環境名) conda install パッケージ名
例えばpandasをインストールしたい場合は以下のようになります
conda install pandas
condaでインストールできない (conda-forgeリポジトリに存在しない)パッケージをPyPIリポジトリからインストールしたい場合、以下のpip install
コマンドでインストール可能です
(環境名) pip install パッケージ名
M1/M2 Macの場合インストール出来るPythonやパッケージのバージョンに制約があるので、詳しくは以下の記事を参照ください
なお、こちらの記事に記載されているように、condaでインストールできる場合は基本的にcondaでインストールしてください (特にpipとconda両方でインストールするのは避けてください)
conda list
で、インストールされているパッケージのバージョンが確認できます
(環境名) >conda list
# Name Version Build Channel
bzip2 1.0.8 h3422bc3_4 conda-forge
ca-certificates 2022.12.7 h4653dfc_0 conda-forge
libblas 3.9.0 16_osxarm64_openblas conda-forge
libcblas 3.9.0 16_osxarm64_openblas conda-forge
libcxx 14.0.6 h2692d47_0 conda-forge
libffi 3.4.2 h3422bc3_5 conda-forge
libgfortran 5.0.0 11_3_0_hd922786_27 conda-forge
libgfortran5 11.3.0 hdaf2cc0_27 conda-forge
liblapack 3.9.0 16_osxarm64_openblas conda-forge
libopenblas 0.3.21 openmp_hc731615_3 conda-forge
libsqlite 3.40.0 h76d750c_0 conda-forge
libzlib 1.2.13 h03a7124_4 conda-forge
llvm-openmp 15.0.6 h7cfbb63_0 conda-forge
ncurses 6.3 h07bb92c_1 conda-forge
numpy 1.24.1 pypi_0 pypi
openssl 3.0.7 h03a7124_1 conda-forge
pandas 1.5.2 pypi_0 pypi
pip 22.3.1 pyhd8ed1ab_0 conda-forge
python 3.10.8 h3ba56d0_0_cpython conda-forge
:
Channel
の項にインストール元のリポジトリが表示されるので、PyPIリポジトリからインストールしたかconda-forgeリポジトリからインストールしたかを見分ける事ができます
(condaコマンドでインストールした場合も必ずconda-forgeリポジトリからインストールされるとは限らず、Pythonのバージョンや依存関係次第ではPyPIリポジトリからインストールされる事もあるようです)
【参考】Condaでの依存関係の管理
Poetryではpoetry.lock
にプロジェクト一括でパッケージの依存関係が記載されましたが、Conda (Miniforge)では~/miniforge3/pkgs/パッケージ名-バージョン-ビルド名/info/index.json
にパッケージ毎に依存関係が記述されます。
詳細は公式ドキュメントを参照ください
④エディタに仮想環境を紐付ける
作成した仮想環境をエディタ(VSCode)に紐付けます
まずVSCodeで以下のようにプロジェクト用フォルダを開きます
以下のように適当な.pyファイルを作成し、右下のpythonバージョンをクリックしたのち、Poetryで作成済の仮想環境を選択します
※作成した仮想環境がリストに見当たらない場合、Enter interpreter path
をクリックして仮想環境フォルダ内のpython.exeのパスを指定します
【参考】その他Condaの便利なコマンド
Condaの以下コマンドを覚えておくと便利です
仮想環境のコピー
を他のフォルダにコピーすることで、仮想環境を依存関係も含めて再現する事ができます。(参考)
まずコピー元の仮想環境をアクティベートした状態で、conda env export
コマンドで仮想環境の情報をenvironment.ymlファイルに出力します(公式ドキュメントより)
(環境名1) >conda env export > environment.yml
envorinment.ymlの中身は以下のようになっています
(dependenciesのイコールの右側のビルド名が、前述のindex.jsonが入ったフォルダのビルド名と一致しており、ここから依存関係を特定するようです)
name: 環境名
channels:
- conda-forge
dependencies:
- bzip2=1.0.8=h3422bc3_4
- ca-certificates=2022.12.7=h4653dfc_0
- libblas=3.9.0=16_osxarm64_openblas
- libcblas=3.9.0=16_osxarm64_openblas
- libcxx=14.0.6=h2692d47_0
- libffi=3.4.2=h3422bc3_5
- libgfortran=5.0.0=11_3_0_hd922786_27
- libgfortran5=11.3.0=hdaf2cc0_27
- liblapack=3.9.0=16_osxarm64_openblas
- libopenblas=0.3.21=openmp_hc731615_3
- libsqlite=3.40.0=h76d750c_0
- libzlib=1.2.13=h03a7124_4
- llvm-openmp=15.0.6=h7cfbb63_0
- ncurses=6.3=h07bb92c_1
- numpy=1.24.1=py39hefdcf20_0
- openssl=3.0.7=h03a7124_1
- pandas=1.5.2=py39hde7b980_0
- pip=22.3.1=pyhd8ed1ab_0
- python=3.9.15=hea58f1e_0_cpython
- python-dateutil=2.8.2=pyhd8ed1ab_0
- python_abi=3.9=3_cp39
- pytz=2022.7=pyhd8ed1ab_0
- readline=8.1.2=h46ed386_0
- setuptools=65.6.3=pyhd8ed1ab_0
- six=1.16.0=pyh6c4a22f_0
- tk=8.6.12=he1e0b03_0
- tzdata=2022g=h191b570_0
- wheel=0.38.4=pyhd8ed1ab_0
- xz=5.2.6=h57fd34a_0
prefix: /Users/ユーザ名/miniforge3/envs/環境名
このenvironment.ymlを他のプロジェクトフォルダに移し、以下コマンドで依存関係やインストール元リポジトリも含めて仮想環境を再現する事ができます
conda env create --name 環境名2 -f environment.yml
パッケージのバージョン更新
以下コマンドで、パッケージのバージョンを一括で最新にアップデートできます。
conda update --all
以下コマンドで特定のパッケージのみをアップデート出来ます
conda update パッケージ名
パッケージのアンインストール
以下コマンドでパッケージをアンインストールできます。
conda uninstall パッケージ名
Conda本体のアップデート
Conda本体は以下コマンドでアップデート出来ます
conda update -n base conda
requirements.txtへの出力
venvの場合と同様、仮想環境をアクティベートした状態から下記コマンドで、パッケージ構成をrequirements.txtに出力できます。
(環境名) >conda list -e > requirements.txt
このテキストファイル内に、インストールされているパッケージ一覧が記載されています
# This file may be used to create an environment using:
# $ conda create --name <env> --file <this file>
# platform: osx-arm64
bzip2=1.0.8=h3422bc3_4
ca-certificates=2022.12.7=h4653dfc_0
libblas=3.9.0=16_osxarm64_openblas
libcblas=3.9.0=16_osxarm64_openblas
libcxx=14.0.6=h2692d47_0
libffi=3.4.2=h3422bc3_5
libgfortran=5.0.0=11_3_0_hd922786_27
libgfortran5=11.3.0=hdaf2cc0_27
liblapack=3.9.0=16_osxarm64_openblas
libopenblas=0.3.21=openmp_hc731615_3
libsqlite=3.40.0=h76d750c_0
libzlib=1.2.13=h03a7124_4
llvm-openmp=15.0.6=h7cfbb63_0
ncurses=6.3=h07bb92c_1
numpy=1.24.1=py39hefdcf20_0
openssl=3.0.7=h03a7124_1
pandas=1.5.2=py39hde7b980_0
pip=22.3.1=pyhd8ed1ab_0
python=3.9.15=hea58f1e_0_cpython
python-dateutil=2.8.2=pyhd8ed1ab_0
python_abi=3.9=3_cp39
pytz=2022.7=pyhd8ed1ab_0
readline=8.1.2=h46ed386_0
setuptools=65.6.3=pyhd8ed1ab_0
six=1.16.0=pyh6c4a22f_0
tk=8.6.12=he1e0b03_0
tzdata=2022g=h191b570_0
wheel=0.38.4=pyhd8ed1ab_0
xz=5.2.6=h57fd34a_0
上記のビルド名まで記載されており、少し冗長なので、こちらの記事の方法で以下コマンドでよりシンプルな形式に変えても良いかと思います
conda list -e | awk -F'=' '{print $1,"==",$2}' | sed 's/ //g' | sed '/^#/d' > requirements.txt
bzip2==1.0.8
ca-certificates==2022.12.7
libblas==3.9.0
libcblas==3.9.0
libcxx==14.0.6
libffi==3.4.2
libgfortran==5.0.0
libgfortran5==11.3.0
liblapack==3.9.0
libopenblas==0.3.21
libsqlite==3.40.0
libzlib==1.2.13
llvm-openmp==15.0.6
ncurses==6.3
numpy==1.24.1
openssl==3.0.7
pandas==1.5.2
pip==22.3.1
python==3.9.15
python-dateutil==2.8.2
python_abi==3.9
pytz==2022.7
readline==8.1.2
setuptools==65.6.3
six==1.16.0
tk==8.6.12
tzdata==2022g
wheel==0.38.4
xz==5.2.6
仮想環境の一覧表示
繰り返しとなりますが、仮想環境一覧は以下コマンドで表示できます。
conda env list
現在の仮想環境の詳細
現在の仮想環境の詳細を、仮想環境をアクティベートした状態から以下コマンドで表示できます
conda info
仮想環境の削除
仮想環境は、以下コマンドで削除できます
conda remove -n 仮想環境名 --all
例えばPython39という名前の仮想環境を削除したい場合、以下となります
conda remove -n python39 --all
Condaのアンインストール
・Windowsの場合
コントロールパネル→プログラムのアンインストールで、
Miniforge3
またはMiniconda
と記載されているプログラムをアンインストールすればOKです
(念のためConda関係の環境変数も削除されているか確認するのが望ましいです)
・Mac/Linuxの場合
こちらのMiniforge公式ドキュメントを参考にアンインストールを実行します。
まず以下コマンドで、シェルからcondaコマンドを無効化します
conda init --reverse --dry-run
conda init --reverse
次に以下コマンドで、Miniforge関係のフォルダを削除します
CONDA_BASE_ENVIRONMENT=$(conda info --base)
echo The next command will delete all files in ${CONDA_BASE_ENVIRONMENT}
rm -rf ${CONDA_BASE_ENVIRONMENT}
以下コマンドで、設定ファイル.condarc
を削除します
echo ${HOME}/.condarc will be removed if it exists
rm -f "${HOME}/.condarc"
以上でアンインストール完了です