Windows PowerShellでPipenvを使ったときにプロンプトで仮想環境に入ったことをわかるようにするの巻

Windows PowerShellでPipenvを使ったときにプロンプトで仮想環境に入ったことをわかるようにするの巻

はじめに

Windows環境でPipenvを使いはじめたのですが、PowerShellで仮想環境に入ったときに、プロンプトに変化がないので仮想環境に入っているかどうか認識しにくいのです。地味にストレスなの。。。

ええと、状況としては

pipenv shell

としてやって仮想環境に入ると、、、(注; ******はユーザー名です)

PS C:\Users\******\otameshi> pipenv shell
Launching subshell in virtual environment...
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

Try the new cross-platform PowerShell https://aka.ms/pscore6

PS C:\Users\******\otameshi>

となる、と。

一緒やん。。。わからんやん。。。(あ、「¥」になっていたら「\」に読み替えてください)

というわけで、そんな状態を改善するやり方の備忘録です。

(ちなみに、ユーザー名(というかたぶんフォルダ名)にスペースが入っているとpipenv –python x.xx.xのところでコケてしまいました。原因に気づくのにすごーく時間がかかってしまった。結局新しいMicriosoftアカウントを作成してスペースのないフォルダ名が作れたことでpipenv –python x.xx.xがうまくいったのでした。他の方法があるかもしれませんけどね。)

やりかた

ええと、まずはPowerShellのプロファイルを記述した

Microsoft.PowerShell_profile.ps1

$PROFILE

と打って探します。あ、見つかりました。(注; ******はユーザー名です)

PS C:\Users\******> $PROFILE
C:\Users\******\Documents\WindowsPowerShell\Microsoft.PowerShell_profile.ps1

もしファイルの実体がなければ自分で作って上記のディレクトリ構成になる様にファイルを放り込みます。

参考;プロファイルについて – PowerShell | Microsoft Docs

私の場合はいつの間にか ”Microsoft.PowerShell_profile.ps1″ を作っていたみたいでした。

というわけで、プロンプトを改良するため、

Microsoft.PowerShell_profile.ps1

に以下の記述を加えました。

function prompt{
        if ($env:PIPENV_ACTIVE -eq 1) {
                $venv = (($env:VIRTUAL_ENV -split "\\")[-1] -split "-")[0]
                "($venv)" + " [" + (Split-Path (Get-Location)-Leaf) + "]$ ";
                } else {
                        "[" + (Split-Path (Get-Location)-Leaf) + "]$ ";
                }
        }

・Pipenvの仮想環境がアクティブな状態であれば、プロンプトの先頭で()の中にプロジェクト名を表示するようにする、と

・ついでにプロンプトでpathが長々と表示されてしまうので、カレントディレクトリの情報だけを表示するようにしました

(今回、$env:VIRTUAL_ENV に相当するのは C:\Users\******\.virtualenvs\otameshi-qoboLf-O なのでこれからカレントディレクトリ名である’otameshi’の部分が抽出されるようになっています。お好みで。

ユーザーディレクトリじゃなくて作業ディレクトリ直下に仮想環境を作った場合は、

($env:VIRTUAL_ENV -split "\\")[-1]

のところの[-1]を[-2]にすると作業ディレクトリが表示される、はず。)

・それから、「>」よりも「$」のほうが好きなので「$」を表示するようにしました

はい、powershellを再起動してから該当のディレクトリに行って、

[otameshi]$ pipenv shell
Launching subshell in virtual environment...
Windows PowerShell
Copyright (C) Microsoft Corporation. All rights reserved.

新しいクロスプラットフォームの PowerShell をお試しください https://aka.ms/pscore6

(otameshi) [otameshi]$

で、こうなる、と。

これでよし。

めでたしめでたし。

でも仮想環境に入ったときにコマンドプロンプトになってしまうのは何故なのだ。

ワタシはPowerShellを使いたいんですけど。。。

pipenv shell

の代わりに

pipenv run PowerShell

としたらPowerShellが出てくるようになったけど、うーん、ちょっとめんどい。

実施環境

Windows10 Home 21H2

Python 3.10.4

pipenv; version 2022.4.21

PowerShell version; 5.1.19041.1682

Windows ターミナル バージョン: 1.12.10982.0

参考にしたサイト

プロファイルについて – PowerShell | Microsoft Docs

プロンプトについて – PowerShell | Microsoft Docs

https://github.com/pypa/pipenv/issues/3505


さてと、こんなのいかがでしょう?


Pythonコードレシピ集



ちょっと広告です
https://business.xserver.ne.jp/

https://www.xdomain.ne.jp/

wpX Speed / wpX

★LOLIPOP★

.tokyo

MuuMuu Domain!

https://business.xserver.ne.jp/

https://www.xdomain.ne.jp/

wpX Speed / wpX

★LOLIPOP★

.tokyo

MuuMuu Domain!