Python venv チートシート

いくつかの役に立つ venv コマンド

目次

Venv は、仮想環境管理のコマンドラインツール. Anaconda と比較して、はるかにシンプルです。 いくつかの役立つ venv コマンドを以下に示します。

Python が木箱を開こうとしています。

Python venv チェックシート

仮想環境の作成

  • 標準コマンド (Python 3.3+):

    python -m venv venv
    

    これにより、現在のディレクトリに venv という名前の仮想環境が作成されます。

  • 特定の Python バージョンを使用して (インストール済みの場合):

    python3.10 -m venv venv
    

    または virtualenv を使用して:

    virtualenv -p /usr/local/bin/python3.10 venv
    

    (virtualenv パッケージが必要です)。

仮想環境のアクティベート

  • Windows:
    .\venv\Scripts\activate
    
  • macOS/Linux:
    source venv/bin/activate
    
    シェルプロンプトは今や環境名を表示するようになります。

仮想環境の非アクティベート

  • すべてのプラットフォーム:
    deactivate
    
    これにより、システムの Python に戻ります。

パッケージのインストール

  • pip で:
    pip install
    
    例:
    pip install numpy pandas
    
  • pip のアップグレード (推奨):
    python -m pip install --upgrade pip
    

依存関係の凍結とエクスポート

  • 現在の環境のパッケージを保存:
    pip freeze > requirements.txt
    
  • requirements ファイルからインストール:
    pip install -r requirements.txt
    
    これらのコマンドを実行する前に、仮想環境がアクティブになっていることを確認してください。

仮想環境の削除

deactivate
rm -rf <env path>

Python 仮想環境を管理する際のよくある落とし穴

仮想環境をアクティブに忘れる

  • 仮想環境をアクティブにせずにコマンドを実行してしまうというミスは頻繁に起こります。これにより、グローバル環境や誤った venv にパッケージがインストールされ、依存関係の競合や予測不能な動作が生じることがあります。

パッケージバージョンを固定しない

  • requirements.txt>= などの緩いバージョン指定を使用すると、再現性が損なわれます。正確なバージョン指定により、プロジェクトに関わるすべての人が同じパッケージバージョンを使用し、デプロイや協働中に予期せぬ問題が発生するのを防ぐことができます。

グローバル環境と仮想環境を混同する

  • グローバルにパッケージをインストールしたり、グローバル環境と仮想環境を混同したりすると、特に異なるプロジェクトが互換性のないパッケージバージョンを必要とする場合に、競合が発生します。常に正しい環境で作業していることを確認してください。

仮想環境をバージョン管理に含める

  • 仮想環境ディレクトリ(例: venv/)をバージョン管理に含めると、リポジトリが肥大化し、不要です。常に venv ディレクトリを .gitignore に追加して、リポジトリを清潔に保ってください。

開発と本番の依存関係を区別しない

  • 開発と本番の依存関係を区別しないと、デプロイが肥大化したり、セキュリティが脅かされることがあります。それぞれの依存関係を別の requirements ファイルや設定セクションに分けるようにしてください。

環境設定の文書化や自動化の欠如

  • 環境設定の手順を文書化しない、または自動化(スクリプトや Makefile で)しないと、新規の貢献者をオンボーディングしたり、環境を再現したりするのが難しくなります。

古い仮想環境を定期的に削除しない

  • 時間が経つと、使用されていない仮想環境がたまり、ディスク容量を浪費し、混乱を引き起こします。定期的に不要な venv を削除して、作業スペースを整えてください。

システム Python とパッケージマネージャーの境界を無視する

  • システム Python を変更したり、システムパッケージマネージャーと pip を混同したりすると、システムツールが破損し、診断が困難な問題が発生します。プロジェクトの依存関係には常に venv を使用し、システムで管理されているパッケージに干渉しないようにしてください。

要約表

落とし穴 影響
仮想環境をアクティブに忘れる 間違った環境にパッケージをインストール
パッケージバージョンを固定しない 予測不能なビルド、再現困難なバグ
グローバル環境と仮想環境を混同する 依存関係/バージョンの競合
仮想環境ディレクトリをバージョン管理に含める リポジトリが肥大化、混乱
開発と本番の依存関係を区別しない 肥大化/不安全な本番環境
文書化や自動化の欠如 オンボーディングが困難、設定が不一致
古い仮想環境を定期的に削除しない ディスク容量の浪費、混乱
システム Python やパッケージを変更する システムの不安定、ツールの破損

仮想環境を常にアクティブにし、依存関係を固定し、環境を分離し、明確な文書化を行うことで、これらのよくある落とし穴を避けることができます。

Conda と Python 仮想環境の再現性における主な違い

特徴 Conda 環境 Python 仮想環境 (venv/virtualenv)
管理の範囲 Python パッケージと非 Python 依存関係(例: システムライブラリ、コンパイラ)を管理 pip を介して Python パッケージのみを管理
Python バージョン管理 環境ごとに任意の Python バージョンを指定してインストール可能 システムにインストールされた Python バージョンを使用
プラットフォーム間の一貫性 すべての依存関係を管理するため、OS(Windows、macOS、Linux)間でより一貫性がある システムライブラリに依存するため、OSごとに異なる可能性あり
パッケージのソース Conda リポジトリ(事前コンパイル済みバイナリ、科学スタック)を使用 PyPI(pip)で Python パッケージを取得
再現性 複雑な、科学的、または複数言語プロジェクトではより高い;conda env export でフル環境をエクスポート可能 純粋な Python プロジェクトでは良好;システム依存関係が関与している場合、再現性が損なわれる可能性あり
非 Python 依存関係の管理 インストールおよび管理可能(例: OpenBLAS、libpng) 管理不可;別途インストールが必要
環境のエクスポート/インポート conda env export / conda env create で完全な再現性を実現 pip freeze > requirements.txt / pip install -r requirements.txt(Python パッケージのみ)
パフォーマンス 大規模な科学パッケージ(例: numpy、pandas)ではより高速で信頼性が高い Windows ではソースからコンパイルが必要な場合あり
複雑性 設定および管理のオーバーヘッドがやや高い 基本的な Python プロジェクトには軽量で簡単

主なポイントの要約

  • Conda 環境 は、Python と非 Python 依存関係の両方を必要とするプロジェクト、またはプラットフォーム間で正確な再現性が重要なプロジェクトに最適です。Conda は、Python 自身、ライブラリ、コンパイラを含むすべてのスタックを管理するため、特にデータサイエンスや研究の文脈で環境を共有および再現するのが簡単になります。

  • Python 仮想環境 (venv/virtualenv) は、純粋な Python プロジェクトで Python 依存関係を分離するのに軽量で優れています。しかし、システムレベルや非 Python 依存関係を管理しないので、外部ライブラリや特定のシステム構成に依存するプロジェクトでは再現性が損なわれる可能性があります。

  • 環境のエクスポートと共有:Conda は、すべての依存関係とバージョンを含む環境の仕様をエクスポート (conda env export) でき、他の場所で正確に再現可能です。仮想環境では、pip freeze は Python パッケージのみをキャプチャし、システム依存関係や Python インタープリタのバージョンは含まれません。

  • 結論
    科学的、クロスプラットフォーム、または 複雑なプロジェクト では Conda を使用して、最大限の再現性を実現してください。 システム依存関係が問題にならない軽量な純粋な Python プロジェクトでは、Python 仮想環境 (venv/virtualenv) を使用してください。

有用なリンク