PythonのvenvをActivateするときに、いちいちsourceコマンドでパスを書いてactivateするのは面倒なので、以下のような関数を作成して~/.zprofileに入れて運用しています。venvは~/pyディレクトリにまとめてあるので、そこにあるディレクトリ名だけ指定すればactivateできます。指定された名前がなければ新規作成します。
function venv_activate(){ if [ ! -d ~/py/$1 ] ; then virtualenv ~/py/$1 fi source ~/$1/bin/activate }
これはこれで便利ですが、名前を思い出せないとか言うこともしばしばなので、タブ補完で~/pyディレクトリの中を探して欲しくなり、ググって実装してみました。参考にしたのは以下の記事です。
- https://gist.github.com/hassaku63/3cc561d67992f7f02d6fa76099418727
- https://hakobe932.hatenablog.com/entry/2012/02/13/214934
どうやら~/zsh/functions/以下にファイルを作らずに、直接.zprofileに書いても問題ないようなので、以下の通りいじってみました。おそらくディレクトリを作る(そしてパスを通す)方法は、たくさん.zprofileに書いたら破綻するからという感じでしょうか。そんなに自作する予定はないので.zprofileに書く方法で行きます。
# 補完の有効化を追記 autoload -U compinit compinit -u # これはそのまま。virtualenvをつかうかpython3 -m venvを使うかはお任せします function venv_activate(){ if [ ! -d ~/py/$1 ] ; then virtualenv ~/py/$1 fi source ~/$1/bin/activate } # venv_activateの補完用関数の作成。~/pyを見に行くようにするやつ function _venv_activate { _files -W ~/py && return 0; return 1; } # 関数の本体と保管用関数の紐づけ compdef _venv_activate venv_activate
結果は以下の通り。~/pyの中身が補完できるようになりました。
% venv_activate esptool/ mastodon/ openstack/ qrcode/ flask/ misskey/ playwright/
おかげで便利にはなりましたが、仕事からちょっと脱線しましたね。業務に戻ります。