Help us understand the problem. What is going on with this article?

Windowsの pipenv shellでも履歴機能が使いたい

More than 1 year has passed since last update.

背景

Python仮想環境として pipenv を利用しているのですが、Windowsのコマンドプロンプトでは、pipenv shell で起ち上げた仮想環境のサブシェルの中で ↑↓ によるコマンド履歴表示が効かない という問題に直面したため、回避策をまとめました。

環境

  • OS: Windows 10 Pro
  • Python: 3.7.0
  • pipenv: 2018.7.1
  • PowerShell: 5.1.17134.228

試したが駄目だったこと

コマンドプロンプトで何とかする方法はないか?

以下の issueで取り上げられていますが、2018/9/12現在解消法はないようです。
up/down arrow history doesn't work on pipenv shell on windows #876

Git Bashではどうか?

Git Bashや Cygwinでは、Pythonが パスを取り違えていろいろと不具合が起きるようで、非推奨かつ不具合の素のようです。
pipenv shell does not work when running Git for Windows' bash on Windows #2623

実際に試した結果がこちら。
gitBash_pip.PNG
Launching subshell in virtual environment とありますが、その後文字化けもしていて、かつ pip list の結果がサブシェルに入る前後で変わっていません。
本当は、仮想環境中には flask などが入っています。

ファイルパスが変わって os.path が変わってしまうからしょうがないようです。そもそも Python自体起動できない......
回避策もないことはないようですが、何を変更していてどんな副作用があるか理解できる人でないと、推奨はしないとのことです。

回避策

そしてたどり着いた回避策が、PowerShellを使う です。

自分の業務だと Windowsではコマンドプロンプトにしか触れず、batファイルを作ることはあっても ps1ファイル1を作ることはなかったため、避けていました。

しかし、PowerShell上では、pipenv shell中 ↑↓ での履歴が呼び出し使えました!
powerShell_pip.PNG
Git Bashのときと違い、ちゃんと pipenv shell の前後で pip list の結果も変わっていますね。

なお、個人的に PowerShellのデフォルトの背景色、フォントがしっくりこなかったため、変更しています。
フォントは、最近 (言うほど最近でもないけど) 話題の、Adobe・Google製の「源ノ角ゴシック」を TrueTypeに変更した、源真ゴシック の等幅フォントを利用しています。
ダウンロードはこちらから。
http://jikasei.me/font/genshin/

解凍後、利用したいフォントの ttf ファイルを右クリックからインストールすれば、利用可能となります。

また、PowerShellで文字がない状態でバックスペースを押すとビープ音が鳴るのがいやだったので、こちらのサイト様の記事を参考に設定を変更しています。
https://ite.cexen.info/powershell-%E3%82%92%E4%BE%BF%E5%88%A9%E3%81%AB%E4%BD%BF%E3%81%86%E3%81%9F%E3%82%81%E3%81%AE%E8%A8%AD%E5%AE%9A/

なお、記事中で実際に対応するのは

  • .ps1ファイルを実行可能にする
  • プロファイルを作成する
  • 補足:ビープ音を消す

だけで大丈夫です。
上記サイト様では emacs風キーバインドの利用を前提にコマンドを書かれています。
標準の設定ならば、ビープ音消去の設定はプロファイルに

$profile
Set-PSReadlineOption -BellStyle None

と記載するだけで問題ありません。

これで最低限の設定も完了し、Windowsでも快適に pipenv shellが使えます!

補足:それでも気になったこと

それでもやはり気になることが 2点ほど。

1. 利用中の仮想環境を示す表示が出ない

上に貼った PowerShellの画像を見ていただけると分かるのですが、コマンドプロンプトでの利用時は出ていた、利用中の仮想環境名を示す表示がありません
コマンドプロンプトでは、カレントディレクトリを示す表示の左に、() で仮想環境名を表示していて、今仮想環境にいるのかどうかが一目瞭然でした、これが使えないのは残念。

2. PowerShellのプロパティのフォントタブを開くたびに出るダイアログがうるさい

これはフォントの変更に起因するのですが、PowerShellプロパティのフォントタブを開くと、「ポイント サイズには 5 から 72 を指定してください。」というダイアログが 4、5回出てきてうっとうしいです。

軽く調べたり、レジストリいじってみたりしましたが、回避策は現状なさそうです。
一度設定してしまえばそう頻繁に開くところでもないので、我慢。

結論

以上、Windowsで pipenv shellを使う方は、PowerShellで使うと少し快適になる と思います。
そのほかの回避策や問題の回避策など、ありましたらコメントいただけると幸いです。


  1. PowerShell用の batのようなもの 

kangetsu121
認知・教育心理の修士課程を経て IT業界に進みました。 新卒で Webアプリの会社のカスタマーサクセスとして働き、現在転職してインフラ系 QAチーム。 Pythonでアプリやツールを作ったりもします。
https://www.kangetsu121.work/
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away