2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

Anaconda仮想環境の環境変数設定

Last updated at Posted at 2024-02-13

目的

Anacondaの仮想環境を立ち上げたときに自動で環境変数PYTHONPATHを設定します。
その他の環境変数の設定も同様に可能です。

背景

以下のようなディレクトリ構成で開発を行っていました。

project/
   ├ modules/
   │  ├ module1.py
   │  └ module2.py
  ├ sub1/
   │  ├ notebook1.ipynb
   │  └ script1.py
  └ sub2/
      ├ notebook2.ipynb
      └ script2.py 

project/modules/以下には、複数のサブディレクトリで共通して使いたい自作モジュールを配置しています。
このとき、例えばproject/sub1/script1.pyからmodule1をインポートする場合、以下のようにモジュール検索パスを追加する必要がありました。

script1.py
import sys
sys.path.append("..")

from modules import module1

毎回これを書くのは面倒なので、Anacondaの仮想環境を立ち上げた際に、自動的に環境変数PYTHONPATHを設定するようにしました。

仮想環境での環境変数の設定

Condaユーザーガイド (Saving environment variables)に詳しい説明があります。

対象の仮想環境ディレクトリにetc/conda/activate.d/etc/conda/deactivate.d/という二つのディレクトリを作成します。
activate.d/には環境起動時に実行するスクリプトを、deactivate.d/には環境終了時に実行するスクリプトを配置します。スクリプトはこちらにあります。

activate.d/set_pythonpath.sh
#!/bin/bash

_additional_path="/path/to/your/modules"

if [ -z "$PYTHONPATH" ]; then
    export PYTHONPATH="$_additional_path"
else
    export OLD_PYTHONPATH="$PYTHONPATH"
    if [[ ":$PYTHONPATH:" != *":$_additional_path:"* ]]; then
        export PYTHONPATH="$PYTHONPATH:$_additional_path"
    fi
fi
deactivate.d/unset_pythonpath.sh
#!/bin/bash

if [ -n "$OLD_PYTHONPATH" ]; then
    export PYTHONPATH="$OLD_PYTHONPATH"
    unset OLD_PYTHONPATH
else
    unset PYTHONPATH
fi

これらを配置した状態でconda activate envを実行するとPYTHONPATHが設定され、conda deactivateを実行するとPYTHONPATHは元に戻ります。

VSCodeのJupyter拡張機能を使う場合

ターミナルでPYTHONPATHを設定していても、VSCodeのJupyter拡張機能を使ってノートブックを実行した場合には反映されません。これについてはGithub Issueがありました。
$PYTHONPATH in notebook is different than in terminal #9436

Issueにあるように、VSCodeのJupyter拡張機能を使う場合にはワークスペースディレクトリに.envファイルを配置しましょう。自動的にPYTHONPATHが設定されます。

.env
PYTHONPATH=/path/to/your/modules
2
1
0

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
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?