【Venv】仮想環境の使用ライブラリをfreezeしたら思ってた10倍はパッケージが書き込まれた話【Anaconda】【備忘録】


背景

ハッカソンにチームで参加するにあたって,Githubでコード管理をしようと思った.
いざ作った仮想環境のライブラリをfreezeしたら,インストールしてないライブラリまでめっちゃ書き込まれてて焦った.
前回に引き続き備忘録として投稿します.

環境

OS:MacOS BigSur
ターミナル:zsh
PYTHONPATH:Anacondaに繋げました(前回記事はそれに伴う問題の解決)
↑今回はこいつが悪さしてます

アプローチ

とりあえずfreeze

Djangoのパッケージだけをpip installした環境を作成.
runserverまで確認できたので,ライブラリをfreeze

(venv)(base)$ python -m pip freeze > requirments.txt

requiments.txtの確認

Django==3.2.7
その他numpyなど想定外に記述されたライブラリたち

あれ...?

venv環境を作り直してみる

venvの環境構築はPython Japanを参照

freeze, requimentsの確認

Django==3.2.7
その他numpyなど想定外に記述されたライブラリたち

やっぱりインストールしてないパッケージも記載される. \コンニチハ/

そういえば...

この前PYTHONPATHをAnacondaに繋げたことを思い出した.
Anaconda-Navigatorのenvironmentで確認すると,自分がどうやらAnacondaの仮想環境「base」上に存在することが判明.

確かにzshでも(base)って表示されてた...

(venv)(base)$ 

Anacondaに別仮想環境を作成,切り替え

【初心者向け】AnacondaでPythonの仮想環境を作成・切り替える(多分)最も簡単な方法
ということで上記記事を参考に,Anacondaで別環境を作成し,環境を切り替えました.
環境名はDjangoとしました.

Djangoの環境の方を起動させると...

(venv)(base)$ conda activate Django
(venv)(Django)$ 

無事に起動しました!

ライブラリのインストール,freeze

再度Djangoをpip installし,freezeを行う.

(venv)(Django)$ pip install django
(venv)(Django)$ python -m pip freeze > requirments.txt

requirements.txtの確認

asgiref==3.4.1
Django==3.2.7
pytz==2021.1
sqlparse==0.4.

しっかり必要なパッケージのみが書き込まれてる!

今回のオチ

PYTHOHPATHがAnacondaに繋がっていたため,デフォルトで使用する環境がAnacondaのbase環境になっていました.そのため,その上で仮想環境を構築しても,base環境のライブラリが利用できる状態になっていたことが原因でした.
学生エンジニアとかは結構陥りやすいイベントかもしれないので,こうなってしまった時は落ち着いてAnacondaの仮想環境を切り替えて対処してみてください.
(そもそもAnacondaにPYTHONPATHを繋げる人は少ないか...?)

本日の記事は以上です.
ハッカソン頑張ってきます!

--追記--
残念ながらハッカソンは入賞できず...
でもその過程でこの問題をはじめとして色々学ぶことができたのでヨシ!

参考にさせていただいた記事

【初心者向け】AnacondaでPythonの仮想環境を作成・切り替える(多分)最も簡単な方法