【Windows】amplify pushで「pipenv」「venv」のエラーが出る

  • 2024年9月8日
  • 2024年9月8日
  • AWS, Python
AWS

こんにちはますのです。
Amazon Bedrockで何か作ってみようと思い、Amplifyを初めて触っています。

そもそもPythonの環境を作っていないのでそこで詰まったという状態です。
事前準備で時間を取られた切なさも噛み締めて、今後の自分のためにメモを残します。

環境

  • OS:Windows11
  • Python:3.12(最新)
  • IDE:VScode

エラー内容

amplify addでAPIGatewayとLambdaを定義し、pushコマンドを実行したところ以下のエラーが出ました。

> amplify push
√ Successfully pulled backend environment dev from the cloud.

🛑 You must have pipenv installed and available on your PATH as "pipenv". It can be installed by running "pip3 install --user pipenv".
You must have virtualenv installed and available on your PATH as "venv". It can be installed by running "pip3 install venv".
🛑 Missing required dependencies to package [amplify name]

Pythonのバージョンが古すぎて再構築したのですが、何やら足りてない様子。
エラーを見る限り、環境変数のPATHが未設定かインストールされてないと予想です。

pipenv / venv インストール

エラーに記載されているコマンドを実行し、どちらも既にインストールはされている状況でした。

> pip3 install --user pipenv
Requirement already satisfied: pipenv in c:\users\(ユーザ名)\appdata\roaming\python\python312\site-packages (2024.0.1)
Requirement already satisfied: certifi in c:\users\(ユーザ名)\appdata\roaming\python\python312\site-packages (from pipenv) (2024.8.30)
Requirement already satisfied: setuptools>=67 in c:\users\(ユーザ名)\appdata\roaming\python\python312\site-packages (from pipenv) (74.1.2)
Requirement already satisfied: virtualenv>=20.24.2 in c:\users\(ユーザ名)\appdata\roaming\python\python312\site-packages (from pipenv) (20.26.4)
Requirement already satisfied: distlib<1,>=0.3.7 in c:\users\(ユーザ名)\appdata\roaming\python\python312\site-packages (from virtualenv>=20.24.2->pipenv) (0.3.8)
Requirement already satisfied: filelock<4,>=3.12.2 in c:\users\(ユーザ名)\appdata\roaming\python\python312\site-packages (from virtualenv>=20.24.2->pipenv) (3.16.0)
Requirement already satisfied: platformdirs<5,>=3.9.1 in c:\users\(ユーザ名)\appdata\roaming\python\python312\site-packages (from virtualenv>=20.24.2->pipenv) (4.3.1)
> pip install virtualenv
Requirement already satisfied: virtualenv in c:\users\(ユーザ名)\appdata\roaming\python\python312\site-packages (20.26.4)
Requirement already satisfied: distlib<1,>=0.3.7 in c:\(ユーザ名)\masno\appdata\roaming\python\python312\site-packages (from virtualenv) (0.3.8)
Requirement already satisfied: filelock<4,>=3.12.2 in c:\(ユーザ名)\masno\appdata\roaming\python\python312\site-packages (from virtualenv) (3.16.0)
Requirement already satisfied: platformdirs<5,>=3.9.1 in c:\(ユーザ名)\masno\appdata\roaming\python\python312\site-packages (from virtualenv) (4.3.1)

pipenv / venv 環境変数(PATH)設定

pipenvのドキュメント日本語翻訳サイトに環境変数への追加方法の記載がありました。
先ほどinstallコマンドを実行した時に記載されているパスが該当しそうです。
「site-packages」を「Scripts」に書き換えたものを環境変数に設定します。

Windows では python -m site –user-site を実行してユーザーのベースバイナリディレクトリを見付け、 site-packages を Scripts で置き換えます。
例えば、このコマンドは C:\Users\Username\AppData\Roaming\Python36\site-packages のようなパスを返すので、 C:\Users\Username\AppData\Roaming\Python36\Scripts を PATH に含める必要があります。
引用:https://pipenv-ja.readthedocs.io/ja/translate-ja/install.html#pragmatic-installation-of-pipenv

  • 「スタートメニュー」→「設定」→「システム」→「バージョン情報」→「システムの詳細設定」を開きます。
  • システムのプロパティ画面から「環境変数」を開きます。
  • 「(ユーザ名)のユーザー環境変数」内から「Path」を選択 → 「編集」をクリック。
  • 「新規」をクリック→各自のpipenv / venvのインストール先を入力して保存
    • C:\Users\(ユーザ名)\AppData\Roaming\Python**\Scripts
  • 「OK」をクリックして完了

PATH設定後、VSCodeやPowerShellなどのターミナルソフトを再起動させて

amplify push

コマンドが成功すれば完了です。

余談:pyenvインストール

venvが既に入っていましたが、あれこれ試している再に「pyenv」のインストールを事前に行っています。
もしかしたらこれが必要かもしれないため、あわせてメモです。

pyenvが終われば,もう全て終わったようなものである.

先に記した仮想環境の構築のためのツールがvenvな訳だが,これはPython 3.3以降のPython 3.xには標準で搭載されている.つまり,pyenvで3.3以降のPythonを入れておけば殆ど準備が済んでいる.

参考サイト:https://qiita.com/ShotaDeguchi/items/d2e08c135f2eebaa624b#pyenv–pyenv-win

Pythonインストール完了後、以下コマンドを実行します。

pip install pyenv-win --target %USERPROFILE%\\.pyenv

続いて環境変数の設定をPowerShellで行います。

手順:https://github.com/pyenv-win/pyenv-win/blob/master/docs/installation.md#add-system-settings

1.PYENV、PYENV_HOME、PYENV_ROOTを環境変数に追加

[System.Environment]::SetEnvironmentVariable('PYENV',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

[System.Environment]::SetEnvironmentVariable('PYENV_ROOT',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

[System.Environment]::SetEnvironmentVariable('PYENV_HOME',$env:USERPROFILE + "\.pyenv\pyenv-win\","User")

2.pyenvコマンドにアクセスするために、次のパスをUSER PATH変数に追加

[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\.pyenv\pyenv-win\bin;" + $env:USERPROFILE + "\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")

PowerShellやコマンドプロンプトなど、ターミナルソフトを再起動して動作確認します。

pyenv --version

バージョン情報が返ってきたら完了です。

参考サイト

最新情報をチェックしよう!