Windows10で埋め込みPythonパッケージ（Python Embedded distribution）の作成

# はじめに
Pythonプログラムを配布する際、顧客にPythonランタイムをインストールしなくてもいいように組み込みパッケージを作成します。
ただし以下のランタイムのインストールは必要です。

```
注釈 埋め込み用配布には Microsoft C Runtime は含まれません。これを提供するのはアプリケーションのインストーラの責務です。そのランタイムは既に以前にユーザのシステムにインストール済みかもしれませんし、Windows Update により自動で更新されているかもしれません。このことはシステムディレクトリに ucrtbase.dll があるか探せばわかります。
```
# 環境
- windows10
- python-3.10.1-embed-amd64

# 手順

## Pythonのダウンロード

公式からダウンロードします。

https://www.python.org/downloads/windows/

（今回はpython-3.10.1-embed-amd64をダウンロードしました。）

以降、PowerShellで操作します。

```cmd
PS C:\home\work> mkdir tools


    ディレクトリ: C:\home\work


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/01/14      9:41                tools


PS C:\home\work> wget https://www.python.org/ftp/python/3.10.1/python-3.10.1-embed-amd64.zip -o tools/python-3.10.1-embed-amd64.zip
PS C:\home\work> cd .\tools\
PS C:\home\work\tools> Expand-Archive -Path .\python-3.10.1-embed-amd64.zip
PS C:\home\work\tools> rm .\python-3.10.1-embed-amd64.zip

```
## python310._pthを編集
適当なエディタで編集します。
import siteのコメントアウトをします。

```cmd
# Uncomment to run site.main() automatically
import site　<<==ここ

```

## pipのインストール

```cmd
（pythonのフォルダへ移動）
PS C:\home\work\tools> cd .\python-3.10.1-embed-amd64\
PS C:\home\work\tools\python-3.10.1-embed-amd64> wget "https://bootstrap.pypa.io/get-pip.py" -O "get-pip.py"
PS C:\home\work\tools\python-3.10.1-embed-amd64> .\python.exe .\get-pip.py
Collecting pip
  Using cached pip-21.3.1-py3-none-any.whl (1.7 MB)

・・・

Successfully installed pip-21.3.1 setuptools-60.5.0 wheel-0.37.1

```

## お試しでpipでrequestsをインストール

```cmd
PS C:\home\work\tools\python-3.10.1-embed-amd64> .\python.exe -m pip install requests
Collecting requests

・・・
 
Successfully installed certifi-2021.10.8 charset-normalizer-2.0.10 idna-3.3 requests-2.27.1 urllib3-1.26.8
PS C:\home\work\tools\python-3.10.1-embed-amd64>
```

\Lib\site-packagesにpipでインストールされていることを確認。作業直後には以下のようになっています。

```cmd
PS C:\home\work\tools\python-3.10.1-embed-amd64> ls .\Lib\site-packages\


    ディレクトリ: C:\home\work\tools\python-3.10.1-embed-amd64\Lib\site-packages


Mode                 LastWriteTime         Length Name
----                 -------------         ------ ----
d-----        2022/01/14      9:57                certifi
d-----        2022/01/14      9:57                certifi-2021.10.8.dist-info
d-----        2022/01/14      9:57                charset_normalizer
d-----        2022/01/14      9:57                charset_normalizer-2.0.10.dist-info
d-----        2022/01/14      9:57                idna
d-----        2022/01/14      9:57                idna-3.3.dist-info
d-----        2022/01/14      9:54                pip
d-----        2022/01/14      9:54                pip-21.3.1.dist-info
d-----        2022/01/14      9:54                pkg_resources
d-----        2022/01/14      9:57                requests
d-----        2022/01/14      9:57                requests-2.27.1.dist-info
d-----        2022/01/14      9:54                setuptools
d-----        2022/01/14      9:54                setuptools-60.5.0.dist-info
d-----        2022/01/14      9:57                urllib3
d-----        2022/01/14      9:57                urllib3-1.26.8.dist-info
d-----        2022/01/14      9:54                wheel
d-----        2022/01/14      9:54                wheel-0.37.1.dist-info
d-----        2022/01/14      9:54                _distutils_hack
-a----        2022/01/14      9:54            151 distutils-precedence.pth
```

# 参考文献

* 超軽量、超高速な配布用Python「embeddable python」
https://qiita.com/mm_sys/items/1fd3a50a930dac3db299

* Windows 上に Python3.7 embeddable と pip をインストールする
https://bamch0h.hatenablog.com/entry/2019/09/29/162601

* 公式 3. Windows で Python を使う — Python 3.6.4 ドキュメント 4.4. 埋め込み可能なパッケージ
https://docs.python.org/ja/3/using/windows.html#the-embeddable-package