390
441

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Pythonのパッケージ管理ベストプラクティス

Last updated at Posted at 2023-03-04

はじめに

こちらの記事でも紹介しましたが。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との相性」「検索による情報の見つかりやすさ」を考慮しています。詳しくは後述します

筆者の主観が入りますが、概ね以下のフローチャートのように選択すると良いかと思います (詳しくは後述します)

image.png

なお、実用上ハマりやすいプロキシ環境での使用方法についても、以下の記事に別途まとめました


必要知識

ここから先は、Pythonのパッケージ管理が何をやっているかを解説します。
「御託はいいから早く使いたい!」という方は、「3種類の方法比較」の項目まで飛んでください

まず、一般的に「パッケージ管理」と呼ばれている要素を、以下の4つの機能に分割して考える必要があります。

A. インタプリタ切替 (Pythonのバージョンを切り替える)
B. パッケージ切替 (パッケージのバージョンを切り替える)
C. パッケージインストール (パッケージをインストールする)
D. リポジトリ (パッケージのインストール元)

一般的に「パッケージ管理ツール」と呼ばれているものは、上記機能の一部のみをカバーしているため、全ての機能を実現するためには複数のツールを組み合わせる必要があります。

それぞれの機能について紹介を進めます。

A.インタプリタ切替

Pythonには複数のバージョンが存在します。

Python公式ホームページからは3.11.13.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や用途に適したパッケージ管理構成を実現できるかと思います (インタプリタ切替に関してはこちらの記事を参考にさせて頂きました)

image.png


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」も選択肢に入るかと思います

またTensorflowPyTorch等の深層学習フレームワークを使用する場合、公式でも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

このテキストファイル内に、インストールされているパッケージ一覧が記載されています

requirement.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はデフォルトでは以下のようになっています

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]に記載されます

pyproject.tomlの一部
抜粋
:
[tool.poetry.dependencies]
python = "^3.10"
pandas = "^1.5.2"
:
抜粋

さらに、インストール時の依存関係がpoetry.lockに記述されます。このpyproject.tomlpoetry.lockの2つのファイルを組み合わせることで、環境をコピーした際にも依存関係を制御する事ができます。

poetry.lock
# 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

このテキストファイル内に、インストールされているパッケージ一覧が記載されています

requirement.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が入ったフォルダのビルド名と一致しており、ここから依存関係を特定するようです)

environment.yml
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

このテキストファイル内に、インストールされているパッケージ一覧が記載されています

requirement.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
requirement.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"

以上でアンインストール完了です

390
441
9

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
390
441

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?