pyenvとは?windowsではpyenv-win

pyenvとは?

pyenvは、複数のPythonバージョンを簡単にインストールし、切り替えることができる強力なツールです。あるプロジェクトではPython 3.9が必要で、別のプロジェクトではPython 3.7が必要な状況を想像してみてください。pyenvを使えば、これらの異なるバージョンを汗をかくことなくシームレスに使い分けることができます。

目次

なぜpyenvは便利なのか?

複数のPythonバージョンを管理:

想像してみてください。Pythonをインストールしたものの、使えるバージョンは1つだけ。しかし、プロジェクトごとに要求されるPythonのバージョンは異なります。そんな時にpyenvが救世主となります!複数のPythonバージョンを簡単にインストールし、切り替えることができるため、各プロジェクトに最適なPython環境を確実に用意できます。

システムのPythonに影響を与えない:

pyenvは、システムのPythonを安全に保つスーパーヒーローのような存在です。Pythonバージョンを独自の独立した環境で管理するため、OSに付属のPythonバージョンをいじる心配がありません。まるでPythonバージョンのための秘密基地を持っているかのようです!

バージョン間の簡単な切り替え:

pyenvを使えば、プロジェクトごとに異なるPythonバージョンを割り当て、1つのコマンドで切り替えることができます。まるでプロジェクトのニーズに合わせてPython環境を即座に変身させる魔法の杖のようです。バージョンの衝突も、頭痛の種ももうありません!

システムのPythonに影響を与えないことの重要性

独立した管理:

pyenvは、ユーザーのホームディレクトリ内に独自の快適な小世界を作り出し、Pythonバージョンを管理します。これは、Pythonのバージョンやライブラリが、システム全体のPythonを邪魔することなく過ごせる秘密のクラブハウスのようなものです。これらは完全に独立しており、互いに干渉しません。

セキュリティ:

特定のOSツールやスクリプトがシステムのPythonに依存していると想像してみてください。pyenvを使用することで、それらのシステム依存関係に問題を引き起こすことなく、プロジェクトごとに異なるバージョンのPythonを自由にインストールしたり、切り替えたりできます。まるでシステムのPythonを安全に保つ警備員のようです。

互換性の維持:

特定のプロジェクトのために、ピカピカの新しいPythonバージョンを試したいとしましょう。pyenvを使えば、システムのPythonに影響を与えることなくそれが可能です。そして、たとえシステムのPythonがアップデートされても、pyenvで管理されているプロジェクトが混乱することはありません。まるでプロジェクトを望まない変更から守る互換性の盾を持っているかのようです。

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...

2025年の新機能とアップデート

最新Pythonバージョンのサポート

2025年現在、pyenv-winは最新のPython 3.13(2024年10月リリース)および開発中のPython 3.14をサポートしています。Python 3.13には以下の新機能が含まれています。

  • 改良されたREPL(対話型シェル): 色付きのプロンプトとトレースバック、F1でヘルプ、F2で履歴閲覧、F3でペーストモードなど
  • フリー スレッド モード(実験的): GIL(グローバルインタプリタロック)を無効にして実行できる新しいモード(python3.13tバイナリ)
  • JITコンパイラ(実験的): パフォーマンス向上のためのJust-in-Timeコンパイル機能

pyenv-winの改善

pyenv-winは2022年7月のバージョン3.1.1以降、継続的に改善されており、以下の機能が利用可能です。

  • pyenv updateコマンド: 利用可能なPythonバージョンのデータベースを自動で更新
  • キャッシュ機能: インストーラーを%PYENV%\install_cacheフォルダにキャッシュ
  • 改良されたshims機能pyenv rehash実行時に%PATHEXT%を認識し、より多くの実行可能ファイルが利用可能に
  • デフォルトでの64ビットサポート: x64システムでは自動的に64ビット版をインストール

pyenvの基本的な使い方

インストール:

LinuxやmacOSのユーザーにとって、pyenvのインストールはターミナルでいくつかのコマンドを実行するだけの簡単な作業です。Windowsユーザーのためには、pyenv-winという特別なツールがあり、インストールを楽にしてくれます。

pyenvをインストールしたら、pyenv installコマンドを使って、心ゆくまで好きなバージョンのPythonをインストールできます。

バージョンの切り替え:

Python 3.9.1をデフォルトのバージョンにしたいですか?問題ありません!pyenv global 3.9.1と入力するだけで、pyenvがそれを実現してくれます。

特定のプロジェクトに特定のバージョンを設定したい場合は、プロジェクトのディレクトリに移動し、pyenv local 3.8.5のように入力します。これにより、そのディレクトリ内で使用されるPythonのバージョンが切り替わります。まるで目的のPython領域への魔法のポータルのようです。

現在のバージョンの確認:

現在どのPythonバージョンを使用しているか気になりますか?pyenv versionと入力するだけで、pyenvがその秘密を明かしてくれます。

重要な注意点

Windowsユーザーにとって、pyenv-winは最高の友達です。コマンドはpyenvと非常によく似ていますが、pyenv-winはWindows専用に作られています。まるでWindowsを流暢に話すpyenvのバージョンのようです。

キーポイント:

WindowsにインストールされているPythonのバージョンに頼ることなく、pyenv-winを使って新しいバージョンのPythonをインストールできます。言い換えれば、Windowsに古いバージョンのPythonがインストールされていても、pyenv-winを使えば最新のPythonバージョンを管理・インストールできるのです。

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

なぜインストールにはGitHubを参考にするのが良いのか?

最新のアップデートへのアクセス:

GitHubリポジトリは、最新バージョン、バグ修正、セキュリティアップデートの宝庫のようなものです。開発者は常にpyenvをより良くするために努力しており、公式ドキュメントに従うことで、最も最新かつ安全な方法でpyenvをインストールしていることを確認できます。

公式のインストール手順:

GitHubは、詳細な公式インストール手順を提供する賢者のような存在です。すべての正しい設定と依存関係を網羅しているため、誤った設定や不要なトラブルを心配する必要はありません。指示に従うだけで、pyenv悟りへの道を歩むことができます。

トラブルシューティング:

インストール中に問題が発生した場合、GitHubはpyenv愛好家の仲間たちが集う助けになるコミュニティのようなものです。「Issues」や「Discussions」セクションで、他のユーザーが報告した同様の問題とその解決策を見つけることができます。まるでpyenvの専門家チームがあなたを支援する準備ができているかのようです。

コミュニティサポート:

GitHubリポジトリはコードのためだけの場所ではありません。pyenvに情熱を注ぐユーザーと開発者の活気あるコミュニティです。インストールに関する質問や懸念がある場合は、GitHubに投稿してコミュニティから支援を受けることができます。まるでpyenv愛好家のためのサポートグループのようです。

それでは、次のページを参考にして、このインストール作業を一緒に始めましょう。

私がpyenvを使うことにした主な理由

私が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が設定されています。まるで過去のPython時代にタイムスリップしたかのようです。
  • project3: project3フォルダ内では、Python 3.9が設定されています。そのプロジェクトに特有の現代的なPython方言を持っているかのようです。

さらに分かりやすくするために、具体的な例を挙げます。

.
├── 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のページではPowerShellを使ってコマンドを入力すると記載されていますが、ここでは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"

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

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コマンドを実行して、手動でモジュールをパーティに招待する必要があります。その後、インストールスクリプトを再度実行してみてください。モジュールは準備万端のはずです!

Move-ItemおよびRemove-Itemエラー:

これらのエラーは、移動および削除するはずのディレクトリが見つからないと清掃係が文句を言っているようなものです。おそらく、前のExpand-Archiveタスクがジョブを完了せず、必要なファイルが展開されなかったためです。

次のステップ

ターミナルを再起動する:

メッセージのアドバイスに従い、ターミナルを閉じてから再度開き、pyenvコマンドが認識されるようになったか確認します。まるでターミナルにpyenvの存在を認識させるために再起動するようなものです。

pyenvを確認する:

ターミナルでpyenv --versionと入力し、pyenv-winが正しくインストールされているか確認します。まるでpyenvに自己紹介させてバージョンを確認するようなものです。

モジュールをインポートしてスクリプトを再実行する:

pyenv --versionが機能しない場合は、次のコマンドを実行してモジュールをインポートし、再度インストールスクリプトを実行してみてください:Import-Module Microsoft.PowerShell.Archive。まるでモジュールにパーティに参加する2度目のチャンスを与えるようなものです。

その後、インストールスクリプトを再度実行しましたが、別のエラーが表示されました。

/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 : The module 'Microsoft.PowerShell.Archive' could not be loaded. For more details, please run 'Import-Module Microsoft.PowerShell.Archive'.
At line:1 char: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 Codeを再起動します。

次のステップ

PowerShellのバージョンを確認する:

まず、PowerShellのバージョンを確認しましょう。まるでPowerShellに年齢を尋ねるようなものです。Microsoft.PowerShell.ArchiveモジュールはPowerShell 5.1以降にデフォルトで含まれているため、PowerShellのバージョンが古い場合はアップグレードの時期かもしれません。次のコマンドでバージョンを確認できます:$PSVersionTable.PSVersion

手動でのモジュールインポート:

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 : File C:\Users\minok\.pyenv\pyenv-win\bin\pyenv.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see "about_Execution_Policies" (https://go.microsoft.com/fwlink/?LinkID=135170).
At line:1 char:1

pyenv version

~

CategoryInfo : SecurityError: (:) [], PSSecurityException

FullyQualifiedErrorId : UnauthorizedAccess

調査の結果、PowerShellの実行ポリシーがスクリプトの実行を許可していないために問題が発生することがわかりました。この問題に対処します。

実行ポリシーを変更する手順

現在の実行ポリシーを確認する:

現在の実行ポリシーを確認するには、PowerShellで次のコマンドを実行します。

Get-ExecutionPolicy

これにより、現在の実行ポリシーが表示されます。

実行ポリシーを変更する:

スクリプトの実行を許可するには、次のコマンドを実行します。通常、「RemoteSigned」または「Unrestricted」に設定します。

Set-ExecutionPolicy RemoteSigned -Scope CurrentUser

これにより、ローカルスクリプトの実行が許可され、リモートスクリプトは署名されていれば実行できます。

重要な注意(2025年更新) : セキュリティ上の理由から、Unrestrictedの代わりにRemoteSignedを使用することをお勧めします。RemoteSignedは、ローカルスクリプトの実行を許可しつつ、インターネットからダウンロードしたスクリプトには署名を要求するため、より安全です。

組織で管理されているデバイスで実行ポリシーを変更できない場合は、手動で環境変数を設定することもできます。

  1. Windowsの検索バーに「アカウントの環境変数を編集」と入力します
  2. システム変数のセクションで、次の3つの変数を作成します。
    • PYENVC:\Users\username\.pyenv\pyenv-win
    • PYENV_HOMEC:\Users\username\.pyenv\pyenv-win
    • PYENV_ROOTC:\Users\username\.pyenv\pyenv-win\
  3. ユーザー変数のPathに以下を追加します。
    • C:\Users\username\.pyenv\pyenv-win\bin
    • C:\Users\username\.pyenv\pyenv-win\shims

確認:

実行ポリシーを変更した後、次のコマンドを実行して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が必要になる場合があります。そのような場合は、pyenv localコマンドを使用して、特定のプロジェクト(フォルダ)に対してのみPythonのバージョンを変更できます。このコマンドを実行すると、指定したPythonバージョンはそのディレクトリ内でのみ適用されます。例として、Pythonバージョン3.12を使って説明します。

ステップ1:Python 3.12をインストールする

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

  1. ターミナルを開く:
  • PowerShellまたはVS Codeのターミナルを開きます。
  1. 利用可能なPythonのバージョンを確認する:
  • 次のコマンドを入力して、インストール可能なPythonのバージョン一覧を表示します。
    pyenv install --list
  • 一覧からバージョン3.12.0を見つけます。

2025年のヒント : 最新の安定版を簡単にインストールしたい場合は、次のコマンドを使用できます。

pyenv install $(pyenv install --list | findstr "^  3\.12\." | findstr /v "dev" | findstr /v "a" | findstr /v "b" | findstr /v "rc" | tail -1)
  1. Python 3.12をインストールする:
  • 次のコマンドを入力してPython 3.12をインストールします。
    pyenv install 3.12.0
  • これでPython 3.12.0がインストールされます。

注意 : バージョンによってはインストールウィザードがポップアップすることがあります。その場合は、ウィザードをクリックして進めてください。静かにインストールしたい場合は、-qオプションを使用できます。

pyenv install 3.12.0 -q

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

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

  1. プロジェクトフォルダに移動する:
  • Pythonのバージョンを変更したいフォルダに移動します。
  • 例えば、sampleフォルダに移動するには、次のコマンドを使用します。
    cd C:\youtube\sample
  1. 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 <project folder path>)と表示されれば、設定は成功です。

注意:pyenv versionsというコマンドもあり、pyenv versionと似ているため混同しやすいです。

「pyenvでのPythonバージョン管理:初心者がよく混乱する点の解説」

pyenvは複数のPythonバージョンを管理するのに便利なツールです。しかし、初心者はpyenv versionpyenv 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つの例

  1. pyenv versionの解説:
  • 使い方:現在使用中のPythonのバージョンを確認するために使用します。
  • 覚え方:「version」を「今はどれ?」と考えてください。このコマンドを実行すると、現在使用しているPythonのバージョンが表示されます。
  • いつ使うか:使用中のPythonのバージョンを確認したいときに使います。
  1. pyenv versionsの解説:
  • 使い方:pyenvで管理されているすべてのPythonバージョンを一覧表示します。
  • 覚え方:「versions」を「すべてのバージョン」と考えてください。このコマンドを実行すると、インストールされているすべてのPythonバージョンの一覧が表示されます。
  • いつ使うか:インストールされているすべてのPythonバージョンを確認したいときに使います。
  1. 例え話:
  • pyenv version:現在使っている道具を確認するようなもの。
    • 例:pyenv versionを使って、現在作業しているPythonのバージョン(道具)を確認する。
  • pyenv versions:道具箱全体を確認するようなもの。
    • 例:pyenv versionsを使って、道具箱にあるすべてのPythonのバージョン(道具)を確認する。

pyenv versionの例:
「プロジェクトAで作業しているとき、pyenv versionを使ってどのPythonバージョンを使っているか確認する。」

pyenv versionsの例:
「次に、pyenv versionsを使ってインストールされているすべてのPythonバージョンを一覧表示し、何が利用可能かを確認する。」

Windowsでpyenv-winを使用する際の環境変数の順序に関するキーポイント

  1. pyenv-winの仕組み
    pyenv-winは、ユーザーごとに複数のPythonバージョンを管理できます。各バージョンはpyenv-winディレクトリに保存され、コマンドラインからPythonを実行すると、システムはpyenv-winが提供する「シム」を使用してどのバージョンを起動するかを決定します。
  2. PATH環境変数の役割
    Windowsでは、PATH環境変数内のディレクトリの順序が重要です。
    • 順序に基づく優先度:
      PATHの先頭にリストされているディレクトリが優先されます。したがって、pyenv-winのシムディレクトリ(通常は%USERPROFILE%\.pyenv\pyenv-win\shims%USERPROFILE%\.pyenv\pyenv-win\bin)は、システムにインストールされたPythonバージョンのパスよりも前に来る必要があります。
    • 順序が正しくない場合に起こること:
      システムのPython(例えば、公式インストーラーからインストールされたもの、C:\Users\minok\AppData\Local\Programs\Python\Python313\とそのScriptsフォルダなど)がpyenv-winのディレクトリより前に配置されている場合、pyenv-winの管理をバイパスしてそのバージョンが使用されます。
  3. 正しい設定方法
    • 環境変数を編集する:
      Windowsの「システム環境変数の編集」設定を開きます。ユーザーまたはシステムの環境変数でPATH変数を確認し、pyenv-winのシムディレクトリをリストの先頭に移動してください。
    • シェルを再起動する:
      環境変数を変更した後、コマンドプロンプトまたはPowerShellセッションを再起動して、新しい設定が有効になるようにします。
    • バージョンを確認する:
      新しいシェルでpython -Vを実行します。システムにインストールされたバージョンではなく、pyenv-winで管理されているPythonのバージョン(例:3.12.0や3.10.11)が表示されるはずです。

PATHの順序を確認する方法(2025年追加) :

# 現在のPATHの順序を確認
where.exe python

# pyenv-winが優先されているか確認
pyenv which python

最初のコマンドで表示されるpythonのパスがpyenv-winのshimsディレクトリ内であれば、正しく設定されています。

  1. まとめ
    PATHの順序が正しくないと、間違ったPythonバージョンが使用されるなど、予期しない動作につながり、開発環境を混乱させる可能性があります。これは、公式インストーラーやMicrosoft Store版のPythonが自動的にパスを環境変数に追加する可能性があるWindowsでは特に重要です。pyenv-winのディレクトリがPATHの先頭にあることを確認することで、安定した予測可能なPython環境を維持できます。

仮想環境での作業(2025年向け新セクション)

pyenv-winでの仮想環境の管理

pyenv-winを使用していても、仮想環境の作成と管理は重要です。主なアプローチは3つあります。

1. 標準のvenvモジュールを使用する(推奨)

Python 3.3以降にはvenvモジュールが標準で含まれています。

# 特定のPythonバージョンを選択
pyenv local 3.12.0

# 仮想環境を作成
python -m venv myenv

# 仮想環境をアクティベート(PowerShell)
.\myenv\Scripts\Activate.ps1

# 仮想環境をアクティベート(コマンドプロンプト)
myenv\Scripts\activate.bat

# 仮想環境をディアクティベート
deactivate

注意 : PowerShellで仮想環境をアクティベートする際に実行ポリシーエラーが発生した場合は、前述のSet-ExecutionPolicy RemoteSigned -Scope CurrentUserを実行してください。

2. pyenv-win-venvプラグインを使用する

pyenv-win専用の仮想環境管理プラグインが利用可能です。

# pyenv-win-venvをインストール
Invoke-WebRequest -UseBasicParsing -Uri "https://raw.githubusercontent.com/pyenv-win/pyenv-win-venv/main/bin/install-pyenv-win-venv.ps1" -OutFile "$HOME\install-pyenv-win-venv.ps1"; &"$HOME\install-pyenv-win-venv.ps1"

# PATHを設定
[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\.pyenv-win-venv\bin;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")

# 仮想環境を簡単に作成・管理
pyenv-venv create myproject 3.12.0
pyenv-venv activate myproject

3. pyenv-virtualenv-windowsパッケージを使用する

pipでインストール可能な別のオプションです。

pip install pyenv-virtualenv-windows

このパッケージは、Linux/macOS向けのpyenv-virtualenvと同様の機能を提供します。

pyenv-winの高度な使い方(2025年向け新セクション)

複数バージョンの同時アクティベート

複数のPythonバージョンを同時にアクティベートできます。これはtoxのようなツールを使用する際に便利です。

# Python 3.11と3.12を同時にアクティベート
pyenv global 3.11.0 3.12.0

# 特定のプロジェクトに複数バージョンを設定
pyenv local 3.8.10 3.9.7 3.10.11

バージョンプレフィックス解決(2.3.6以降)

pyenv-win 2.3.6以降、バージョンプレフィックス解決が可能です。

# 最新の3.12.xをインストール
pyenv install 3.12

# 最新の3.11.xをインストール
pyenv install 3.11:latest

# 注意:アンインストールコマンドではプレフィックス解決は使用不可
pyenv uninstall 3.12.5  # 完全なバージョン番号が必要

キャッシュのクリア

インストールキャッシュをクリアしてディスクスペースを解放します。

# キャッシュをクリアしながらインストール
pyenv install 3.12.0 -c

# または手動でキャッシュフォルダを削除
Remove-Item -Recurse -Force "$env:USERPROFILE\.pyenv\pyenv-win\install_cache\*"

pyenv rehashの重要性

pipでライブラリをインストールしたり、バージョンフォルダ内のファイルを変更した後は、必ずpyenv rehashを実行する必要があります。

# 新しいパッケージをインストールした後
pip install numpy
pyenv rehash

# 注意:.pyenvフォルダの外で実行する必要がある
cd $HOME
pyenv rehash

トラブルシューティング(2025年更新版)

一般的な問題と解決策

1. 「pyenvが認識されません」エラー

原因 : PATHが正しく設定されていない

解決策 :

# PowerShellで環境変数を設定
[System.Environment]::SetEnvironmentVariable('path', $env:USERPROFILE + "\.pyenv\pyenv-win\bin;" + $env:USERPROFILE + "\.pyenv\pyenv-win\shims;" + [System.Environment]::GetEnvironmentVariable('path', "User"),"User")

# シェルを再起動
exit
# 新しいPowerShellウィンドウを開く

2. 「dark.exe」エラー(Python 3.9.11以降)

原因 : 一部のPythonバージョンのインストーラーの問題

解決策 :

  • Windowsの「プログラムの追加と削除」から影響を受けるバージョン(3.9.11以降)をアンインストール
  • その後、pyenv uninstallコマンドを実行

3. Python 3.13フリー スレッド バイナリ

Python 3.13は実験的にGILが無効化されたフリー スレッド バイナリを提供しています。

# 現在pyenv-winでは完全にはサポートされていないが、将来的には
# 以下のようにインストール可能になる見込み
# pyenv install 3.13.0t  # tサフィックスはフリー スレッド版を示す

4. Windows 10 1905以降でのPythonランチャーの競合

問題 : Windows 10 1905以降では、組み込みのPythonランチャーが干渉する可能性がある

解決策 :

  1. スタートメニューから「アプリ実行エイリアスの管理」を開く
  2. 「アプリ インストーラー」のPythonエイリアスをオフにする

5. 32ビット版と64ビット版の管理

pyenv-winは現在、デフォルトで64ビット版をインストールします。

# 64ビットシステムに32ビット版をインストール
pyenv install 3.12.0-win32

# バージョンを確認
pyenv versions
# 出力例:
# 3.12.0
# 3.12.0-win32

pyenv-winのアップデート方法(2025年版)

pipでインストールした場合

pip install --upgrade pyenv-win

PowerShellスクリプトでインストールした場合

# インストーラーを再実行(自動的にアップデート)
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"

Gitでクローンした場合

cd $HOME\.pyenv\pyenv-win
git pull

バージョンデータベースの更新

利用可能なPythonのバージョンリストを更新します。

pyenv update

ベストプラクティス(2025年版)

1. プロジェクトごとの設定ファイル

Gitリポジトリに.python-versionファイルを含めることで、チーム全体が同じPythonバージョンを使用することを保証します。

# .gitignoreに追加しない
# .python-version  <- これは追加しない

# 仮想環境フォルダを除外
myenv/
venv/
.venv/

2. requirements.txtとの併用

# Pythonバージョンを設定
pyenv local 3.12.0

# 仮想環境を作成
python -m venv .venv

# 仮想環境をアクティベート
.\.venv\Scripts\Activate.ps1

# 依存関係をインストール
pip install -r requirements.txt

# 依存関係を保存
pip freeze > requirements.txt

3. 開発環境の自動化

プロジェクトのセットアップを自動化するスクリプト例:

# setup.ps1
$PYTHON_VERSION = "3.12.0"
$VENV_NAME = ".venv"

# Pythonバージョンをインストール(インストール済みの場合はスキップ)
pyenv install $PYTHON_VERSION -s

# ローカルバージョンを設定
pyenv local $PYTHON_VERSION

# 仮想環境を作成
if (!(Test-Path $VENV_NAME)) {
    python -m venv $VENV_NAME
}

# 仮想環境をアクティベート
& "$VENV_NAME\Scripts\Activate.ps1"

# 依存関係をインストール
if (Test-Path "requirements.txt") {
    pip install -r requirements.txt
}

Write-Host "開発環境の準備ができました!" -ForegroundColor Green

4. CI/CDパイプラインでの使用

GitHub ActionsやAzure DevOpsなどのCI/CDパイプラインでpyenv-winを使用する例:

# .github/workflows/test.yml
name: Test

on: [push, pull_request]

jobs:
  test:
    runs-on: windows-latest
    strategy:
      matrix:
        python-version: ['3.9', '3.10', '3.11', '3.12']
    
    steps:
    - uses: actions/checkout@v3
    
    - name: Install pyenv-win
      run: |
        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
      shell: powershell
    
    - name: Install Python
      run: |
        $env:Path = "$env:USERPROFILE\.pyenv\pyenv-win\bin;$env:USERPROFILE\.pyenv\pyenv-win\shims;$env:Path"
        pyenv install ${{ matrix.python-version }}
        pyenv global ${{ matrix.python-version }}
      shell: powershell
    
    - name: Run tests
      run: |
        python -m pip install --upgrade pip
        pip install -r requirements.txt
        python -m pytest
      shell: powershell

まとめと今後の展望

pyenv-winは、Windowsユーザーが複数のPythonバージョンを管理するための最も効果的なツールの1つです。2025年現在、以下の点で大幅に改善されています。

  1. 安定性の向上 : 多くのバグが修正され、インストールプロセスがよりスムーズに
  2. 新機能 : バージョンプレフィックス解決、キャッシュ管理、改良されたshims機能
  3. 最新Pythonのサポート : Python 3.13を含む最新バージョンへの対応
  4. 成長するコミュニティ : より活発なコミュニティサポートと豊富なドキュメント

今後期待される機能

  • Python 3.13フリー スレッド バイナリの完全サポート
  • より統合された仮想環境管理
  • Windows Terminalとの連携強化
  • パフォーマンスの最適化

pyenv-winをマスターすることで、プロジェクトごとに最適なPython環境を構築し、開発効率を大幅に向上させることができます。定期的にpyenv updateを実行して最新のPythonバージョンを確認し、プロジェクトの要件に応じて適切なバージョンを選択してください。

pyenv-winで楽しいコーディングを! 🐍✨

以下の記事は2024年8月のものです。進歩の状態の保存、また記念のため残しておきます。もしかするとあえて古いバージョンを使っている方もいるかもしれません。

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 を実行して、利用可能なバージョンを一覧表示します。」

Windows で pyenv‑win を使うときの環境変数設定の重要ポイント

  1. pyenv‑win の仕組み
    pyenv‑win は、ユーザーごとに複数の Python バージョンを管理するツールです。管理する各バージョンは、pyenv‑win のディレクトリ内に配置され、コマンドラインから利用する際はシム(shim)を経由して呼び出されます。
  2. 環境変数 PATH の順序が決定的
    Windows のコマンドラインでは、環境変数 PATH に登録されたディレクトリの順序が重要です。
    • 上位に登録されたパスが優先される
      そのため、pyenv‑win のシムディレクトリ(通常は %USERPROFILE%\.pyenv\pyenv-win\shims%USERPROFILE%\.pyenv\pyenv-win\bin)が、システムや公式インストーラからインストールされた Python のパスよりも前に来ている必要があります。
    • 順序が逆だと…
      もしシステムの Python(例: C:\Users\minok\AppData\Local\Programs\Python\Python313\ やその Scripts ディレクトリ)が先に登録されていると、pyenv‑win で管理しているバージョンではなく、システムにインストールされた Python が優先的に使用されてしまいます。
  3. 正しく設定する手順
    • 環境変数の編集
      Windows の「環境変数の編集」画面から、ユーザー環境変数の PATH を確認し、pyenv‑win のシムディレクトリ(例: %USERPROFILE%\.pyenv\pyenv-win\shims および %USERPROFILE%\.pyenv\pyenv-win\bin)をリストの先頭に移動します。
    • シェルの再起動
      環境変数変更後は、必ずコマンドプロンプトまたは PowerShell を再起動して、設定が反映されるようにします。
    • バージョンの確認
      再起動後に python -V を実行し、期待する pyenv‑win 管理下のバージョン(例: 3.12.0 や 3.10.11)が表示されるか確認します。
  4. まとめ
    環境変数 PATH の順序が不適切だと、思わぬバージョンの Python が利用され、開発環境に混乱を招くことがあります。特に Windows では、公式インストーラや Microsoft Store 経由の Python が自動的に PATH に追加されることもあり、pyenv‑win を使う場合は環境変数の設定が非常に重要です。

タイトルとURLをコピーしました