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
ちょっと広告です
https://business.xserver.ne.jp/
https://www.xdomain.ne.jp/
★LOLIPOP★
.tokyo
MuuMuu Domain!
ちょっと広告です
https://business.xserver.ne.jp/
https://www.xdomain.ne.jp/
★LOLIPOP★
.tokyo
MuuMuu Domain!