Pythonを使うシーンが多いけど、他の人に使ってもらうにどんな方法とるか悩んでいる方も多いのではないでしょうか?
方法として、色々ありますが、課題もあるかと思います。
- Djangoとか使って、WebAPIにする
→ サーバー準備とか、めんどいなぁ - pyinstallerでexeにする
→ numpyとか入れると動作重いしなぁ
そこで、Windowsでの配布方法ではpython embeddable packageを使う方法があります。
本記事の内容
- python embeddable packageのダウンロード
- 環境設定
- ライブラリのインストール
- サンプルコードを動かしてみる
64bitの用のサンプルコードは下記よりダウンロードください。
目次
ダウンロード
下記のリンクよりダウンロードします。
pythonのバージョンは好きなものを選び、その中から
「Windows embeddable package (**-bit)」
を選びます。バージョンはStable Releasesから選べばOKです。

ダウンロードしたら、適当にフォルダを作成して、その中に解凍したフォルダを入れます。
解凍したフォルダは長ったらしいので、python-3.*.*とか短くしましょう
先に書いておくと、最終的なフォルダ構成は下記のようになります。

環境の設定
いくつかファイルを作成、追加して、開発しやすい環境にします。
python consoleを動かすバッチファイル
解凍したpythonを入れているフォルダに二つのバッチファイルを作成します。
- setenv.bat
- python_console.bat
これがないと使えないというわけではないですが、作っておいた方が便利です。
setenv.bat
PYTHON_PATHはバージョンというかpython embededdのフォルダ名に合わせてください。
SET DP0=%~dp0
SET DP0=%DP0:~0,-1%
rem overriding windows user/local environment
SET LOCALENV_DIR=%DP0%\_local_env
SET TMP=%LOCALENV_DIR%\_tmp
SET TEMP=%LOCALENV_DIR%\_tmp
SET HOME=%LOCALENV_DIR%\userprofile
SET HOMEPATH=%LOCALENV_DIR%\userprofile
SET USERPROFILE=%LOCALENV_DIR%\userprofile
SET LOCALAPPDATA=%LOCALENV_DIR%\localappdata
SET APPDATA=%LOCALENV_DIR%\userroaming
SET PYTHON_PATH=%DP0%\python-3.6.8
rem overriding default python env vars in order to interfere with any system python installation
SET PYTHONHOME=
SET PYTHONPATH=
SET PYTHONEXECUTABLE=%PYTHON_PATH%\python.exe
SET PYTHONWEXECUTABLE=%PYTHON_PATH%\pythonw.exe
SET PYTHON_EXECUTABLE=%PYTHON_PATH%\python.exe
SET PYTHONW_EXECUTABLE=%PYTHON_PATH%\pythonw.exe
SET PYTHON_BIN_PATH=%PYTHON_EXECUTABLE%
SET PYTHON_LIB_PATH=%PYTHON_PATH%\Lib\site-packages
SET PATH=%PYTHON_PATH%;%PYTHON_PATH%\Scripts;%DP0%\CMake\Bin;%PATH%
SET DISTUTILS_USE_SDK=1
python_console.bat
anacondaだと各環境ごとにターミナル起動できますが、それと同じようなものです。
cd python-*.*.*のところもダウンロードしたバージョンのフォルダに変更してください。
@echo off
cd /D %~dp0
call setenv.bat
cd python-3.6.8
cmd
pipをインストール
ダウンロード
ダウンロードしたpythonではpipが使えないので、下記リンクから、get-pip.pyをダウンロードします。
get-pip.pyのリンクを右クリックでダウンロードします。

ダウンロードしたら、python-3.*.*のフォルダに入れます。

インストール
先ほど作成した、python_console.batを叩いて、下記を入力して、エンターを押します。
python get-pip.py

python**._pthの編集
python**._pthのファイルの中身を編集します。ファイル名はバージョンによって違います。

修正箇所は、import siteの前についている#を削除します。

ライブラリのインストール
次に、numpyなど必要なライブラリをインストールします。
まず、python_console.batを動かします。
あとは、いつも通り、pip install ***をするだけです。

2021年2月 pipのインストールでSSLError出る方は下記記事参照ください。
>>【python】pip SSLError SSL: WRONG_VERSION_NUMBER対応
サンプルコードを動かしてみる
実際にpythonコードを動かすにも注意点があるので、そこに触れながら、
サンプルコードを動かします。
サンプルコードはpython embeddedと同じ場所にCODEというフォルダを準備して
そこに下記のような感じで、pythonファイルを置きたいと思います。
hogeフォルダとfoo.pyはmain.pyで読み込むためのものです。

main.py
main.pyの中身は下記にしています。
ただの、Hello worldですが、foo.pyもimportしています。
from hoge import foo
if __name__ == "__main__":
print('Hello world')
main.pyの実行
python_cosole.batを起動して、下記を実行します。
python ..\CODE\main.py
そうすると、No module named 'hoge'と怒られます。

sys.pathを確認すると、以下のようになっています。

これを解消したいので、python36._pthを削除します。

もう一度、sys.pathを確認します。これでOKです。

もう一度、main.pyを動すと、ちゃんと動きます。

これで、あとはひたすらコーディングをしていけばOKです。
最後に
pythonコードのフォルダ構成は自由に変えてもらっても良いですし、
配布するときは、batファイルとかでpythonを実行するようにすると便利です。
本業や副業で、pythonの開発を受ける時は、この方法を使うことで、クライアントの環境を汚さず、インストールも不要で、動かしてもらうことが可能です。
この環境で、デスクトップアプリの開発を説明しているので下記も参照ください。