<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://www.nakamuri.info/mw/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ja">
		<id>https://www.nakamuri.info/mw/index.php?feed=atom&amp;namespace=0&amp;title=%E7%89%B9%E5%88%A5%3A%E6%96%B0%E3%81%97%E3%81%84%E3%83%9A%E3%83%BC%E3%82%B8</id>
		<title>tknotebook - 新しいページ [ja]</title>
		<link rel="self" type="application/atom+xml" href="https://www.nakamuri.info/mw/index.php?feed=atom&amp;namespace=0&amp;title=%E7%89%B9%E5%88%A5%3A%E6%96%B0%E3%81%97%E3%81%84%E3%83%9A%E3%83%BC%E3%82%B8"/>
		<link rel="alternate" type="text/html" href="https://www.nakamuri.info/mw/index.php/%E7%89%B9%E5%88%A5:%E6%96%B0%E3%81%97%E3%81%84%E3%83%9A%E3%83%BC%E3%82%B8"/>
		<updated>2026-10-15T11:21:49Z</updated>
		<subtitle>提供: tknotebook</subtitle>
		<generator>MediaWiki 1.22.6</generator>

	<entry>
		<id>//www.nakamuri.info/mw/index.php/Python%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B</id>
		<title>Pythonアプリケーションを起動する</title>
		<link rel="alternate" type="text/html" href="https://www.nakamuri.info/mw/index.php/Python%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E8%B5%B7%E5%8B%95%E3%81%99%E3%82%8B"/>
				<updated>2026-10-09T09:32:37Z</updated>
		
		<summary type="html">&lt;p&gt;Nakamuri: /* 注意 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:コンピュータ]][[Category:Python]]&lt;br /&gt;
[[メインページ]]&amp;amp;gt;[[コンピュータの部屋#Python]]&amp;amp;gt;[[Python Tips]]&lt;br /&gt;
&lt;br /&gt;
==はじめに==&lt;br /&gt;
&lt;br /&gt;
python でアプリケーションを起動するのに最も単純な方法は&lt;br /&gt;
 python &amp;lt;pythonスクリプトファイルのパス&amp;gt;&lt;br /&gt;
でしょう。基本の基本です。&lt;br /&gt;
&lt;br /&gt;
しかし、pythonにはアプリケーションを起動するための様々な方法が用意されています。この記事では、pythonでスクリプトを起動するためのいくつかの方法を紹介します。&lt;br /&gt;
&lt;br /&gt;
==スクリプトファイルを指定して起動する ==&lt;br /&gt;
&lt;br /&gt;
既に「はじめに」で紹介した通り、アプリケーションは &lt;br /&gt;
 python &amp;lt;pythonスクリプトファイルのパス&amp;gt;&lt;br /&gt;
で起動できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pythonスクリプトファイルのパス&amp;gt;のファイルのモジュールレベルのコードが起動されます。起動されるモジュールにローカルな __name__ 変数は &amp;quot;__main__&amp;quot; に設定されます。&lt;br /&gt;
&lt;br /&gt;
sys.path には &amp;lt;pythonスクリプトファイルのパス&amp;gt; のディレクトリが追加されます。&lt;br /&gt;
&lt;br /&gt;
=== 注意 ===&lt;br /&gt;
&lt;br /&gt;
sys.path にはアプリケーションのモジュールやパッケージのトップディレクトリが追加されないとモジュールやパッケージの検索がおかしくなります。&lt;br /&gt;
&amp;lt;pythonスクリプトファイルのパス&amp;gt; のディレクトリにはモジュールやパッケージのトップディレクトリを指定しましょう。&lt;br /&gt;
&lt;br /&gt;
==ディレクトリを指定して起動する ==&lt;br /&gt;
&lt;br /&gt;
アプリケーションを&lt;br /&gt;
 python &amp;lt;ディレクトリのパス&amp;gt;&lt;br /&gt;
で起動できます。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ディレクトリのパス&amp;gt;に__main__.py が無ければ&lt;br /&gt;
 python.exe: can't find '__main__' module in　&amp;lt;ディレクトリのパス&amp;gt;&lt;br /&gt;
とエラーが表示されて実行できません。&lt;br /&gt;
&lt;br /&gt;
&amp;lt;ディレクトリのパス&amp;gt;に__main__.py が有れば、__main__.py のモジュールレベルのコードが起動されます。&lt;br /&gt;
起動される__main__.pyにローカルな __name__ 変数は &amp;quot;__main__&amp;quot; に設定されます。&lt;br /&gt;
&lt;br /&gt;
sys.path には &amp;lt;ディレクトリのパス&amp;gt; が追加されます。&lt;br /&gt;
&lt;br /&gt;
=== 注意 ===&lt;br /&gt;
&lt;br /&gt;
sys.path にはアプリケーションのモジュールやパッケージのトップディレクトリが追加されないと&lt;br /&gt;
モジュールやパッケージの検索がおかしくなります。&lt;br /&gt;
&amp;lt;ディレクトリのパス&amp;gt;にはモジュールやパッケージのトップディレクトリを指定しましょう。&lt;br /&gt;
&lt;br /&gt;
==zipファイル内のファイルから起動する==&lt;br /&gt;
&lt;br /&gt;
python はzipで固められたアプリを起動できます。&lt;br /&gt;
やり方は簡単で、zipファイルをディレクトリであるかのようにして、zipファイル内のファイルを指定します。&lt;br /&gt;
&lt;br /&gt;
 python &amp;lt;zipファイル名のパス&amp;gt;/&amp;lt;zip内ファイルのパス&amp;gt;&lt;br /&gt;
&lt;br /&gt;
起動されるコードから、zipファイル内の他のモジュールやパッケージを普通に import できます。&lt;br /&gt;
でも、zip内の他のファイルにアクセスするには zip 内のファイルを閲覧するライブラリを使う必要が有ります。&lt;br /&gt;
&lt;br /&gt;
 python &amp;lt;zipファイル名のパス&amp;gt;/&amp;lt;zip内ディレクトリのパス&amp;gt;&lt;br /&gt;
&lt;br /&gt;
で起動した場合は、zipファイル内に &amp;lt;zip内ディレクトリのパス&amp;gt; が存在し、&lt;br /&gt;
&amp;lt;zip内ディレクトリのパス&amp;gt; が指定するディレクトリ内に '''__main__.py''' が存在していることが必要です。&lt;br /&gt;
python　は __main__.py のモジュールレベルのコードを起動します。&lt;br /&gt;
&lt;br /&gt;
また、&lt;br /&gt;
 python &amp;lt;zipファイル名のパス&amp;gt;&lt;br /&gt;
という形式の起動では、zipファイル内のトップに __main__.py ファイルが存在している必要が有ります。&lt;br /&gt;
この __main__.py が起動されます。&lt;br /&gt;
&lt;br /&gt;
結局のところ、zipファイルはディレクトリとみなされ、&lt;br /&gt;
zipファイル内のファイルやディレクトリを指定して起動を行っているだけで、&lt;br /&gt;
起動の様子は'''「[[#スクリプトファイルを指定して起動する|スクリプトファイルを指定して起動する]]」'''や&lt;br /&gt;
'''「[[#ディレクトリを指定して起動する|ディレクトリを指定して起動する]]」''' と全く同じです。&lt;br /&gt;
'''__name__変数'''や '''sys.path へのディレクトリの追加'''や'''注意'''も同じなので、そのあたりは&lt;br /&gt;
'''「[[#スクリプトファイルを指定して起動する|スクリプトファイルを指定して起動する]]」'''や&lt;br /&gt;
'''「[[#ディレクトリを指定して起動する|ディレクトリを指定して起動する]]」'''を参照してください。&lt;br /&gt;
&lt;br /&gt;
==パッケージのエントリポイントを実行する==&lt;br /&gt;
&lt;br /&gt;
アプリケーションがパッケージとして pythonランタイムや仮想環境にインストールされている場合、&lt;br /&gt;
アプリケーションをコマンドで起動できます。&lt;br /&gt;
&lt;br /&gt;
アプリケーションがパッケージの '''pyproject.toml''' に&lt;br /&gt;
 [project.scripts]&lt;br /&gt;
 コマンドの名称 = &amp;quot;パッケージ名:関数名&amp;quot;&lt;br /&gt;
が記述されていると、パッケージを pip や uv などで環境に登録すると、&lt;br /&gt;
コマンド(Windowsの場合はコマンドの名称.exe) がpython実行環境に登録されます。&lt;br /&gt;
つまり CLI からコマンドとして起動できるようになります。&lt;br /&gt;
&lt;br /&gt;
'''複数のコマンドを登録できます。'''&lt;br /&gt;
&lt;br /&gt;
コマンドが起動するのは '''[project.scripts]''' に記述された パッケージの関数です。つまり関数が直に起動されます。&lt;br /&gt;
但し、関数が実行される前に、パッケージの初期化(パッケージファイルのモジュールレベルのコード、又は __init__.py のモジュールレベルのコード)が実行されます。&lt;br /&gt;
&lt;br /&gt;
'''実行されるpythonファイルの __name__ 変数は &amp;quot;__main__&amp;quot; にセットされません'''。実行されるファイルのモジュール名がセットされます。'''実行されるパッケージはインストール済みなので、sys.path にはパッケージのトップディレクトリが予め設定済みです'''。&lt;br /&gt;
&lt;br /&gt;
===注意===&lt;br /&gt;
WindowsのPIM版のシステムpythonにアプリをパッケージとしてインストールする場合、コマンドは Scriptsディレクトリにインストールされますが、Scriptsディレクトリに PATH は通ってないので'''コマンドを起動できません'''。'''py install --refresh''' を打つと '''~/AppData/Local/Python/bin''' にもコマンドが登録されて使えるようになります。&lt;br /&gt;
&lt;br /&gt;
仮想環境の場合、パッケージをインストールすると仮想環境の Scriptsディレクトリにコマンドが登録されるので、即使えるようになります。&lt;br /&gt;
&lt;br /&gt;
PIM版のシステムpythonにアプリをパッケージとしてインストールする場合、複数のシステムpythonに同じアプリをインストールすると、同じコマンド名が競合することになります。この場合 py install --refresh は新しい pythonのものを優先して登録するので注意してください。基本アプリは仮想環境で実行しましょう。&lt;br /&gt;
&lt;br /&gt;
==パッケージを -m オプションで起動==&lt;br /&gt;
&lt;br /&gt;
アプリケーションがパッケージとして pythonランタイムや仮想環境にインストールされている場合、&lt;br /&gt;
アプリケーションのパッケージやモジュールを -m オプションで起動できます。&lt;br /&gt;
 python -m &amp;lt;モジュール名&amp;gt;&lt;br /&gt;
通常パッケージがディレクトリの場合、実行するコードが無いのでパッケージを実行することはできませんが、&lt;br /&gt;
パッケージがモジュールファイルの場合や、パッケージディレクトリが __main__.py ファイルを持っている場合、&lt;br /&gt;
python -m パッケージ名 でパッケージを起動できます。&lt;br /&gt;
&lt;br /&gt;
パッケージがモジュールファイルの場合は、モジュールのモジュールレベルのコードが、&lt;br /&gt;
パッケージディレクトリに __main__.py が有る場合は __main__.py のモジュールレベルのコードが実行されます。&lt;br /&gt;
&lt;br /&gt;
但し、__main__.py が実行される前に、__init__.py が有れば、そのモジュールレベルのコードが実行されます。&lt;br /&gt;
&lt;br /&gt;
実行されるパッケージはインストール済みなので、'''sys.path にはパッケージのトップディレクトリが予め設定済み'''です。&lt;br /&gt;
&lt;br /&gt;
'''起動されるモジュールの __name__ 変数が &amp;quot;__main__&amp;quot; にセットされます'''。&lt;br /&gt;
&lt;br /&gt;
-m オプションでの起動の特徴は、'''py -3.14 -m XXXX''' や python3.14 -m XXXX というように、&lt;br /&gt;
pythonの版を指定して起動できる点です。コマンドによるエントリポイント起動のようなややこしさはありません。&lt;br /&gt;
必要に応じて使い分けてください。&lt;br /&gt;
&lt;br /&gt;
==まとめ==&lt;br /&gt;
&lt;br /&gt;
pythonのアプリの起動方法を紹介しました。&lt;br /&gt;
&lt;br /&gt;
pythonのアプリをどこでも使えるツールとして使えるようにするなら'''「エントリポイント(コマンド)」'''が最も強力な起動方法でしょう。以下にその特徴と注意点をまとめておきます。&lt;br /&gt;
&lt;br /&gt;
{| class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
|+ pythonアプリ起動方法　まとめ&lt;br /&gt;
|-&lt;br /&gt;
! 起動方法 !! 起動コード ||__name__ !! sys.path !! 特徴・備考&lt;br /&gt;
|-&lt;br /&gt;
| ファイル指定 || 指定ファイルのモジュールレベルのコード || &amp;quot;__main__&amp;quot; || ファイルのディレクトリが追加 || 最も基本的&lt;br /&gt;
|-&lt;br /&gt;
| ディレクトリ指定 || __main__.py のモジュールレベルのコード ||  &amp;quot;__main__&amp;quot; || ディレクトリが追加 || __main__.py が指定ディレクトリに必要&lt;br /&gt;
|-&lt;br /&gt;
| ファイル指定(zipファイル内) ||  指定ファイルのモジュールレベルのコード || &amp;quot;__main__&amp;quot; || ファイルのディレクトリが追加 || アプリを単一ファイルで配布できる。 &lt;br /&gt;
|-&lt;br /&gt;
| ディレクトリ指定(zipファイル内) || __main__.py のモジュールレベルのコード || &amp;quot;__main__&amp;quot; || ディレクトリが追加 || __main__.py が指定ディレクトリに必要。&lt;br /&gt;
&lt;br /&gt;
アプリを単一ファイルで配布できる。&lt;br /&gt;
&lt;br /&gt;
zipファイルのトップに __main__.py を置けば、zipファイルをスクリプトファイルのように扱える。&lt;br /&gt;
|-&lt;br /&gt;
| エントリポイント(コマンド) || pyproject.toml で指定された モジュールの関数 || モジュール名そのまま || パッケージディレクトリが事前に追加 &lt;br /&gt;
|| pyproject.tomlで設定要。&lt;br /&gt;
パッケージをインストールする必要あり。&lt;br /&gt;
&lt;br /&gt;
コマンドは複数登録可能なので、様々な機能を一つのアプリで提供できる。&lt;br /&gt;
|-&lt;br /&gt;
| モジュール指定(-m) || 指定モジュールファイル又は __main__.py のモジュールレベルコード || &amp;quot;__main__&amp;quot; || パッケージディレクトリが事前に追加 &lt;br /&gt;
| モジュールファイル又は__main__.pyが必要。&lt;br /&gt;
パッケージをインストールする必要あり。&lt;br /&gt;
|}&lt;/div&gt;</summary>
		<author><name>Nakamuri</name></author>	</entry>

	<entry>
		<id>//www.nakamuri.info/mw/index.php/Python_Install_Manager_%E3%81%A8%E3%81%AF</id>
		<title>Python Install Manager とは</title>
		<link rel="alternate" type="text/html" href="https://www.nakamuri.info/mw/index.php/Python_Install_Manager_%E3%81%A8%E3%81%AF"/>
				<updated>2026-10-07T11:34:38Z</updated>
		
		<summary type="html">&lt;p&gt;Nakamuri: /* 注意 */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Category:コンピュータ]][[Category:Python]]&lt;br /&gt;
[[メインページ]]&amp;amp;gt;[[コンピュータの部屋#Python]]&amp;amp;gt;[[Python Tips]]&lt;br /&gt;
&lt;br /&gt;
== はじめに ==&lt;br /&gt;
&lt;br /&gt;
2025年10月7日 python3.14 はリリースされると共に、python の新しいインストーラ Python Install Manager(PIM) がリリースされました。&lt;br /&gt;
&lt;br /&gt;
PIM はこれまでの個別のランタイム用インストーラーとは異なり、&lt;br /&gt;
複数の python ランタイムを自在にインストール/アンインストールするためのインストールマネージャーで&lt;br /&gt;
特定の python ランタイムとは独立した存在です。今のところ Windows 専用ですが、これまでの特定の python ランタイムとは&lt;br /&gt;
異なる考え方で作られています。&lt;br /&gt;
&lt;br /&gt;
# 複数の python ランタイムを自在にインストール/アンインストールでき管理できる。&lt;br /&gt;
# 従来の python コマンドの他に linux版等と互換な名称のpython3 コマンドが提供されるようになった。&lt;br /&gt;
# バージョン番号付きの python3.13 コマンドなども提供され、py コマンドを使わなくても python のバージョンが指定できるようになった。&lt;br /&gt;
# 従来、各ランライムの Scripts ディレクトリに格納されていた、パッケージと共にインストールされる コマンドが、一つのディレクトリに集約され、いつでも利用できるようになった。&lt;br /&gt;
&lt;br /&gt;
以下に PIM の詳細を説明します。&lt;br /&gt;
&lt;br /&gt;
== インストール ==&lt;br /&gt;
&lt;br /&gt;
まず、インストールから説明します。&lt;br /&gt;
&lt;br /&gt;
実は、PIM のインストールでは、pythonの旧来のバージョンや python Launcherを完全にアンインストールしないといろいろな不具合に襲われます。&lt;br /&gt;
下記URLの手順に従って、古い python は削除した方が良いでしょう。古いランタイムと python Launcher(pyコマンド)の両方を削除して下さい。&lt;br /&gt;
&lt;br /&gt;
'''Python完全アンインストール手順'''&lt;br /&gt;
 https://www.insource-da.co.jp/dxpedia/02_0008.html&lt;br /&gt;
&lt;br /&gt;
実はこれだけでも不十分で、[設定]→[アプリの詳細設定]→[アプリ実行エイリアス]&lt;br /&gt;
の画面で、'''python.exe'''/'''pythonw.exe'''/'''python3.exe''' を OFF にすることをお勧めします。&lt;br /&gt;
&lt;br /&gt;
'''アプリ実行エイリアス'''とは ~/AppData/Local/Microsoft/WindowsApps に置かれるコマンドのことで、&lt;br /&gt;
上記の設定で削除することができます。ここには notepad.exe など様々などこからでも使えるコマンドが登録されていて、&lt;br /&gt;
python.exe は利用者が python コマンドを打鍵したとき MSストアへ誘導するなどの機能が有りますが、pythonランタイムと衝突して&lt;br /&gt;
様々な不具合を生じさせることが報告されていますので、OFFにすることを強く推奨します。&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[ファイル:アプリ実行エイリアス python.png|700px]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
以上の掃除が終わったら、PIMをインストールしましょう。&lt;br /&gt;
&lt;br /&gt;
'''PIM(Python Install Manager)'''のインストーラは '''https://www.python.org/downloads/''' からもダウンロードできますし、&lt;br /&gt;
'''MSストア'''から['''Python Install Manager''']を選んでインストールすることもできます。MSストア版と python.org版は同一です。&lt;br /&gt;
&lt;br /&gt;
尚、PIMは自動更新ですので、手動での更新は不要です。&lt;br /&gt;
&lt;br /&gt;
== 最初の pythonランタイムのインストール ==&lt;br /&gt;
&lt;br /&gt;
PIM がインストールされた時点では python ランタイムは何もインストールされていません。&lt;br /&gt;
&lt;br /&gt;
powershellのコマンドラインで&lt;br /&gt;
 py&lt;br /&gt;
と叩くと、最新版の pythonランタイムのインストールが始まり、終わると 最新のpythonが起動します。&lt;br /&gt;
&lt;br /&gt;
インストールは従来の python インストーラに比べとんでもなく高速です。&lt;br /&gt;
&lt;br /&gt;
python ランタイムは '''~/AppData/Local/Python の pythoncore-3.14-64''' というようなフォルダにインストールされますが&lt;br /&gt;
ここには PATH が通っていません。python や他のコマンドを起動するコマンド群は '''~/AppData/Local/Python/bin''' に置かれます。&lt;br /&gt;
こちらには PATH が通っています。&lt;br /&gt;
&lt;br /&gt;
python.exe, pythonw.exe, python3.exe, pythonw3.exe、python3-64.exe, pythonw3-64.exe はインストールした pythonランタイムのうち、最新のランタイムのpythonを起動するコマンドです。&lt;br /&gt;
&lt;br /&gt;
pip.exe, pip3.exe はインストールした pythonランタイムのうち、最新のランタイムのpipを起動するコマンドです。&lt;br /&gt;
&lt;br /&gt;
python3.14.exe, python3.14-64.exe, pythonw3,14.exe, pythonw3.14-64.exe 等の pythonランタイムバージョンが付いたコマンドは、指定バージョンの pythonランタイムの python を起動します。&lt;br /&gt;
&lt;br /&gt;
==pythonランタイムのインストール==&lt;br /&gt;
&lt;br /&gt;
pythonのランタイムを追加インストールするには&lt;br /&gt;
 py install &amp;lt;バージョン&amp;gt;&lt;br /&gt;
 例 py install 3.12&lt;br /&gt;
というように、python install コマンドに pythonランタイムのバージョンを指定します。&lt;br /&gt;
&lt;br /&gt;
インストールする pythonランタイムが既にインストール済みの pythonランタイムより古ければ '''~/AppData/Local/Python/bin''' に有る&lt;br /&gt;
python.exe, pythonw.exe, python3.exe, pythonw3.exe、python3-64.exe, pythonw3-64.exe は更新されず、最新の python を呼び出すように保たれます。&lt;br /&gt;
&lt;br /&gt;
インストールする pythonランタイムが既にインストール済みの pythonランタイムより新しければ '''~/AppData/Local/Python/bin''' に有る&lt;br /&gt;
python.exe, pythonw.exe, python3.exe, pythonw3.exe、python3-64.exe, pythonw3-64.exe は更新され、最新の python を呼び出すようになります。&lt;br /&gt;
&lt;br /&gt;
バージョン付きのコマンド python&amp;lt;バージョン&amp;gt;.exe, python&amp;lt;バージョン&amp;gt;-64.exe, pythonw&amp;lt;バージョン&amp;gt;.exe, pythonw&amp;lt;バージョン&amp;gt;-64.exe が新たに追加されます。&lt;br /&gt;
&lt;br /&gt;
===注意===&lt;br /&gt;
&lt;br /&gt;
pythonランタイムのインストールでは、マイナーバージョンまで指定すると(例: 3.14)、その時点の最新のパッチバージョンがインストールされますが、&lt;br /&gt;
以下のようにパッチバージョンまで指定することもできます。&lt;br /&gt;
 py install 3.14.6&lt;br /&gt;
この場合は、既に python3.14 がインストール済みである場合、上書きするか問合せが行われます。&lt;br /&gt;
上書きする場合、インストール済みの3.14は削除されて、指定されたパッチバージョンが インストールされます。&lt;br /&gt;
インストール前の python が 3.14.7 なら インストールで 古い 3.14.6 に戻ります。&lt;br /&gt;
&lt;br /&gt;
つまり、マイナーバージョンが同時に2種類インストールされることはないということです。&lt;br /&gt;
これは旧来のインストーラーでも同じです。パッチバージョンはバグフィックスであり、基本的に同じ ランタイムという考え方だからです。&lt;br /&gt;
&lt;br /&gt;
==pythonランタイムのアンインストール==&lt;br /&gt;
&lt;br /&gt;
pythonのランタイムをインストールするには&lt;br /&gt;
 py uninstall &amp;lt;バージョン&amp;gt;&lt;br /&gt;
 例 py uninstall 3.12&lt;br /&gt;
というように、python uninstall コマンドに pythonランタイムのバージョンを指定します。&lt;br /&gt;
&lt;br /&gt;
アンインストールする pythonランタイムが削除されることによって、インストール済みの pythonランタイムの最も新たしいバージョンが変化すれば、 '''~/AppData/Local/Python/bin''' に有る python.exe, pythonw.exe, python3.exe, pythonw3.exe、python3-64.exe, pythonw3-64.exe が更新され、インストール済みの pythonランタイムの最も新たしいバージョンのpython を呼び出すようになります。&lt;br /&gt;
&lt;br /&gt;
バージョン付きのコマンド python&amp;lt;バージョン&amp;gt;.exe, python&amp;lt;バージョン&amp;gt;-64.exe, pythonw&amp;lt;バージョン&amp;gt;.exe, pythonw&amp;lt;バージョン&amp;gt;-64.exe は削除されます。&lt;br /&gt;
&lt;br /&gt;
==pythonランタイムの一覧==&lt;br /&gt;
&lt;br /&gt;
インストールされている python ランタイムの一覧は &lt;br /&gt;
&lt;br /&gt;
 py list&lt;br /&gt;
 Tag           Name            Managed By  Version  Alias&lt;br /&gt;
 3.14[-64]  *  Python 3.14.8   PythonCore  3.14.8   python3[-64].exe, python3.14[-64].exe&lt;br /&gt;
 3.13[-64]     Python 3.13.16  PythonCore  3.13.16  python3.13[-64].exe&lt;br /&gt;
&lt;br /&gt;
で表示できます。&lt;br /&gt;
&lt;br /&gt;
これでも十分ですが、インストール先を確認したい場合はこれも有用です。&lt;br /&gt;
&lt;br /&gt;
 py -0p&lt;br /&gt;
 -V:3.14[-64] *   C:\Users\中村拓男\AppData\Local\Python\pythoncore-3.14-64\python.exe&lt;br /&gt;
 -V:3.13[-64]     C:\Users\中村拓男\AppData\Local\Python\pythoncore-3.13-64\python.exe&lt;br /&gt;
&lt;br /&gt;
== ~/AppData/Local/Python/bin にあるコマンドの役割 ==&lt;br /&gt;
&lt;br /&gt;
以上からわかるように python.exe, pythonw.exe, python3.exe, pythonw3.exe、python3-64.exe, pythonw3-64.exe は&lt;br /&gt;
常にインストールされている最新のpythonを起動するのに対し、&lt;br /&gt;
python&amp;lt;バージョン&amp;gt;.exe, python&amp;lt;バージョン&amp;gt;-64.exe, pythonw&amp;lt;バージョン&amp;gt;.exe, pythonw&amp;lt;バージョン&amp;gt;-64.exe は&lt;br /&gt;
バージョンで指定されたバージョンの python を起動します。&lt;br /&gt;
&lt;br /&gt;
旧来の python launcher では 古いpythonを起動するのに py -3.12 とかしていましたが、&lt;br /&gt;
PIM版では python3.12 でも起動できるようになりました。&lt;br /&gt;
&lt;br /&gt;
===注意===&lt;br /&gt;
&lt;br /&gt;
uv でインストールする python ランタイムは ~/.local/bin に python&amp;lt;バージョン&amp;gt;.exe をインストールしますが&lt;br /&gt;
PIM版のランタイムと名称が競合します。また uv で --default 付きで pythonランタイムをインストールすると&lt;br /&gt;
~/.local/bin に python.exe, python3.exe をインストールするので名称が競合します。&lt;br /&gt;
どちらが起動されるかは PATH の設定次第です。&lt;br /&gt;
&lt;br /&gt;
できれば PIM版とUV版のランタイムを同時に使用しない方が良いでしょう。&lt;br /&gt;
&lt;br /&gt;
:UVは PIM版のランタイムを問題なく扱えます。&lt;br /&gt;
&lt;br /&gt;
==パッケージのコマンドの扱いの違い==&lt;br /&gt;
&lt;br /&gt;
Python のパッケージには、Pythonの実行環境に コマンドを追加するものが有ります。&lt;br /&gt;
PIM版の Pythonランタイムでも、パッケージをインストールすると、パッケージによってはコマンドが pythonランタイムに追加されますが、&lt;br /&gt;
それは、Pythonランタイム の '''Scripts''' ディレクトリに置かれます。&lt;br /&gt;
&lt;br /&gt;
例えば pythonに jupyter を pip でインストールすると、'''Scriptsディレクトリ'''に &lt;br /&gt;
jupyter.exe をはじめたくさんの コマンドが追加されます。これは旧来の pythonでも PIM版のpythonランタイムでも同じです。&lt;br /&gt;
&lt;br /&gt;
但し、PIM版の pythonランタイムは複数同時にインストール可能なため、'''Scriptsディレクトリ'''には '''Path が通っていません'''。&lt;br /&gt;
このため、パッケージのコマンドは '''PATH の通っている''' '''~/AppData/Local/Python/bin''' に置かれます。&lt;br /&gt;
&lt;br /&gt;
このディレクトリは一つしかないので、複数のpythonランタイムに同じ名前のパッケージのコマンドがインストールされると&lt;br /&gt;
名前が衝突してしまいます。そこで、PIM ではインストールされている pythonランタイムの中でより新しいもののパッケージの&lt;br /&gt;
コマンドを優先します。&lt;br /&gt;
&lt;br /&gt;
ここで注意すべきなのは、パッケージのコマンドは '''~/AppData/Local/Python/bin''' に自動的には置かれないことです。&lt;br /&gt;
パッケージを pip でインストールした時点ではコマンドは '''Scriptsディレクトリ''' に置かれますが　'''~/AppData/Local/Python/bin'''　には'''置かれません'''。&lt;br /&gt;
 py install --refresh&lt;br /&gt;
が叩かれると、PIM は各pythonランタイムの '''Scriptsディレクトリ'''の状況を調べ、'''~/AppData/Local/Python/bin''' に置くべき&lt;br /&gt;
コマンドを選んで置きます。従って、パッケージをインストールしても、'''py install --refresh''' を実行しないとコマンドは使えません。&lt;br /&gt;
&lt;br /&gt;
PIMを使いだすと、パッケージのコマンドが使えず困った経験がある人は多いでしょう。すぐに py install --refresh を打ってください。&lt;br /&gt;
&lt;br /&gt;
現在パッケージは仮想環境にインストールすることが当たり前になりつつありますが、&lt;br /&gt;
pipxなどシステムpythonに直接インストールしたいパッケージもごく少数有るので、&lt;br /&gt;
PIM版でもシステムpythonにパッケージをインストール&lt;br /&gt;
できるようにしています。しかし、名前の重複はいかんともしがたいので、この複雑さは諦めましょう。&lt;br /&gt;
&lt;br /&gt;
基本、パッケージは仮想環境にインストールすべきです。&lt;br /&gt;
仮想環境ならば '''Scriptsディレクトリ''' に PATHは通っているので問題なく使えます。&lt;br /&gt;
システムpython を複数インストールするのは、仮想環境の親の システムpython を複数用意するためなのです。&lt;br /&gt;
&lt;br /&gt;
===注意===&lt;br /&gt;
&lt;br /&gt;
この話は uv pip XXXX --system で PIM版のシステムpython にパッケージを追加した場合も同じです。&lt;br /&gt;
パッケージ追加後, パッケージのコマンドを有効にするには py install --refresh が必要ですので注意してください。&lt;br /&gt;
&lt;br /&gt;
==まとめ==&lt;br /&gt;
&lt;br /&gt;
以上の説明からお分かりかと思いますが、pythonのインストーラーはバージョン毎に別々のインストーラー用意されることは近い将来なくなり、その代わりに、PIMで複数のバージョンを自在にインストールできるようになりました。&lt;br /&gt;
&lt;br /&gt;
これにより pythonのバージョンに依存するアプリケーションを実行することが容易になりました。&lt;br /&gt;
&lt;br /&gt;
その分パッケージのコマンドの管理がややこしくなりました。&lt;/div&gt;</summary>
		<author><name>Nakamuri</name></author>	</entry>

	</feed>