pyenvとは?windowsではpyenv-win

pyenv とは?

pyenv は、複数のPythonバージョンを簡単にインストール・切り替えできるツールです。例えば、特定のプロジェクトでPython 3.9を使いながら、他のプロジェクトでPython 3.7を使う、といったことが可能になります。

なぜ pyenv が便利なのか?

  1. 複数バージョンのPythonを管理できる:
    • 通常、Pythonをインストールすると一つのバージョンしか使えません。しかし、プロジェクトによっては異なるバージョンのPythonが必要な場合があります。 pyenv を使うと、簡単に複数のPythonバージョンをインストールして使い分けることができます。
  2. システムPythonに影響を与えない:
    • pyenv で管理されているPythonは、システムにインストールされているPythonとは別に管理されるので、システムPythonに影響を与える心配がありません。
  3. 簡単にバージョンを切り替えられる:
    • プロジェクトごとに異なるPythonバージョンを指定することができ、pyenv コマンド一つで簡単に切り替えることができます。

システムPythonに影響を与えないという意味

  • 独立した管理: pyenv は、ユーザーのホームディレクトリ内に独自の環境を作成し、その中でPythonのバージョンを管理します。このため、pyenv でインストールしたPythonのバージョンやライブラリは、システム全体で使用されるPython(システムPython)には影響を与えません。
  • 安全性: システムPythonは、OSの一部のツールやスクリプトが依存している場合があります。pyenv を使用することで、これらのシステム依存性を変更することなく、異なるバージョンのPythonを自由にインストールしたり、プロジェクトごとに切り替えたりすることができます。
  • 互換性の維持: 特定のプロジェクトで新しいバージョンのPythonを使いたい場合、pyenv を使えばシステムPythonに影響を与えることなく新しいバージョンを試すことができます。逆に、システムPythonを更新しても、pyenv で管理されているプロジェクトには影響がありません。

pyenv の基本的な使い方

  1. インストール:
    • pyenv は、LinuxやmacOSではターミナルから、Windowsでは pyenv-win というツールを使用してインストールします。
    • インストール後、 pyenv install コマンドで任意のPythonバージョンをインストールできます。
  2. バージョンの切り替え:
    • pyenv global 3.9.1 と入力すると、Pythonのデフォルトバージョンが3.9.1に切り替わります。
    • プロジェクトごとにバージョンを設定したい場合は、プロジェクトのディレクトリに移動してから pyenv local 3.8.5 などと入力します。これにより、そのディレクトリ内でのPythonバージョンが指定したものに切り替わります。
  3. 確認:
    • 現在使用しているPythonのバージョンを確認するには、 pyenv version と入力します。

注意点

  • Windowsユーザーは、 pyenv ではなく pyenv-win を使用します。コマンドの使い方はほぼ同じですが、Windowsに特化した調整がされています。

ここがポイント
Windowsの本体にインストールされているPythonのバージョンに依存せず、 pyenv-win を使用して、新しいバージョンのPythonをインストールすることが可能です。つまり、Windowsに古いバージョンのPythonがインストールされていても、 pyenv-win で最新のPythonバージョンをインストールできます。

簡単に言うと、Windowsに既にインストールされているPythonのバージョンが古くても、 pyenv-win を使って新しいバージョンのPythonを問題なく管理・インストールできます。

pyenvpyenv-win のインストール方法については、公式のGitHubリポジトリに従ってインストールすることを強くお勧めします。その理由は次の通りです。

なぜGitHubに従ってインストールするのが良いのか?

  1. 最新情報が得られる:
    • GitHubリポジトリには、開発者によって最新のバージョンやバグ修正、セキュリティ更新が随時提供されています。公式ドキュメントに従うことで、常に最新かつ最も安全な方法でインストールが行えます。
  2. 公式のインストール手順:
    • GitHubには公式のインストール手順が詳しく書かれており、正しい設定や依存関係についての情報も網羅されています。これに従うことで、間違った設定や不要なトラブルを回避できます。
  3. トラブルシューティング:
    • もしインストール中に問題が発生した場合、GitHubの「Issues」や「Discussions」セクションで同様の問題を報告しているユーザーを見つけたり、解決策を探したりできます。多くの場合、他のユーザーや開発者が解決方法を提供してくれています。
  4. コミュニティサポート:
    • GitHubリポジトリでは、他のユーザーや開発者がサポートやアドバイスを提供しています。インストールに関する質問や問題点を投稿することで、コミュニティからのサポートを得ることができます。

というわけで以下のページを参考にインストールをします。

GitHub - pyenv-win/pyenv-win: pyenv for Windows. pyenv is a simple python version management tool. It lets you easily switch between multiple versions of Python. It's simple, unobtrusive, and follows the UNIX tradition of single-purpose tools that do one thing well.
pyenv for Windows. pyenv is a simple python version management tool. It lets you easily switch between multiple versions...

私が特にpyenvを導入した理由は次の理由からです。つまりプロジェクト(ディレクトリ)によりpythonのバージョンを変更できることに限ります。

.
├── global (Python 3.10)
│   
├── project1/
│   └── .python-version (Python 3.12)
│
├── project2/
│   └── .python-version (Python 3.8)
│
└── project3/
    └── .python-version (Python 3.9)

説明

  • global: グローバル設定で使われているPythonバージョンは3.10。
  • project1: project1 フォルダ内では、pyenv local によってPython 3.12が使用されています。
  • project2: project2 フォルダ内では、Python 3.8が設定されています。
  • project3: project3 フォルダ内では、Python 3.9が設定されています。

そして以下が具体例です。

.
├── global (Python 3.10)
│   
├── stable-diffusion/
│   └── .python-version (Python 3.9)
│
├── flask-web-app/
│   └── .python-version (Python 3.8)
│
└── data-analysis/
    └── .python-version (Python 3.12)

GitHubのページにはパワーシェルでコマンドを入力することが記載されていますが、VS CODEのターミナルで行います。こちらはクイックインストールとして記述されています。

Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win/master/pyenv-win/install-pyenv-win.ps1" -OutFile "./install-pyenv-win.ps1"; &"./install-pyenv-win.ps1"

このコマンドは基本的にホームディレクトリで実行することをお勧めします。

理由

  1. ファイルの配置先:
    • このコマンドは、pyenv-win のインストールスクリプトを実行しますが、デフォルトではホームディレクトリに pyenv 関連のファイルを配置するようになっています。
    • ホームディレクトリで実行することで、インストールされるファイルが正しい場所に配置され、pyenv-win が期待通りに動作します。
  2. スクリプトの実行:
    • Invoke-WebRequest コマンドでスクリプトをダウンロードし、その後、スクリプトを直接実行する形になっています。このスクリプトがどのディレクトリで実行されるかによって、インストールされるパスや環境変数の設定が変わる可能性があります。
  3. 一般的な慣習:
    • 通常、ユーザーのツールやスクリプトのインストールはホームディレクトリ内で行うのが一般的です。これにより、他のユーザーと設定やファイルが混ざらないようにでき、環境の管理が容易になります。

しかしエラーが発生しました。

Directory: C:\Users\minok

Mode LastWriteTime Length Name
—- ————- —— —-
d—- 2024/08/16 17:18 .pyenv
Microsoft.PowerShell.Archive\Expand-Archive : モジュール ‘Microsoft.PowerShell.Archive’ を読み込むことができませんでした。詳細に
ついては、’Import-Module Microsoft.PowerShell.Archive’ を実行してください。
発生場所 行:1 文字:1

Microsoft.PowerShell.Archive\Expand-Archive -Path “C:\Users\minok.py …

~~~~~~~~~~~

CategoryInfo : ObjectNotFound: (Microsoft.Power…\Expand-Archive:String) [], CommandNotFoundException

FullyQualifiedErrorId : CouldNotAutoLoadModule

Move-Item: C:\Users\minok\install-pyenv-win.ps1:126:5
Line |
126 | Move-Item -Path “$PyEnvDir\pyenv-win-master*” -Destination “$PyE …
| ~~~~~~~~~~~~~
| Cannot find path ‘C:\Users\minok.pyenv\pyenv-win-master’ because it does not exist.
Remove-Item: C:\Users\minok\install-pyenv-win.ps1:127:5
Line |
127 | Remove-Item -Path “$PyEnvDir\pyenv-win-master” -Recurse
| ~~~~~~~~~~~
| Cannot find path ‘C:\Users\minok.pyenv\pyenv-win-master’ because it does not exist.
pyenv-win is successfully installed. You may need to close and reopen your terminal before using it.

メッセージから判断すると、pyenv-win のインストールプロセス中にいくつかのエラーが発生したようですが、最終的に「pyenv-win is successfully installed」と表示されています。これは、インストールが一部成功している可能性があることを示しています。

エラーの概要と解決方法

  1. Microsoft.PowerShell.Archive モジュールの読み込みエラー:
    • これは、PowerShellで Expand-Archive コマンドを使用しようとしたときに、Microsoft.PowerShell.Archive モジュールがロードされなかったことを示しています。このモジュールは、ZIPファイルの展開などに使用されます。
    • 解決策: Import-Module Microsoft.PowerShell.Archive コマンドを実行して、モジュールを手動でインポートする必要があります。その後、再度インストールスクリプトを実行してみます。
  2. Move-ItemRemove-Item のエラー:
    • 指定されたディレクトリが存在しないため、ファイルの移動と削除に失敗しています。これは、前述の Expand-Archive の失敗が原因で、必要なファイルが解凍されていないためだと思われます。

次のステップ

  1. ターミナルの再起動:
    • メッセージに従い、一度ターミナルを閉じて再度開き、pyenv コマンドが認識されるか確認します。
  2. pyenv の確認:
    • ターミナルで pyenv --version と入力し、 pyenv-win が正しくインストールされているか確認してみます。
  3. モジュールのインポートと再実行:
    • もし pyenv --version が動作しない場合、次のコマンドを実行してモジュールをインポートし、その後、再度インストールスクリプトを実行してみます。
    Import-Module Microsoft.PowerShell.Archive
    その後、再度インストールスクリプトを実行します。しかし以下のエラーになりました。

/install-pyenv-win.ps1″ -OutFile “./install-pyenv-win.ps1″; &”./install-pyenv-win.ps1″
New-Item: C:\Users\minok\install-pyenv-win.ps1:115:5
Line |
115 | New-Item -Path $PyEnvDir -ItemType Directory
| ~~~~~~~~~~~~
| An item with the specified name C:\Users\minok.pyenv already exists.
Microsoft.PowerShell.Archive\Expand-Archive : モジュール ‘Microsoft.PowerShell.Archive’ を読み込むことができませんでした。詳細に
ついては、’Import-Module Microsoft.PowerShell.Archive’ を実行してください。
発生場所 行:1 文字:1

Microsoft.PowerShell.Archive\Expand-Archive -Path “C:\Users\minok.py …

~~~~~~~~~~~

CategoryInfo : ObjectNotFound: (Microsoft.Power…\Expand-Archive:String) [], CommandNotFoundException

FullyQualifiedErrorId : CouldNotAutoLoadModule

Move-Item: C:\Users\minok\install-pyenv-win.ps1:126:5
Line |
126 | Move-Item -Path “$PyEnvDir\pyenv-win-master*” -Destination “$PyE …
| ~~~~~~~~~~~~~
| Cannot find path ‘C:\Users\minok.pyenv\pyenv-win-master’ because it does not exist.
Remove-Item: C:\Users\minok\install-pyenv-win.ps1:127:5
Line |
127 | Remove-Item -Path “$PyEnvDir\pyenv-win-master” -Recurse
| ~~~~~~~~~~~
| Cannot find path ‘C:\Users\minok.pyenv\pyenv-win-master’ because it does not exist.
pyenv-win is successfully installed. You may need to close and reopen your terminal before using it.

このメッセージを見る限り、pyenv-win のインストールはまだ一部がうまくいっていないようです。Microsoft.PowerShell.Archive モジュールの問題が解決されていないため、ZIPファイルの展開ができておらず、それに関連するエラーが引き続き発生しています。VSコードは起動しなおしておきます。

トラブルシューティング

  1. PowerShellのバージョン確認:
    • まず、PowerShellのバージョンを確認します。Microsoft.PowerShell.Archive モジュールは、PowerShell 5.1以降に標準で含まれているため、PowerShellが古い場合はバージョンアップが必要です。次のコマンドを使ってバージョンを確認できます。
    $PSVersionTable.PSVersion
  2. モジュールの手動インポート:
    • もしPowerShellのバージョンが5.1以上であれば、次のコマンドを試して、モジュールが正しくインポートされるか確認してください。
    Import-Module -Name Microsoft.PowerShell.Archive
    これでエラーが解消されれば、再度インストールスクリプトを実行してみてみます。しかし、依然として Microsoft.PowerShell.Archive モジュールが読み込めていないため、ZIPファイルの展開ができておらず、それに関連する一連のエラーが発生しています。しかし、最終的には「pyenv-win is successfully installed」というメッセージが表示されています。

というわけでPowerShellのバージョンを確認するも条件は満たしています。

PS C:\Users\minok> $PSVersionTable.PSVersion

Major Minor Patch PreReleaseLabel BuildLabel
—– —– —– ————— ———-
7 4 4

次に環境変数を確認してみると以下が追加されているようです。

C:\Users\minok\.pyenv\pyenv-win\bin
C:\Users\minok\.pyenv\pyenv-win\shims

次に、そもそもWindowsのホームディレクトリはどこかを確認します。以下の結果になり、コマンドを実行した場所です。

PS C:\Users\minok> cd\
PS C:> cd $HOME
PS C:\Users\minok>

ホームディレクトリがどこかは確認しました。しかし、中身を見ると何もないことが判明しました。これは環境変数に追加されていたパスを確認していることになります。

PS C:\Users\minok> cd .pyenv
PS C:\Users\minok.pyenv> dir
PS C:\Users\minok.pyenv>

そこで手動でクローンを作成することにしました。ホームにいる状態で以下のコマンドを入力します。これで必要なファイルが C:\Users\minok\.pyenv\pyenv-win フォルダにダウンロードされます。

git clone https://github.com/pyenv-win/pyenv-win.git $HOME\.pyenv\pyenv-win

バージョンを確認します。

PS C:\Users\minok.pyenv> pyenv version
3.7.4 (set by C:\Users\minok.pyenv.python-version)

ようやくうまくいきました。ただし、VS CODEではうまくいってもPowerShellでは以下のエラーになることがあります。

PS C:\Users\minok> pyenv version
pyenv : このシステムではスクリプトの実行が無効になっているため、ファイル C:\Users\minok.pyenv\pyenv-win\bin\pyenv.ps1
を読み込むことができません。詳細については、「about_Execution_Policies」(https://go.microsoft.com/fwlink/?LinkID=135170
) を参照してください。
発生場所 行:1 文字:1

pyenv version

~

CategoryInfo : セキュリティ エラー: (: ) []、PSSecurityException

FullyQualifiedErrorId : UnauthorizedAccess

調べてみると以下のことがわかりました。それは、PowerShellの実行ポリシーがスクリプトの実行を許可していないために発生しているということです。この問題に対処します。

実行ポリシーの変更手順

  1. 実行ポリシーを確認:
    • 現在の実行ポリシーを確認するために、以下のコマンドをPowerShellで実行します。
    Get-ExecutionPolicy
    これで現在の実行ポリシーが表示されます。
  2. 実行ポリシーを変更:
    • スクリプトの実行を許可するために、以下のコマンドを実行します。一般的には「RemoteSigned」または「Unrestricted」に設定します。
    Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
    これで、ローカルのスクリプトは実行可能となり、リモートからダウンロードされたスクリプトも署名されていれば実行可能になります。
  3. 確認:
    • 実行ポリシーの変更後、再度以下のコマンドを実行して pyenv のバージョンを確認します。
    pyenv --version
    または
    pyenv version

注意点

  • 実行ポリシーを変更する際に、管理者権限が必要になる場合があります。PowerShellを「管理者として実行」してから上記のコマンドを実行してください。
  • 実行ポリシーを変更した後、再度実行ポリシーを確認することもできます。

ちなみにPowerShellでは以下のように表示されます。

PS C:\Users\minok> pyenv version
No global/local python version has been set yet. Please set the global/local version by typing:
pyenv global
pyenv global 3.7.4
pyenv local
pyenv local 3.7.4

プロジェクトによってはpythonのバージョンを指定されることがあります。そこで、特定のプロジェクト(フォルダ)だけでPythonのバージョンを変更することにします。そのためには、pyenv local コマンドを使用します。このコマンドを実行すると、指定したディレクトリ内でのみ特定のPythonバージョンが適用されるようになります。Pythonのバージョンに3.12を使用するものとして説明します。

ステップ 1: Python 3.12 のインストール

まず、pyenv-win を使ってPython 3.12をインストールします。

  1. ターミナルを開く:
    • PowerShell または VS Code のターミナルを開きます。
  2. インストール可能なPythonバージョンを確認:
    • 次のコマンドを入力して、インストール可能なPythonバージョンのリストを表示します。
    pyenv install --list
    • リストの中から 3.12.0 を確認してください。
  3. Python 3.12 をインストール:
    • 次のコマンドを入力して、Python 3.12をインストールします。
    pyenv install 3.12.0
    • これでPython 3.12.0がインストールされます。

ステップ 2: 特定のプロジェクトでPython 3.12を使用する

次に、Python 3.12を特定のプロジェクトフォルダ内でのみ使用するように設定します。

  1. プロジェクトフォルダに移動:
    • Pythonのバージョンを変更したいプロジェクトのフォルダに移動します。たとえば、sample というフォルダに移動するには、次のコマンドを使います。
    cd C:\youtube\sample
  2. Python 3.12 を設定:
    • プロジェクトフォルダ内で、次のコマンドを実行してPython 3.12をこのフォルダに設定します。
    pyenv local 3.12.0
    • これで、このフォルダ内でのみPython 3.12.0が使用されるようになります。

ステップ 3: 設定を確認する

最後に、設定が正しく行われたかを確認します。

  1. 確認コマンドを実行:
    • 次のコマンドを実行して、現在のPythonバージョンを確認します。
    pyenv version
    • 3.12.0 (set by <プロジェクトフォルダパス>) と表示されれば、設定が成功しています。

ここは注意が必要です。pyenv versionのほかにpyenv versionsというコマンドも存在します。pyenv versionpyenv versions は似ているため、混乱しやすい点です。

pyenv を使ったPythonバージョン管理: 初心者が混乱しやすいポイントを解説」

pyenv は、複数のPythonバージョンを管理するための便利なツールです。しかし、初心者の方は pyenv versionpyenv versions の違いに混乱しがちです。ここでは、それぞれのコマンドの使い方と、Pythonバージョンを効率的に管理する方法をわかりやすく説明します。

pyenv versionpyenv versions の違い」

pyenv version の使い方:

  • このコマンドは、現在使用されているPythonバージョンを確認するために使います。例えば、特定のプロジェクトでどのPythonバージョンがアクティブになっているかを簡単にチェックできます。
  • :
    > pyenv version
    3.10.0 (set by C:\Users\minok\.pyenv\version)

pyenv versions の使い方:

  • pyenv で管理されているすべてのPythonバージョンを一覧表示するためのコマンドです。これを使うことで、どのPythonバージョンがインストールされているかを一目で確認できます。
  • :
    > pyenv versions
    3.7.4
    * 3.10.0 (set by C:\Users\minok\.pyenv\version)
    3.12.0

「適切なコマンドを選ぶシチュエーション」

いつ pyenv version を使うべきか:

  • プロジェクト内で今どのPythonバージョンが使用されているか確認したいときに使います。特定のフォルダに移動してコマンドを実行すると、そのフォルダに設定されたPythonバージョンが表示されます。

いつ pyenv versions を使うべきか:

  • 全てのインストール済みPythonバージョンを確認したいときに使います。ホームディレクトリやどのプロジェクトにも属していないディレクトリで実行するのが良いでしょう。

「混乱しないためのヒント」

pyenv global の活用:

  • システム全体で使いたいPythonバージョンを設定する場合は、pyenv global を使いましょう。これにより、どのディレクトリでもそのバージョンがデフォルトで使用されます。

ディレクトリの移動とコマンド実行:

  • pyenv versions を実行する場所によって結果が異なるため、出力を確認しながら作業すると、より理解が深まります。

「まとめと今後のステップ」

pyenv を使ってPythonバージョンを管理する方法を理解することで、プロジェクトごとに異なる環境を簡単に設定できます。初心者の方も、この記事を参考にして、安心してPythonのバージョン管理を行ってください。

次は、特定のプロジェクトでPythonバージョンを切り替える方法について詳しく学んでみましょう。

おまけ:覚えやすいとっておきの3つの例

pyenv version の説明

  • 用途: 今、実際に使用されているPythonのバージョンを確認するためのコマンドです。
  • 覚え方: 「version は ‘今どれ?’」と覚えます。このコマンドを実行すると、現在使用されているPythonバージョンが表示されます。
    今使っているPythonのバージョンを確認したい時に使う

pyenv versions の説明

  • 用途: pyenv で管理されているすべてのPythonバージョンを一覧表示するためのコマンドです。
  • 覚え方: 「versions は ‘全てのバージョン’」と覚えます。このコマンドを実行すると、インストールされている全てのPythonバージョンのリストが表示されます。
    インストールされている全てのPythonバージョンを確認したい時に使う

pyenv version は、今使っている工具を手に取って確認すること

  • 例: 今どの工具(Pythonバージョン)を使って作業しているのかを確認するために、工具箱から手に取って確かめる感じです。

pyenv versions は、工具箱全体の中身を見渡すこと

  • 例: 工具箱の中にどんな工具(Pythonバージョン)があるか、全部並べて確認する感じです。

pyenv version の例:

  • 「プロジェクトAで作業しているときに、今どのPythonバージョンを使っているか確認するために、pyenv version を実行します。」

pyenv versions の例:

  • 「次にインストールされているPythonバージョンを確認するために、pyenv versions を実行して、利用可能なバージョンを一覧表示します。」
タイトルとURLをコピーしました