5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

2021年にもなって pyenv-virtualenv の可能性を主張してみる

Posted at

なにこれ?

pipenvやpoetryを皆が使っている2021年に、とある目的にpyenv-virtualenvがぴったりということに気が付いたので、紹介します。

pyenv-virtualenv って何?

pythonの仮想環境構築ツールの一つです。pyenvの拡張機能です。通常のpyenvではpyenv local 3.8.7のように、pyenv公式が用意したバージョン名を指定して環境を制御しますが、pyenv-virtualenvを使うとpyenv local saishinbanのように好きな環境名が指定でき、この環境名で環境を切り分けることができます。

Qiita内にpyenv-virtualenvの記事はたくさんあるので、これくらいの雑な説明にとどめます。より詳しく知りたくなったら、公式のREADMEや他の記事を参考にしてください。

何に気づいたの?

皆さんは、趣味や仕事で俺が考えた最強のCLIツールをpythonで書いていることでしょう。そして、今風に(2021年)poetry等を使ってパッケージ管理していることでしょう。そんなこんなでそれっぽいツールができてきたとしましょう。さて、このCLIツールはどうやって動かすのが良いでしょうか?

  1. dockerこそ至高
  2. 開発と同じpoetry/pipenvの環境をそのまま
  3. システムのpythonにえいやー
  4. その他

すぐ答えを言ってしまうと、4のその他で、pyenv-virtualenvがぴったりです。

ダメ出し(1,2,3)

まず、1,2,3のダメ出しすると次のようになります。

ケース 問題点
1. docker CLIツールはローカルのディレクトリやファイル等を扱ったりすることが多く、マウント・権限管理が必要で、手間やリスク(下手に/をマウントしてファイル全消し等)がつきまとう
2. 開発と同じ poetryやpipenvを使う場合、まずそのディレクトリに行ってから操作する必要があり、面倒(CLIの引数のパスの扱いも面倒)
3. システム 依存関係の管理はどこに行ってしまったのか・・・

まあ、気合で頑張ったりリスクを無視するのならできなくも無いですが、どれもやりたくは無いですね。

答え(pyenv-virtualenv)

次のようにpyenv-virtualenv環境を作成します。

$ pyenv install X.X.X  # 好きなバージョンのインストール(すでにインストール済みなら不要)
$ pyenv virtualenv X.X.X mytoolenv
$ pyenv shell mytoolenv
$ pip install -e PATH/TO/mytool  # ここで、あなたの最強のCLIツールをインストールします(poetryを使う場合setup.pyがなく、`pip install -e`が使えないため注意)

そして、適当にPATHの通ったディレクトリにツール名と同じ名前のファイルを作成し(例ではツール名がmytoolとします)、以下の内容を記述して実行権限を与えておきます。

#! /bin/bash
eval "$(pyenv init -)"
pyenv shell mytoolenv
mytool $*

これで、mytoolと叩くと、専用の仮想環境で動作させれます。setup.pyを排除したやり方を取っていて、pip install -eが使えない場合は、インストールし直すスクリプトを用意するとはかどります。

この方法の魅力は、どのディレクトリにいてもツールが使え、それでいてそれなりの仮想環境(dockerほどではない)を準備できる点です。

まとめ

2021年でもpyenv-virtualenvを使うと良いケースがあります。似た悩みに直面している方は一考してみてください。

5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?