Pythonのモジュール/ライブラリの管理と仮想環境の構築#

PythonにはPEP(Python Enhancement Proposals)と呼ばれる、Pythonコミュニティーにおける、Pythonの機能拡張や変更についての提案がまとめられたドキュメントがある。 2021年の5月に提案されたPEP668は、 Pythonにおけるライブラリやモジュールの管理は、OSのパッケージマネージャとconflictしないよう、 仮想環境を用いるか、OSのパッケージマネージャで管理するべきだ、とするものである。

大雑把に言うとPythonの3.11以降、pipのバージョンが23以降がこのPEP668に対応しているため、ある時期からこの警告を目にするようになった、という人も多いであろう。 警告の一例を下に示す(Macでpip installを試みた例):

~ $ pip3 install qiskit
error: externally-managed-environment

× This environment is externally managed
╰─> To install Python packages system-wide, try brew install
    xyz, where xyz is the package you are trying to
    install.
    
    If you wish to install a Python library that isn't in Homebrew,
    use a virtual environment:
    
    python3 -m venv path/to/venv
    source path/to/venv/bin/activate
    python3 -m pip install xyz
    
    If you wish to install a Python application that isn't in Homebrew,
    it may be easiest to use 'pipx install xyz', which will manage a
    virtual environment for you. You can install pipx with
    
    brew install pipx
    
    You may restore the old behavior of pip by passing
    the '--break-system-packages' flag to pip, or by adding
    'break-system-packages = true' to your pip.conf file. The latter
    will permanently disable this error.
    
    If you disable this error, we STRONGLY recommend that you additionally
    pass the '--user' flag to pip, or set 'user = true' in your pip.conf
    file. Failure to do this can result in a broken Homebrew installation.
    
    Read more about this behavior here: <https://peps.python.org/pep-0668/>

note: If you believe this is a mistake, please contact your Python installation or OS distribution provider. You can override this, at the risk of breaking your Python installation or OS, by passing --break-system-packages.
hint: See PEP 668 for the detailed specification.

上のOSやパッケージマネージャの名称は環境に依存するが、同様の警告が表示される。

警告を回避し、ライブラリをインストールする方法は幾つかあり、

  • OSのパッケージマネージャを使ってインストールする (ipykernelなど、導入出来ないものがソコソコある)

  • 仮想環境を使ってインストールする (Pythonの標準機能で行う)

  • 警告を無視し、グローバル環境にインストールする (非推奨)

結論から言うと、Pythonの仮想環境の構築/使用を行うのが結果として最も煩わしくない方法と思われる。

以下では、仮想環境を作成しライブラリのインストールを行う方法に加えて、当該の仮想環境を用いてVS Code上でipynb形式のコードを実行する方法についても説明する。

Python仮想環境の作成&activate/deactivate#

Pythonの仮想環境を作成するには、ターミナルで以下のコマンドを実行する。

python -m venv name_of_venv

上記のコマンドで、現在のディレクトリにname_of_venvという名前の仮想環境が作成される。 これだけ。とても簡単。

作成した仮想環境に入るには、以下のコマンドを実行する。

source /path_to_venv/name_of_venv/bin/activate

この状態で、pip installなどのコマンドを実行すると、仮想環境内にライブラリがインストールされる。

グローバル環境に戻りたいときや、別の仮想環境に移りたいときは、以下のコマンドを実行すれば良い。

deactivate

依存関係のインストール#

本講義資料のレポジトリには、requirements.txtというファイルがあり、このファイルには、本講義資料を実行するために必要なライブラリが記述されている。 仮想環境を作成した後、以下のコマンドを実行することで、requirements.txtに記述されたライブラリを一括でインストールすることができる。

pip install -r path_to_file/requirements.txt

VS Code上でipynb形式のコードを実行する#

VS Code上でipynb形式のコードを実行するためには、以下の手順を踏む。

  • ipykernel (Jupyter Notebook 用の Python カーネル)を仮想環境のpipでインストールする

  • VS code上の拡張機能から、Jupyter Notebookをインストールする (Pythonの拡張機能もインストールしておこう)

VS Codeでは、Jupyter Notebookを実行するためのカーネルを選択する必要があるが、 このとき、上で作成した仮想環境が選択肢に表示されれば、それを用いれば良い。

仮想環境が表示されない場合は、仮想環境をactivateした状態で、以下のようなコマンドを実行し、

ipython kernel install --user --name=name_venv --display-name=display_name_venv

VS Codeを再起動すると良い。 これでも稀に表示されないことがあるが、そのときはVS Codeのpython.venvPathを編集するとよい。