自分のキャリアをあれこれ考えながら、Pythonで様々なデータを分析していくブログです

【Mac/Linux】venvでactivateしてもPythonのパスが変わらない

Python
Python

venvでactivateしたのに/usr/bin/pythonのpythonを参照してしまうという事象が発生しました。

このままpip installをすると仮想環境内にライブラリがインストールされず、システム側のPython環境がゴチャゴチャになってしまいました。

スポンサーリンク

理由

venvで作成したフォルダを移動したからのようです。

activateファイルの中にパスが指定してあり、フォルダを移動したことにより正しくactivate出来ていないようです。

(test-venv) hinomaruc@myMBP ~ % grep VIRTUAL_ENV test-venv/bin/activate
Out[0]
    unset VIRTUAL_ENV
VIRTUAL_ENV="/Users/hinomaruc/test-venv"
export VIRTUAL_ENV
PATH="$VIRTUAL_ENV/bin:$PATH"
if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT:-}" ] ; then
    if [ "basename \"$VIRTUAL_ENV\"" = "__" ] ; then
        PS1="[basename \dirname \"$VIRTUAL_ENV\"\``] $PS1"
        PS1="(basename \"$VIRTUAL_ENV\")$PS1"
スポンサーリンク

再現

現在のディレクトリの確認
hinomaruc@myMBP ~ % pwd
Out[0]
/Users/hinomaruc
test-venvという仮想環境を作成
python3 -m venv test-venv

test-venvフォルダ移動前の動作確認

仮想環境をactivateする
hinomaruc@myMBP ~ % source /Users/hinomaruc/test-venv/bin/activate
pythonコマンドのpathを確認
(test-venv) hinomaruc@myMBP ~ % which python
Out[0]
/Users/hinomaruc/test-venv/bin/python

仮想環境内のpythonコマンドを参照しています。

python3コマンドのpathを確認
(test-venv) hinomaruc@myMBP ~ % which python3
Out[0]
/Users/hinomaruc/test-venv/bin/python3

仮想環境内のpython3コマンドを参照しています。

pipでインストールされているライブラリの確認
(test-venv) hinomaruc@myMBP ~ % python3 -m pip freeze
Out[0]
結果なし

何もインストールされていませんでした。

test-venvフォルダ移動後の動作確認

test-venvフォルダをPublicフォルダ以下に移動します
mv test-venv Public
source /Users/hinomaruc/Public/test-venv/bin/activate 

作成済みの仮想環境を移動した場合どうなるのか確認してみます。

(test-venv) hinomaruc@myMBP ~ % which python
Out[0]
/usr/bin/python

pythonのパスが/usr/bin/pythonを指しています。

(test-venv) hinomaruc@myMBP ~ % which python3
Out[0]
/usr/bin/python3

pythonのパスが/usr/bin/python3を指しています。

(test-venv) hinomaruc@myMBP ~ % python3 -m pip freeze
Out[0]
six==1.15.0

なぜかsixだけインストールしていたようです。

フォルダを移動すると挙動が変わりました。

スポンサーリンク

解決法

  1. venvで仮想環境を作成したフォルダに戻す

Publicフォルダ以下に移動したtest-venvフォルダを1つ前のフォルダ階層(/Users/hinomaruc以下)に戻せば元どおりです。

  1. activateファイルに記載されているパスを修正する

下記情報を参考にしました。

"venv activate" doesn't not change my Python path
I create a virtual environment; let's say test_venv, and I activate it. All successful. HOWEVER, the path of the Python ...
activateファイル一覧の表示
ls -la test-venv/bin/ | grep activate
Out[0]
> -rw-r--r--   1 hinomaruc  staff  2216 12  3 09:39 activate
-rw-r--r--   1 hinomaruc  staff  1268 12  3 09:39 activate.csh
-rw-r--r--   1 hinomaruc  staff  2420 12  3 09:39 activate.fish
タイトルとURLをコピーしました