pyenv とは?
pyenv
は、複数のPythonバージョンを簡単にインストール・切り替えできるツールです。例えば、特定のプロジェクトでPython 3.9を使いながら、他のプロジェクトでPython 3.7を使う、といったことが可能になります。
なぜ pyenv が便利なのか?
- 複数バージョンのPythonを管理できる:
- 通常、Pythonをインストールすると一つのバージョンしか使えません。しかし、プロジェクトによっては異なるバージョンのPythonが必要な場合があります。
pyenv
を使うと、簡単に複数のPythonバージョンをインストールして使い分けることができます。
- 通常、Pythonをインストールすると一つのバージョンしか使えません。しかし、プロジェクトによっては異なるバージョンのPythonが必要な場合があります。
- システムPythonに影響を与えない:
pyenv
で管理されているPythonは、システムにインストールされているPythonとは別に管理されるので、システムPythonに影響を与える心配がありません。
- 簡単にバージョンを切り替えられる:
- プロジェクトごとに異なるPythonバージョンを指定することができ、
pyenv
コマンド一つで簡単に切り替えることができます。
- プロジェクトごとに異なるPythonバージョンを指定することができ、
システムPythonに影響を与えないという意味
- 独立した管理:
pyenv
は、ユーザーのホームディレクトリ内に独自の環境を作成し、その中でPythonのバージョンを管理します。このため、pyenv
でインストールしたPythonのバージョンやライブラリは、システム全体で使用されるPython(システムPython)には影響を与えません。 - 安全性: システムPythonは、OSの一部のツールやスクリプトが依存している場合があります。
pyenv
を使用することで、これらのシステム依存性を変更することなく、異なるバージョンのPythonを自由にインストールしたり、プロジェクトごとに切り替えたりすることができます。 - 互換性の維持: 特定のプロジェクトで新しいバージョンのPythonを使いたい場合、
pyenv
を使えばシステムPythonに影響を与えることなく新しいバージョンを試すことができます。逆に、システムPythonを更新しても、pyenv
で管理されているプロジェクトには影響がありません。
pyenv の基本的な使い方
- インストール:
pyenv
は、LinuxやmacOSではターミナルから、Windowsではpyenv-win
というツールを使用してインストールします。- インストール後、
pyenv install
コマンドで任意のPythonバージョンをインストールできます。
- バージョンの切り替え:
pyenv global 3.9.1
と入力すると、Pythonのデフォルトバージョンが3.9.1に切り替わります。- プロジェクトごとにバージョンを設定したい場合は、プロジェクトのディレクトリに移動してから
pyenv local 3.8.5
などと入力します。これにより、そのディレクトリ内でのPythonバージョンが指定したものに切り替わります。
- 確認:
- 現在使用しているPythonのバージョンを確認するには、
pyenv version
と入力します。
- 現在使用しているPythonのバージョンを確認するには、
注意点
- Windowsユーザーは、
pyenv
ではなくpyenv-win
を使用します。コマンドの使い方はほぼ同じですが、Windowsに特化した調整がされています。
ここがポイント
Windowsの本体にインストールされているPythonのバージョンに依存せず、 pyenv-win
を使用して、新しいバージョンのPythonをインストールすることが可能です。つまり、Windowsに古いバージョンのPythonがインストールされていても、 pyenv-win
で最新のPythonバージョンをインストールできます。
簡単に言うと、Windowsに既にインストールされているPythonのバージョンが古くても、 pyenv-win
を使って新しいバージョンのPythonを問題なく管理・インストールできます。
pyenv
や pyenv-win
のインストール方法については、公式のGitHubリポジトリに従ってインストールすることを強くお勧めします。その理由は次の通りです。
なぜGitHubに従ってインストールするのが良いのか?
- 最新情報が得られる:
- GitHubリポジトリには、開発者によって最新のバージョンやバグ修正、セキュリティ更新が随時提供されています。公式ドキュメントに従うことで、常に最新かつ最も安全な方法でインストールが行えます。
- 公式のインストール手順:
- GitHubには公式のインストール手順が詳しく書かれており、正しい設定や依存関係についての情報も網羅されています。これに従うことで、間違った設定や不要なトラブルを回避できます。
- トラブルシューティング:
- もしインストール中に問題が発生した場合、GitHubの「Issues」や「Discussions」セクションで同様の問題を報告しているユーザーを見つけたり、解決策を探したりできます。多くの場合、他のユーザーや開発者が解決方法を提供してくれています。
- コミュニティサポート:
- GitHubリポジトリでは、他のユーザーや開発者がサポートやアドバイスを提供しています。インストールに関する質問や問題点を投稿することで、コミュニティからのサポートを得ることができます。
というわけで以下のページを参考にインストールをします。
私が特に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"
このコマンドは基本的にホームディレクトリで実行することをお勧めします。
理由
- ファイルの配置先:
- このコマンドは、
pyenv-win
のインストールスクリプトを実行しますが、デフォルトではホームディレクトリにpyenv
関連のファイルを配置するようになっています。 - ホームディレクトリで実行することで、インストールされるファイルが正しい場所に配置され、
pyenv-win
が期待通りに動作します。
- このコマンドは、
- スクリプトの実行:
Invoke-WebRequest
コマンドでスクリプトをダウンロードし、その後、スクリプトを直接実行する形になっています。このスクリプトがどのディレクトリで実行されるかによって、インストールされるパスや環境変数の設定が変わる可能性があります。
- 一般的な慣習:
- 通常、ユーザーのツールやスクリプトのインストールはホームディレクトリ内で行うのが一般的です。これにより、他のユーザーと設定やファイルが混ざらないようにでき、環境の管理が容易になります。
しかしエラーが発生しました。
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
」と表示されています。これは、インストールが一部成功している可能性があることを示しています。
エラーの概要と解決方法
Microsoft.PowerShell.Archive
モジュールの読み込みエラー:- これは、PowerShellで
Expand-Archive
コマンドを使用しようとしたときに、Microsoft.PowerShell.Archive
モジュールがロードされなかったことを示しています。このモジュールは、ZIPファイルの展開などに使用されます。 - 解決策:
Import-Module Microsoft.PowerShell.Archive
コマンドを実行して、モジュールを手動でインポートする必要があります。その後、再度インストールスクリプトを実行してみます。
- これは、PowerShellで
Move-Item
とRemove-Item
のエラー:- 指定されたディレクトリが存在しないため、ファイルの移動と削除に失敗しています。これは、前述の
Expand-Archive
の失敗が原因で、必要なファイルが解凍されていないためだと思われます。
- 指定されたディレクトリが存在しないため、ファイルの移動と削除に失敗しています。これは、前述の
次のステップ
- ターミナルの再起動:
- メッセージに従い、一度ターミナルを閉じて再度開き、
pyenv
コマンドが認識されるか確認します。
- メッセージに従い、一度ターミナルを閉じて再度開き、
pyenv
の確認:- ターミナルで
pyenv --version
と入力し、pyenv-win
が正しくインストールされているか確認してみます。
- ターミナルで
- モジュールのインポートと再実行:
- もし
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コードは起動しなおしておきます。
トラブルシューティング
- PowerShellのバージョン確認:
- まず、PowerShellのバージョンを確認します。
Microsoft.PowerShell.Archive
モジュールは、PowerShell 5.1以降に標準で含まれているため、PowerShellが古い場合はバージョンアップが必要です。次のコマンドを使ってバージョンを確認できます。
$PSVersionTable.PSVersion
- まず、PowerShellのバージョンを確認します。
- モジュールの手動インポート:
- もし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の実行ポリシーがスクリプトの実行を許可していないために発生しているということです。この問題に対処します。
実行ポリシーの変更手順
- 実行ポリシーを確認:
- 現在の実行ポリシーを確認するために、以下のコマンドをPowerShellで実行します。
Get-ExecutionPolicy
これで現在の実行ポリシーが表示されます。 - 実行ポリシーを変更:
- スクリプトの実行を許可するために、以下のコマンドを実行します。一般的には「RemoteSigned」または「Unrestricted」に設定します。
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
これで、ローカルのスクリプトは実行可能となり、リモートからダウンロードされたスクリプトも署名されていれば実行可能になります。 - 確認:
- 実行ポリシーの変更後、再度以下のコマンドを実行して
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をインストールします。
- ターミナルを開く:
PowerShell
またはVS Code
のターミナルを開きます。
- インストール可能なPythonバージョンを確認:
- 次のコマンドを入力して、インストール可能なPythonバージョンのリストを表示します。
pyenv install --list
- リストの中から
3.12.0
を確認してください。
- Python 3.12 をインストール:
- 次のコマンドを入力して、Python 3.12をインストールします。
pyenv install 3.12.0
- これでPython 3.12.0がインストールされます。
ステップ 2: 特定のプロジェクトでPython 3.12を使用する
次に、Python 3.12を特定のプロジェクトフォルダ内でのみ使用するように設定します。
- プロジェクトフォルダに移動:
- Pythonのバージョンを変更したいプロジェクトのフォルダに移動します。たとえば、
sample
というフォルダに移動するには、次のコマンドを使います。
cd C:\youtube\sample
- Pythonのバージョンを変更したいプロジェクトのフォルダに移動します。たとえば、
- Python 3.12 を設定:
- プロジェクトフォルダ内で、次のコマンドを実行してPython 3.12をこのフォルダに設定します。
pyenv local 3.12.0
- これで、このフォルダ内でのみPython 3.12.0が使用されるようになります。
ステップ 3: 設定を確認する
最後に、設定が正しく行われたかを確認します。
- 確認コマンドを実行:
- 次のコマンドを実行して、現在のPythonバージョンを確認します。
pyenv version
3.12.0 (set by <プロジェクトフォルダパス>)
と表示されれば、設定が成功しています。
ここは注意が必要です。pyenv version
のほかにpyenv versions
というコマンドも存在します。pyenv version
と pyenv versions
は似ているため、混乱しやすい点です。
「pyenv
を使ったPythonバージョン管理: 初心者が混乱しやすいポイントを解説」
pyenv
は、複数のPythonバージョンを管理するための便利なツールです。しかし、初心者の方は pyenv version
と pyenv versions
の違いに混乱しがちです。ここでは、それぞれのコマンドの使い方と、Pythonバージョンを効率的に管理する方法をわかりやすく説明します。
「pyenv version
と pyenv 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
を実行して、利用可能なバージョンを一覧表示します。」