【簡単Python】venvでサクッと仮想環境を用意してみる【Mac開発環境構築】

venvでPython仮想環境を作成する

概要

私はよく開発環境にDockerを使用しますが、特に誰かと共有するわけでもない開発環境の時やサクッとお試しで実行したい時には「venv」で良いのではないかと思います。そういうわけで、今回は「venv」でサクッとPythonの仮想環境を準備したいと思います。

venv参考:venv 仮想環境の作成 Python ドキュメント

せっかくなので、用意した仮想環境にパッケージ(ライブラリ)をインストールして、簡単なアプリを作ってみたいと思います。

なぜわざわざ仮想環境を構築するのか?

それは、独立した場所を用意してあげて、その中だけで動いてもらうようにするためです。実際のところ、開発を進めていくにあたり様々な機能を追加変更削除を想像以上に繰り返し行います。

もしもご自身が使用しているPCに、機能を次々と直接入れていった結果どうなるでしょうか?

まず整理整頓が大変そう・・・。

バージョンを上げたり下げたりしないと機能が使えないものが存在してくる。

関係のないはずの機能同士で互換性の問題が生じる。

パッケージ化してみんなに配布しようにも、どれとどの機能を使用してたかよくわからなくなってしまった。

と、挙げたらたくさんのデメリットが出てきます。
そんなデメリットさけるために使われるのが仮想環境です!

仮想環境のメリットは、
・他に影響を及ぼさずに独立した場所を簡単に増設・移行・削除ができる。
・他に影響を及ぼさずに独立した場所の中で、機能のバージョンを上げたり下げたりできる。
・他に影響を及ぼさずに独立した場所の中で、Pythonのバージョンを上げたり下げたりできる。
・他に影響を及ぼさずに独立した場所の中で、機能の追加変更削除ができる。
ここで言う『独立した場所』が『仮想環境』そのものなのです。

今回使用した道具

  • PC(Mac mini)
  • ターミナル
  • VS Code(仮想環境構築後に遊びたい方はエディタを用意しておいてください)

開発ディレクトリを用意

作業を行うディレクトリをターミナルで作成します。

global_hackの部分はご自身のPCに合わせてください。python-projectの部分はこれから作成するプロジェクトの名前にでもしておくと良いでしょう。

$ mkdir /Users/global_hack/Developer/python-project

仮想環境を用意する

先ほど作成したディレクトリへ移動します。

$ cd /Users/global_hack/Developer/python-project

移動ができたら、下記のコマンドを実行。

fdzの部分は任意です。慣例的に「.venv」とすることが多いですが、ご自身が管理しやすければ何でも構いません。

$ python3 -m venv fdz

python3が入っていない場合はこちらのPython(公式)からダウンロードし、インストールしておいてください。

これで仮想環境の用意が完了しました。

仮想環境を起動させる

下記のコマンドで仮想環境を起動することができます。fdzの部分は先ほど任意で付けた名前です。

$ source fdz/bin/activate

仮想環境を終了させる

下記のコマンドで仮想環境を終了します。

(fdz)は先ほど任意で付けた名前です。これが表示されているときは起動している状態です。

(fdz) $ deactivate

仮想環境を削除する

下記のコマンドで削除できます。

$ rm -rf fdz

ここまで起動・終了・削除までを説明してきましたが、次は仮想環境内での作業になりますので、もし削除されてしまった方は、お手数ですがもう一度「仮想環境を起動させる」ところまで進めておいてください。

 

仮想環境内でインストール済みのパッケージを表示

今この独立した場所にどんな機能が備わっているか確認してみましょう。

下記のコマンドでパッケージの一覧が表示されます。

(fdz) $ pip3 list

コマンド実行結果。

Package    Version
---------- -------
pip        22.0.4
setuptools 60.10.0
WARNING: You are using pip version 22.0.4; however, version 22.1 is available.
You should consider upgrading via the '/Users/global_hack/Developer/python-project/fdz/bin/python3.9 -m pip install --upgrade pip' command.

ここでバージョンアップ催促のWARNINGが表示されたので、とりあえずここではアップグレードしますが、場合によっては互換性の問題が生じるパッケージもあります。

(fdz) $ /Users/global_hack/Developer/python-project/fdz/bin/python3.9 -m pip install --upgrade pip

仮想環境にパッケージをインストール

下記の要領でパッケージをインストールします。

(fdz) $ pip3 install パッケージ名==バージョン

ピンポイントにバージョン指定する他、細かい範囲指定も可能で、下記リンクを参考にしてみるといいと思います。

pip installのバージョン指定方法

(fdz) $ pip3 install Cython
(fdz) $ pip3 install onnxruntime==1.11.1

再度、パッケージ一覧を出力して確認します。

(fdz) $ pip3 list
Package     Version
----------- -------
Cython      0.29.28
flatbuffers 2.0
numpy       1.22.3
onnxruntime 1.11.1
pip         22.1
protobuf    3.20.1
setuptools  60.10.0

パッケージのインストールもできましたね!

パッケージ一覧を保存する

毎回何度も仮想環境ごとにパッケージを一つずつ探して取得して・・・とやっていたら時間がかかりますよね?

そんなときに便利なのが「requirements.txt」です!

慣例的に「requirements.txt」という名前が使われているだけですので、ファイル名は自由につけていただいて構いません。

下記のコマンドで作成します。

(fdz) $ pip freeze > requirements.txt

作成できたファイルをviやcatコマンドで確認してみてください!

(fdz) $ vi /Users/global_hack/Developer/python-project/requirements.txt
Cython==0.29.28
flatbuffers==2.0
numpy==1.22.3
onnxruntime==1.11.1
protobuf==3.20.1

上記のようにパッケージが一行ごとに書き込まれていたら保存成功です!

別の仮想環境に一括でパッケージをインストールする

下記のコマンドは、パッケージを他の人とgithubなどで共有したり、本番環境へ反映させたりするときにとても便利です。

別の仮想環境先(fdz2)にて実行します。

(fdz2) $ pip3 install -r /Users/global_hack/Developer/python-project/requirements.txt

これで別の環境に一括でパッケージをインストールできました。

なお上記のように、ディレクトリをフルパスで取得したい場合は、pwdコマンドで現在いるディレクトリが調べられます。

とりあえず、仮想環境構築はここまでです。

画像から顔検出してみる

記事を書いている当初、仮想環境を構築までに留めておくつもりでしたが、急遽何か作ってみたくなりましたので、このまま先ほどインストールしたパッケージを利用して簡単な顔検出アプリを作ってみます。

まず顔検出のためのパッケージを追加しておきましょう。

(fdz) $ pip3 install insightface

前項目までで揃えてきた仮想環境のディレクトリ構成を用いて、最終的に下記のようにしました。

 fdz ━━ bin
     ┣━ include
     ┣━ insightface
     ┣━ lib
     ┣━ share
     ┣━ fdz.py
     ┣━ girls-kimono-input.jpg
     ┗━ pyvenv.cfg
 img ━━ ここに解析結果の画像

先ほどインストールしたパッケージ「insightface」をメインに使用します。

詳細はこちら insightface 2D and 3D Face Analysis Project (github)

コード(fdz.py)については、上記リンクからサンプルコードが用意されてましたので参考にしました。

# fdz.py
import os
import cv2
import numpy as np
from insightface.app import FaceAnalysis

image_file_path = os.getcwd() + "/fdz/girls-kimono-input.jpg"
img             = cv2.imread(image_file_path)

app   = FaceAnalysis()
app.prepare(ctx_id=0, det_size=(640, 640))
faces = app.get(np.asarray(img))
rimg  = app.draw_on(img, faces)
cv2.imwrite("./img/girls-kimono-output.jpg", rimg)

上記のfdz.pyを実行することによってimgディレクトリに解析結果の画像が収納される仕組みです。

使用したフリー画像が下記になります。

python-InsightFaceを使った顔検出用の素材

準備が整ったら早速実行してみよう!

実行コマンドは下記になります。VSCodeなどエディタを使っている方は、プラグインを利用して実行してみても構いません。

(fdz) $ python3 /Users/global_hack/Developer/python-project/fdz/fdz.py

顔検出解析結果

解析結果画像の保存場所はfdzディレクトリと同じ階層のimgディレクトリで、ファイル名はgirls-kimono-output.jpgになります。

python-InsightFaceで顔検出結果

上記のように顔が検出できていればOKです!

まとめ

仮想環境構築から簡易アプリ作成までをざっくりとご紹介しました。Pythonライブラリは世界中にたくさんあり、作っていてとても楽しく感じられます。

とりあえず仮想環境の構築とパッケージインストールさえおさえてしまえば色々なことができますので、是非チャレンジしてみてください!!!

About Naoki 24 Articles
デザインを含めたフロントエンドから、インフラ含めたバックエンドまで広く浅く活動しているエンジニアです。主にSaasの開発・営業・運営管理などをしております。毎日デスマーチがモットーなブラックエンジニアです。 私が管理しているクラウドソフトウェアがこちらです→まとめツール倶楽部『MTCsystem』

Be the first to comment

Leave a Reply

Your email address will not be published.


*


CAPTCHA


日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)