Pythonの開発環境を「pyenv+venv」の組み合わせで構築 – Raspberry PiのPython環境とのズレを防ぐ方法

みなさん、こんにちは。

最近はラズベリーパイに Python を入れて納品するお仕事が増えてきました。そこでいつも頭を悩ませるのが、「開発環境と納品環境のズレ」をどうやってなくすか、という点です。

ラズベリーパイの OS バージョンの違いは pyenv で Python のバージョンを統一して解決しています。これは以前も記事にしましたね。

しかし、開発環境では pyenv だけだと他のプロジェクトとのパッケージがごちゃ混ぜになり、思わぬトラブルが起こりがちです。

 


 

昔のやり方から新しいやり方へ

 

以前は pyenv + pipenv という組み合わせで開発を進めていました。でも、色々と試行錯誤するうちに、pyenv + venv の組み合わせがとても便利だと気づいたんです。今回は、この「pyenv + venv」の組み合わせ方についてご紹介します。

pyenvvenv の役割をおさらい

まずは、それぞれの役割を簡単におさらいしましょう。

  • pyenv: Python 本体のバージョンを管理するツールです。
    • 例えば、pyenv install 3.11.7 とコマンドを打つだけで、特定のバージョンの Python をインストールできます。これにより、「納品するラズベリーパイと同じ Python をローカルでも動かす」ことが可能になります。
    • pyenv のインストール方法はラズベリーパイと同様ですが、もしWSL2を使う場合は、以下の記事が参考になります。
  • venv: プロジェクトごとに仮想環境を作成する仕組みです。
    • venv を使えば、依存するライブラリをプロジェクトごとに完全に分離できるので、環境が衝突する心配がありません。venv は Python に標準で備わっているので、追加でインストールする必要がないのも嬉しいポイントです。

この2つを組み合わせれば、「Python のバージョンは pyenv で固定」「パッケージは venv で分離」という二段構えで、安心して開発に取り組めます。

 


 

開発環境の構築フロー

 

では、具体的な手順を見ていきましょう。

1. pyenv で Python をインストールする

まず、ラズベリーパイで使うのと同じ Python を PC にインストールします。

# pyenvでPythonをインストール
pyenv install 3.11.7

# このプロジェクトで使うバージョンを指定
cd my-project
pyenv local 3.11.7

これで、python と打てば、先ほどインストールした 3.11.7 が使えるようになります。

2. venv で仮想環境を作成する

次に、プロジェクトごとに環境を分けるために仮想環境を作ります。

# プロジェクトのルートディレクトリで仮想環境を作成
python -m venv .venv

作成した仮想環境を有効化しましょう。

# 有効化(Linux/Mac)
source .venv/bin/activate

# 有効化(Windows PowerShell)
.venv\Scripts\Activate.ps1

これで、.venv ディレクトリの中に、このプロジェクト専用のパッケージ環境ができました。

3. パッケージをインストールする

仮想環境が有効化されている状態で pip を使って必要なパッケージをインストールします。

pip install requests
pip install numpy

プロジェクトの依存ライブラリを requirements.txt にまとめておくと、他の環境でも簡単に再現できるのでとても便利です。

pip freeze > requirements.txt

 


 

なぜこの組み合わせが必要なのか?

 

ラズベリーパイ納品時に安心!

pyenv でバージョンを合わせておけば、「開発環境では動いたのに、納品したら動かない」といった事故を未然に防げます。

開発プロジェクトごとに環境を分離できる

venv を使うことで、プロジェクト A とプロジェクト B の依存パッケージが干渉することがなくなります。これで、開発環境がごちゃごちゃになる心配もありません。

誰でも同じ環境を再現可能!

pyenv で Python のバージョンを固定し、venv でパッケージを分離、さらに requirements.txt で依存関係を固定する。この3つを組み合わせることで、誰がどこで作業しても同じ開発環境を再現できるようになります。

 


 

まとめ

 

  • pyenv – Python 本体のバージョンを揃える
  • venv – プロジェクトごとの依存パッケージを分離する

ラズベリーパイにPythonスクリプトを設定して納品するような案件では、まず pyenv で Python のバージョンを統一し、さらに開発環境では venv で仮想環境を作るのが、トラブルを防ぐためのベストなやり方だと実感しています。

しかし、最近は pyenv + venv の代わりに uv を使うケースも増えているようです。次回は「uv を使った場合のワークフロー」についてもまとめてみたいと思います。

 

本日も最後までお読みいただき、ありがとうございました。

それでは、よい Python ライフを!

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

上部へスクロール