Closed1

【PowerShell】Poetryのプロジェクトでvirtualenv(仮想環境)をディレクトリ直下に配置するコマンド関係でハマりやすい点のメモ

ツイーティ・ザ・フォックスツイーティ・ザ・フォックス

メモ概要

Poetryのプロジェクトのvirtualenv(仮想環境)を、プロジェクトのディレクトリ直下に作成する方法(VSCodeに認識させる&Gitで管理)の記事を見た。 自分で使う用に少し手順を変えたコマンドを作成しようとしたら、少しハマってしまったので注意点をメモ。最初の投稿時にコマンドが色々間違っていたので修正した

動作確認した環境
・OS:Windows10
・Python:v3.11.0
・Poetry:v1.8.3
・PowerShell:v5.1.19041.4412
 

【まずこれを読む】参考にした記事とドキュメントのページ

これらの記事とページを参考にコマンドを組んだ。
https://zenn.dev/pollenjp/articles/2022-05-29-beginning-poetry
https://zenn.dev/takanori_is/articles/let-poetry-create-virtualenv-under-project-folder
https://cocoatomo.github.io/poetry-ja/basic-usage/
 

プロジェクト新規作成用のコマンド(PowerShell)

プロジェクト作成前にpoetry config virtualenvs.in-project trueを打って、Poetryのグローバルの設定でvirtualenvをディレクトリ直下に配置するようにした後に、poetry new project_nameを打っても同じ結果が得られる。

グローバルの設定を変更せずに、コマンドだけでやりたい場合はこれでやる。

# プロジェクト名を指定して新規作成
poetry new project_name
# プロジェクトのディレクトリに移動
cd project_name

# virtualenv(仮想環境)をプロジェクトのディレクトリ直下に作成する設定
# が書かれたpoetry.tomlを、プロジェクト内に作成
poetry config virtualenvs.in-project true --local

# 依存関係をインストールするコマンドを実行(ディレクトリ直下に仮想環境を作成)
# 超重要:poetry addを先にやってしまうとキャッシュの方に仮想環境が作られて
# 仮想環境の配置先を変更するコマンド(次のページにある)を打つ必要が出てきてしまうので注意!
poetry install

# これでvirtualenv(仮想環境)のディレクトリ「.venv」ができていたら成功
# プロジェクトのディレクトリ構造はこんな感じになるはず
# .
# ├── .venv
# ├── README.md
# ├── poetry.lock
# ├── poetry.toml
# ├── pyproject.toml
# ├── project_name
# │   └── __init__.py
# └── tests
#     └── __init__.py

# 確認コマンド
# virtualenv(仮想環境)のパスがディレクトリ直下になっていたら成功
poetry env list
poetry env info --path

 

既にキャッシュに仮想環境を作成しているプロジェクトで、仮想環境の配置先をディレクトリ直下に変更するコマンド

既存の「キャッシュに仮想環境を配置しているプロジェクト」に対して、仮想環境の配置先をプロジェクトのディレクトリ直下に変更したい場合は、このコマンドを打つ。

# プロジェクトのディレクトリに移動
cd project_name

# キャッシュに作成されたvirtualenv(仮想環境)のパスを変数に格納
$tmp_venv_pass = poetry env info --path

# virtualenv(仮想環境)のパスから、最後の項目部分(仮想環境名)だけを取得して変数に格納
# 参考:https://hiros-dot.net/PowerShell/path/path04.htm
$tmp_venv_name = Split-Path $tmp_venv_pass -leaf

# キャッシュに作成されたvirtualenv(仮想環境)を削除:参考記事を参照
# これを削除しないとディレクトリ直下にvirtualenv(仮想環境)を作る設定を適用できない
# 重要:「poetry env info --path」で取得できる仮想環境のフルパスを加工なしで
# これの引数に指定すると「[WinError 5] アクセスが拒否されました。」のエラーで削除できないので注意
poetry env remove $tmp_venv_name

# virtualenv(仮想環境)をプロジェクトのディレクトリ直下に作成する設定
# が書かれたpoetry.tomlを、プロジェクト内に作成
poetry config virtualenvs.in-project true --local

# 依存関係をインストールするコマンドを実行(ここで仮想環境を作成)
poetry install

# これでvirtualenv(仮想環境)のディレクトリ「.venv」ができていたら成功
# プロジェクトのディレクトリ構造はこんな感じになるはず
# .
# ├── .venv
# ├── README.md
# ├── poetry.lock
# ├── poetry.toml
# ├── pyproject.toml
# ├── project_name
# │   └── __init__.py
# └── tests
#     └── __init__.py

# 確認コマンド
# virtualenv(仮想環境)のパスがディレクトリ直下になっていたら成功
poetry env list
poetry env info --path
このスクラップは5ヶ月前にクローズされました