Windows上のPythonでPIPENVを利用したらいろいろはまったのでメモ。
そもそもpipenvとは
Pythonといえばpip install
コマンドなどで簡単に様々なライブラリをインストールし使うことができますが、プロジェクトごとにどんなライブラリを使っているか、どのバージョンのライブラリを使っているかわかりにくくなるため、プロジェクト別の管理が必要になることがあります。
PHPのComposerなどのように、あらかじめプロジェクト内にライブラリをダウンロードし、ほかのプロジェクトとの衝突をなるべく避けたい。そんな時に便利なのがpipenvです。
参考
- 既存プロジェクトに pipenv を導入した方法 - Qiita
- Windows + Python 3.6 + PipEnv + Visual Studio Code でPython開発環境 - Qiita
やろうとしたこと
とりあえずpipenvのごくごく基本的な利用方法については上記記事を読んでもらうとして、pipenvを使えばプロジェクトごとに必要なライブラリをダウンロードした仮想環境(venv)を作ることができます。
この環境で実行することで、ライブラリのバージョンがほかのものと衝突するという問題を防げるほか、ほかのPCで作業を続行する際の環境構築が容易になります。
今回はこのpipenvを使って、いくつかのライブラリをダウンロードした環境でスクリプトを実行しようとしました が、上手くいかずに2,3時間ほど悩みました。
何が上手くいかなかったか
仮想環境上にダウンロードしたライブラリが全く読み込まれない という問題が発生しました。
その後何度か試行錯誤し、とりあえずデバッグ実行したときはうまく動作することがわかりましたが、通常通りスクリプトを実行しようとしたときは一切ライブラリを読み込みませんでした。
動かなかった原因
いろいろ調べた結果、とりあえず以下の要因があることがわかりました。
- Pythonにパスを通さず、
C:\Windows\Py.exe
を経由でPythonを実行しようとしていたこと - 実行時PYTHONPATHに、仮想環境のフォルダ(.venv)が含まれていなかったこと
pipenv install --dev
コマンドを実行後、pipenv shell
を実行し、そのままプロジェクト内のPythonスクリプトを実行しようとしていたのですが、それではPYTHONPATHに仮想環境のフォルダが含まれないようです。
やってわかったこと
- pipenvを使う場合は、必ずPythonにパスを通すこと(Py.exeは使わないこと)
- プログラムを実行するときは、
pipenv run [任意のコマンド]
というふうにコマンドを指定すること(たとえばpipenv run python .\main.py
/長いなと思った場合、上記記事に書かれているとおり、PipFileのscriptsセクションにコマンドを追加すること) - もし
pipenv
とだけコマンドを入れて動かない場合は、パスが通っていない可能性が高いので、一度Pythonをアンインストールして、公式のインストーラよりインストールし直すと良いかもしれません(ついでに念のため、一度PCからサインアウトするか、再起動することをお勧めします)
pipenv shell
は結局どう使うのかわかりませんでした。どうすれば良かったのだろう?(一応pipenv shell
でShellを切り替え直後に、pythonコマンドでインタラクティブモードを起動すると、そこでは仮想環境にパスが通った状態でpythonが起動するようですが…)