Programming」カテゴリーアーカイブ

Delphiによるプログラミング関係のTips

Download Embeddable Python and Install the library

「埋め込み用Pythonのダウンロードとライブラリのインストール方法」

1.始めに
2.Embeddable Python をダウンロード
3.必要なライブラリをインストールする準備
4.Numpyのインストール
5.OpenCVのインストール
6.単体で動作確認(検証)
7.まとめ
8.お願いとお断り

1.始めに

なぜ、Embeddable(埋め込み用)なのかというと、内部的なデータ処理にPythonのOpenCV & Numpyライブラリを使うと、アプリケーションをより一層高速化できることがわかったから。
それから、Python環境のアップデートとは関係なく、安定動作する実行環境を、PCの操作にあまり詳しくないユーザーに提供できるから。

重要

このような特殊な目的ではなく、学習用にPythonを導入したい場合は、埋め込み用途に配布されている Embeddable Python はお勧めできません! 普通にインストーラを使用して、普通のPython環境をPCにセットアップしてください。

もし、PC環境を変更せずに、(持ち運びも可能な)Pythonが実行できる環境を作りたい場合は、WinPythonが便利! WinPythonならUSBメモリやSDカードにセットアップして、PC環境に変更を加えずに利用可能。なお、この場合は・・・

スタートボタン → 設定 → アプリ → アプリと機能 → その他の設定 → アプリ実行エイリアス → アプリ インストーラー(項目のいちばん下)のPythonとPython3をオフ

・・・にしてから、外部メディアにセットアップしたWinPythonを実行。

WinPythonのDL先URL:https://winpython.github.io/

WinPythonを外部メディアに入れて利用する場合

2.Embeddable Python をダウンロード

Embeddable Python は https://www.python.org/downloads/windows/ からダウンロード可能。

上記のサイトに行くと、古い2.X.Xから最新版の3.11.0(テスト用)まで、これまでにリリースされた Embeddable Python すべてがある。どれを選んでよいか、困ってしまう(実際、困った)。だから、使用目的(& 条件)に合わせてダウンロードする Embeddable Python を選択しなければならない。

私の場合、まず Stable Release (安定動作版:様々な動作検証がそれなりに行われたバージョンってこと?)であること。さらに、数値演算用のNumpyライブラリと、コンピュータの眼として利用する画像処理用のOpenCVがインストールできること。最低限、この3つを満たしていればOK!だ。

それから、32 or 64bitバージョンのどちらを選択するか、ちょっと迷ったが、よく考えたら(私が)、Delphi11で設定しているVCLのターゲットプラットフォームは32bitアプリケーション。だから32bitバージョンを選択すべきだと気付く。

ターゲットプラットフォームの設定はWindows32ビット(私の場合)

あとは・・・新しいのか、ちょっと前のか、すごく古いのか、どれを選べばいいんだろー??? 2.X.Xはもう既にサポートがないから、3.X.X なのは絶対だけど。。。3.6.X? 3.7.X? 3.8.X? それとも3.9.X? 最新版は3.10.1があるけどー。

うー。うーー。うーーー。(悩む私)

※ 実はマイナーバージョンごとの違いすらまったくわかってない。

たぶん(根拠無し)、最新版でいいだろー☆(←完全な思い込み)

単純極まりない私は、Stable Release のいちばん上にある

「Win7より前のOSには使えません」・・・って注意書きしかないし、この時点での私はNumpyが3.10.1に非対応(2021年12月現在)だということを、誰も教えてくれないから当然知らない(調べろ!)し、なにより、普通の人(?)は、最新版が取り敢えず良さそうに思えちゃうものじゃないですか。

3.10.1のダウンロード&解凍作業完了! 続いてライブラリのインストール。

コマンドプロンプトを開いて・・・。解凍先フォルダへ行って・・・。ラッタッタッタ。

python -m pip install numpy で、ポチ!

ERROR: Could not build wheels for numpy, which is required to install pyproject.toml-based projects

・・・と、表示され、あっけなく阻止される。なんでー

エラーメッセージの内容をよく読んでみると・・・

setup.py:63: RuntimeWarning: NumPy 1.21.5 may not yet support Python 3.10.

確かに。たいへんよくわかりました。はい。

インストールするライブラリが、どのPythonのマイナーバージョンに対応しているか? なんて、対応状況をあらかじめ調査するなんてこと、まずやるわけない私のようなド素人が(無茶を承知で) Python3.10.1 にNumpyライブラリを強制インストールする凶行に及んでも、ちゃんと阻止してくれるんですね。

できればこういう大事なことは、N○Kの朝と晩の7時の全国放送で毎日しつこくアナウンスするとか、誰もがTopページにしているであろう某サイトのいちばん見やすい場所に広告として日々表示してほしい☆・・・と夜空の星に願いつつ、

「使いたいライブラリがどのバージョンに対応しているか、ダウンロード前にきちんと調べる」という貴重な教訓を得て、ここで初めて検索キーワード「numpy python 対応バージョン」でGoogle先生にお伺いをたてると、以下の情報がヒット!

Python向け科学計算パッケージNumPyの開発チームは、最新版となる「NumPy 1.20.0」を1月30日(現地時間)にリリースした。
「NumPy 1.20.0」はこれまでで最大となるアップデートで、Python 3.7~3.9をサポートし、Python 3.6のサポートは終了している。

1月30日とあるのは2021年のこと。この記事は https://codezine.jp/article/detail/13574 より引用

わかった☆OK これでバージョン3.10.1は除外。とりあえず3.9.Xのどれかにしよう。

もうひとつ、どうしても入れたいのがコンピュータの眼「OpenCV」ライブラリ。そこで、PythonとNumpyとOpenCVの関係について調べてみると・・・

opencv-python 4.5.1.48が最新です。
pythonのバージョンは3.6以上とされていますが、numpyについては特に指定はありません。
pipのバージョンは19.3以上

teratailのPythonに関する質問(https://teratail.com/questions/323063)より引用

わかった☆OK これを近所の3歳児でもわかるように言い換えてみよう。

OpenCVとNumpyは仲がイイ。

ダウンロードするPythonのバージョンは、この情報をもとに 3.9.X の中でいちばん新しい 3.9.9 に決定。

理由は次の通り。

Pythonのバージョンを意味する番号は前から順に、メジャー.マイナー.マイクロのそれぞれを意味するそうで、Pythonのメジャーバージョンは2or3。サポート状況から、これは当然「3」を選択。マイナーバージョンは、これもやはりサポート期限を考えるといちばん長いのは3.9.Xで「2025年10月」までだから、これを根拠に「3.9.X」に決定。で、さらにマイクロバージョンは「バグ修正リリース」に相当し、マイクロバージョン間については、互換性が保証されるとのこと。ならば最もバグが消えているのは「3.9.9」なのかなー。みたいな・・・

Pythonのバージョンによる違いについては、次のサイトの解説が詳しい。

Pythonの複数バージョンの扱い方(Windowsの場合)

URL:https://gammasoft.jp/python/python-version-management/

あらためて気合を入れなおし Embeddable Python3.9.9 のダウンロードを持てる全力を挙げて決行!

(正直 ポチ!するだけだけど)

控えめに言えば、Python3.9.9-32bitのEmbeddable Packageを選択してダウンロード。

3.必要なライブラリをインストールする準備

ダウンロードした Package を任意のフォルダに解凍し、ライブラリのインストールに pip が使えるよう、設定を変更( pythonNN._pthファイルを修正 )する。

デスクトップに新しいフォルダーを作成して、そこにDLしたPackageを保存(Zipファイルの大きさはたったの7.3MB!)。

これを解凍すると、

python-3.9.9-embed-win32ができる(大きさは14.0MBとかなり小さい)

python-3.9.9-embed-win32 フォルダを開き、pythonNN._pthファイルを見つけて修正を加える(NNはPythonのバージョンを示す数字)。その方法は下記の通り。

→ バージョン3.9.9をダウンロードしたから、修正するファイルは python39._pth。見つけたらテキストエディタで開いて、いちばん下の行・・・

このナンバーを削除する→ # import site

を、

import site

と コメント解除 する。(※ 正確には、削除するのは#とその後ろの半角スペース)

【補足】
3.9.10では「#import site」となっており、ナンバー#の後ろには「半角スペースがありません」でした!(20220822追記)

コメント解除したら、上書き保存(Ctrl+S)する。

※ 以前、こんな場面で「上書き保存」ではなく「名前を付けて保存」し、あろうことか、ファイル名が「例:XXXXX._pth.txt」になってしまったコトが・・・

次に、ライブラリのインストールに必要な pip を実行するためのScriptファイル get-pip.py を入手する。get-pip.py は次のリンクからダウンロードできる。ちなみにダウンロードした get-pip.py をテキストエディタで開いたら、内容が知らない言語(もしかして、コレが宇宙語?)で書かれており、驚愕。びっくり。もうあけない。

get-pip.py の入手先はこちら(https://bootstrap.pypa.io/get-pip.py

で、ダウンロードした get-pip.py を python-3.9.9-embed-win32 フォルダへコピー。これで get-pip.py が使えるので、次に説明する方法で、まずpipをインストール。

ここからはコマンドプロンプトで作業する(PowerShellでは、モジュールエラーとなり、実行出来ないようだ:情報のみ、未検証です)。

スタートボタンを右クリック→ファイル名を指定して実行→「cmd」と入力して「OK」をクリック→コマンドプロンプトが起動→「cd」+半角スペースを入力→エクスプローラーから「 python-3.9.9-embed-win32 フォルダ」をドラッグ&ドロップしてEnterキーを押す。

で、画面に表示されている > の後ろに「python get-pip.py」と入力してEnterキーを押す(下図赤のアンダーライン部分)。正しく操作が行われていれば、下の画面のようにpipのダウンロードとインストールが自動的に行われる。

pipをインストール(この時点でフォルダ全体の大きさは29.7MB)

Consider adding this directory to PATH(このディレクトリをPATHに追加することを検討してください)と警告されるが、これは気にしない。Embeddable Python を使う目的そのものが、PATHなんかどこにも通さずに

「好き勝手にPythonを使う」

ことだから。

参考:もし、ここで「’python’ は、内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチ ファイルとして認識されていません。」というエラーが出る場合は、コマンドプロンプトの現在位置(カレントディレクトリ)をよく確認すること。Python.exeがある(見える)フォルダじゃないと、>python ~ コマンドは使えない。

pipがきちんとインストールされたことを、ここで確認しておく。

python -m pip list と入力してEnter

問題がなければ、インストールされたpip他のバージョンが表示される。
「python -m pip list」で「python.exe: No module named pip」が返る場合は、 pythonNN._pthファイルの修正(# import siteの前にある記号#(ナンバー)とその後ろの半角スペースを削除して import site だけにするコメント化の解除手続き)が正しく行われていない可能性が高い。
また、複数のライブラリのインストールを行うと、 pythonNN._pthファイル が修正前の状態に戻されてしまうこともあるようだ。要確認。

4.Numpyのインストール

続いて「愛しのNumpy」をインストール。

>python -m pip install numpy と入力してEnter!

「生きていてよかった」と思える至福の一瞬がここに。

警告:Consider adding this directory to PATH (このディレクトリをPATHに追加することを検討してください) は、まったく気にしない。Numpyが入ればいいのだ。わはは*(^_^)*♪

5.OpenCVのインストール

さらに、視力0.01かつ老眼&緑内障の恐れありと診断(2万ン千円も払ったのにイタいことばかり言いやがって:チ○ショー!「我が愛と哀しみの人間ドック2021年の記録」より抜粋)された私の眼に代わるSecret Weapon、目にも止まらぬ 走召 高速!でマークシートを読んでくれる機械の眼という意味がほぼない長い前置きを乗り越え、今、怒涛のクライマックス。「OpenCV」ライブラリがいよいよ My PC へ!

サぁイレント ナァイ~ ホぉリィ ナァイ~(さらに意味なし)

>python -m pip install opencv-python と入力してEnter!

注意:「opencv」に続けて「-python」が必要。

念願のOpenCVのインストールについに成功した・・・その日、彼は狂喜乱舞して泣き崩れたという。彼の日記の末尾には「OpenCVよ。永遠なれー」の文字が。

ちなみに、この時点で「Numpy」と「OpenCV」を入れた「python-3.9.9-embed-win32」フォルダの内容は152MB!と他を圧する勢いで巨大化していた。最初は15MB程度しかなかったのに10倍に膨れ上がっている・・・。

なんということか。すでに語るべき言葉を私は持たない。大きな広い美しい心で、この変化をありのままに・・・、そうだ、謙虚に受け止めよう。さぁ深呼吸だ。おぉ空気がうまい。生きてるってことは素晴らしい。

そう言えば、私が書いたDelphiのプログラムをことごとく「ウイルス扱い」して「隔離」しやがる某有名ウイルス対策ソフトも、今日は静かにしてるじゃないか。人間、すべからく、受容することが肝心だ。別にPCの重さがいつの間にか10倍になって、持ち運び困難になったわけではないのだから。

6.単体で動作確認(検証)

作成したEmbeddable Pythonのフォルダ「python-3.9.9-embed-win32」は名前が長く、ちょっと扱いにくいので、フォルダ名をもう少し短く、わかりやすい名前に変更してから、動作検証を行う。

変更前: python-3.9.9-embed-win32 → 変更後:python39-32

フォルダ名の意味:前から順に「Pythonが入っているフォルダで、そのメジャーバージョンは「3」、マイナーバージョンは「9」で、ターゲットプラットフォームは32ビット版だよ」と、全世界のユーザーにやさしくPR(どこかのサイトでこの表記法を見て感動!)。

【動作検証の準備】

上で作成した「python39-32」フォルダと同じ階層に、新しく「psf」という名前のフォルダを作成する。ここにテスト用のScriptファイルや画像データを保存する。

【説明】psf:「P」ythonの「S」criptが入っている「F」older ・・・ という意味。

データ保存用の psf フォルダを作成

【動作検証用の環境変数設定バッチファイルを作成】

最終的にはDelphiから操作する予定のEmbeddable Pythonだが、ここでは動作検証用のバッチファイルを作成し、これを起動してテスト用のScriptを走らせる。

最初に環境変数をセットするバッチファイルを作成する(バッチファイルの作成に関しては、下記参考リンク先:「Windowsでpythonを使う/配布する時に便利!Python embeddable package使い方」に大変詳しい解説があります。作成した方に心から感謝 m(__)m )。

以下の3行をテキストエディタに入力(コピペ)し、文字コードはUTF-8を指定して「setmyenv.bat」という名前を付けて、上の図の「新しいフォルダー」に保存する。

SET DP0=%~dp0
SET PATH=%DP0%\python39-32;%PATH%
SET PYTHON_PATH=%PYTHON_PATH%;%PYTHON_PATH%\Scripts

1行目で、バッチファイルのあるフォルダをカレントディレクトリに指定
2行目で、PATHにEmbeddable Pythonを入れたフォルダへのパスを設定
3行目で、Python.exeとpip.exeへのパスを設定

【動作検証用のスクリプト実行バッチファイルを作成】

続いてScriptを実行するためのバッチファイルを作成する。 以下の5行をテキストエディタに入力(コピペ)し、文字コードはUTF-8を指定して「python_script.bat」という名前を付けて「新しいフォルダー」に保存する。

@echo off
cd /D %~dp0
call setmyenv.bat
cd psf
cmd

1行目は、コマンドプロンプトの画面表示を抑制して見やすくする
2行目は、 バッチファイルのあるフォルダをカレントディレクトリに指定
3行目は、環境変数設定用バッチファイルを内部的に呼び出して実行
4行目で、画面に表示するディレクトリへ移動
5行目は、コマンドプロンプトを表示する

フォルダとファイル構成

【検証用スクリプトを作成】

Embeddable PythonにインストールしたNumpyとOpenCVをインポートして動作する検証用のScriptを作成する。 以下の内容をテキストエディタに入力(コピペ)し、文字コードはUTF-8を指定して「test.py」という名前を付けて「psf」フォルダーに保存する。

import numpy as np
import cv2

img = cv2.imread("test.jpg")
print(type(img))   # Numpy配列に画像データが読み込まれたことを確認
print(img.shape)   # OpenCVが読んだ画像情報(縦横画素数他)を表示

【検証用画像を用意】

任意のJpeg形式の画像を「test.jpg」という名前で「psf」フォルダーに用意する。画像ファイル名に日本語は使えないことに注意する(OpenCVの読み書きコマンドは日本語に対応していないため、日本語が混じっているとエラーになる)。この問題への対応方法は下記参考リンクをご参照ください。

psf フォルダの内容

【検証】

(1)「python_script.bat」 をダブルクリックしてコマンドプロンプトを起動。

コマンドプロンプトを起動したところ

(2)赤で示した下線部に「python test.py」と入力してEnterキーを押す。

黄色の枠内に結果より正しく動作したことがわかる。
<class ‘numpy.ndarray’>:データ形式はNumpyの配列、
(284, 283, 3)は、縦・横の画素数とチャンネル数を示す。

【参考URL】

Windowsでpythonを使う/配布する時に便利!Python embeddable package使い方

URL:https://hituji-ws.com/code/python/python-emb-usage/

Python OpenCV の cv2.imread 及び cv2.imwrite で日本語を含むファイルパスを取り扱う際の問題への対処について

URL:https://qiita.com/SKYS/items/cbde3775e2143cad7455

WindowsでPython3.7の実行環境を手早く作る方法

URL:https://qiita.com/hirohiro77/items/377dfc0a264acb3db222

7.まとめ

(1)使用目的や使用条件、必要なライブラリのインストール上の制約(どのバージョンのPythonに対応しているか)、何bitのアプリケーションに埋め込むのか等、事前に必要事項を十分調査した上でダウンロードするEmbeddable Pythonのバージョンを決める。

(2)ライブラリのインストールは必ず「Python -m」を付ける。→ 付けないとモジュール参照パスの指定等に問題が発生(構成を壊してしまうとの情報あり:参考リンク「WindowsでPython3.7の実行環境を手早く作る方法」を参照)するようだ。

Python -m pip install (ライブラリ名)

(3)必要なライブラリをインストール後、実際にそれらをimportして動くPython Script をEmbeddable Pythonで動かし、確実に動作することを確認する。Delphiに埋め込んでから余計なトラブルに悩まされないよう、ここで必ず単体で動作することを確かめておく。

8.お願いとお断り

このサイトの内容を利用される場合は、自己責任でお願いします。記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。

【関連記事】

Delphi & Embeddable Python

「なぜ Delphi & Embeddable Python なのか?」

自分ひとりで使うにはPythonはとても便利だ。カプセル化してある高機能なライブラリのおかげで、わずか数行Scriptを書くだけで、とんでもない処理が誰にでも簡単に実現できる。

必要な大抵の処理は、自分で書かなくても、どこかの優秀な方が作ったサンプルが、Web上のあちこちで公開されているから、ほとんどすべてそれで間に合ってしまう。だから、Pythonに関する限り、自分で書くというよりは、誰かが書いたものを探している時間の方が多い・・・というのは、私だけではないだろう。

それらを写経して、切ったり、貼ったりして業務をこなす。便利であること、この上ない。ラクをしたその分だけ、プログラミングする楽しさや喜びが失われたような、そんな気がすることもあるが・・・。

ただ、他人様に使っていただくモノについては、これが当てはまらない。

「マニュアルを読まなければ使えないようなプログラムは、ダメなプログラムだ。」・・・という、もはや信念と化した、狂気に近い思い込みが私にはある。

「マニュアルを読まなくても使えるプログラム」

それを実現するのがGUIなのだが、簡単・高速に、そのインターフェイスを作る機能は残念ながらPythonにはない。tkinterやPyQtを試したこともあったけど、Delphiのようにはいかなかった。直感的な操作という点で、どうしてもPythonで使えるGUI環境作成ツールはどれもこれもDelphiのそれに見劣りする(・・・と私は思う)。

唯一、2018年から開発が始まったというPySimpleGUIだけは、ちょっと違ったが。

さらに、実行形式のexeファイルにする作業もPythonだと困ることが多い。以前、業務で使用するプログラムをPythonで書き、exe化したら何と300MBを超える巨大なexeができちゃった・・・ことがある。ちゃんと動いたけど。必要なライブラリを全部!詰め込んだから、おなかいっぱいになっちゃった・・・んだろう。たぶん。

ところで逆に、Delphiで業務で使用するマークシートリーダーを開発した際、Delphiから利用できるOpenCVライブラリを使ったのだが、100枚読み取るのに4~5分を要した。読み取るA4横のマークシートは1枚が「1行あたりマーク数16個×25行×3列」という仕様(これは必須)なので、1枚あたり判定必要数はなんと1200! で、これが100枚あるとすると合計12万!

PCは、マークされている場所だけ読み取る・・・なんてヒト並みの芸当は絶対にできないから、白紙のマークシートであっても地道に1個1個・・・1枚についてきちんと1200回、白・黒の判定を繰り返す(実際の処理は、スキャナーで読み取ったマークシート画像にゴミ取り用のガウシアンぼかしをかけてから、ある閾値で二値化して、白黒反転させ、1行ずつ元画像から切り出して、さらにその画像を1行あたりのマーク数で細かく均等に分割して、1枚について1200個生成される画像1つ1つについて画素が白の部分の面積を計算し、白面積が最も大きい画像をマークありぃ!と判定している)。

私なら、1枚でやめます。・・・ってか、1行分でも多分無理です。

読み取りに「5分」かかったとすると、5分は300秒。12万個のマークを300秒で読むから、1秒あたりの読み取りマーク数は400個。1枚に3列(1200個)あるから1列1秒、1枚3秒で読んでおり、ヒトがそれをやるのに比べれば、これでも十分に高速なのだが・・・。

ところがPythonで同じ処理を書いてみたら、速いのだ。コレが・・・。

1枚250ms以下で読み取ってしまう。処理の流れはどちらも同じ(どちらも書いたのは私)だから、Python環境での処理速度は、Delphi環境のそれの12倍も速いことになる・・・。100枚を30秒未満で処理できる実力。これをどうにかして生かしたい。

そんな時、Embeddable Python というモノが存在することを、私は知ってしまったのだ。

Python Embeddableとは、超軽量なPythonの実行環境でファイルサイズがとても小さく、Windowsのシステムを汚さずに環境構築ができ、配布するのも簡単という特徴があります。

Webエンジニアの仕事見聞録(https://engineer-milione.com/programming/python-embeddable.html)より引用

Delphiで創ったコレが・・・

拙作Delphi製マークシートリーダー(テスト用サンプルを読み込んだところ)
拙作マークシートリーダーは上記リンク先ページからダウンロードできます。

PythonのOpenCVという視力を得たなら・・・どういうコトになるか?と思うと・・・

年甲斐もなく、ドキドキしてくるじゃありませんか! 皆さん

まとめ

(1)DelphiはGUI環境を簡単・高速に作成できる。

(2)Pythonには強力無比の数値演算ライブラリがある。

(3)DelphiでGUIを作成し、内部的な演算処理はPythonで実行。

(4)それを可能にするのがEmbeddable Python

(5)誰が言ったか知らんけど、

為せば成る!

俺はやるぞ!

お願いとお断り

このサイトの内容を利用される場合は、自己責任でお願いします。ここに記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。

【関連記事】

Setup Old Python4Delphi

「Delphiで古いPythonForDelphiを使う(おすすめしません)」

OpenCVとNumpyをインストールしたembeddable pythonをDelphiから利用できるようにした。これはその覚書その2。タイトルにあるように古いPython4Delphiをセットアップした時の記録。

1.どなたにもおすすめしません(最新版が便利です)
2.旧バージョンのインストール方法
3.まとめ
4.著作権表示の記載方法
5.お願いとお断り

1.どなたにもおすすめしません(最新版が便利です)

今はどこを探しても、この古いPython4Delphiはダウンロードできないが、もし、それが入手できて、使わなければならなくなった時には参考になる(カモ)。

ちなみに、ずっと愛用していた(10年以上前のバージョン?の)Python4Delphiは最新のDelphi11に、ここに記載した方法でほぼ問題なくインストールでき、かつ、期待通りに(VCLコンポーネントとして)動作した。←が、どなたにもおすすめしません。

最新のPython4DelphiをDelphi10.3以降のバージョンにインストールする方法は・・・

2.旧バージョンのインストール方法

以下の内容を利用される場合は、自己責任でお願いします。以下に記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。

まず、困ったことに、ここで取り上げているPython4Delphiのバージョンがいくつなのか、どれくらい前にリリースされたものなのか、いつ、どこから入手したものなのか、いずれもわからない。

気が付いた時には、My PCの中にいた・・・。そんな存在である。

python4delphi-master\PythonForDelphiにあるDeployment.txtには、See document “Deploying P4D.PDF” first.・・・とあるので、これを読むとドキュメントの日付は「5/1/2005」となっている。もしかしたら、それくらい前のものかもしれない。

fmxには非対応のようで、vcl関連のファイルのみで構成されている。Readme.txtで紹介されているファイルとフォルダの構成は以下の通り。

FILES:
Readme.txt This file.
Python.txt Infos about Python, and further references.
Changes.txt List of all changes since the first release.
Tutorial.txt A simple tutorial to use the PythonEngine
To do.txt A to do list.
Deploying P4D.pdf Notes on the Deployment of your applications using Python for Delphi.
C++ Builder Notes.txt Notes on using C++Builder with the Python for Delphi components.
PythonAtom.hlp A help file explaining the use of TPythonAtom
Demos A folder containing several demos of Python for Delphi.
Components\Python.* The “Python for Delphi” packages.
Components\Sources\Core The source folder of the core “Python for Delphi”.
Lib Library of Python modules.
PythonIDE A Python developpment environment written in Delphi.
See PythonIDE\Readme.txt for the required components.
Modules Contains the Delphi\Delphi.dpr project that creates the Modules\Delphi.pyd Python module
that allows you to interact with Delphi VCL objects from Python.

同じく Readme.txt にあるインストール方法は、次の通り。この手順でDelphi10.4にインストール。

INSTALLATION:
install the Python for Windows distribution (http://www.python.org/).

1) Install the core components
For recent versions of Delphi, install the “Python_d” package located in the
Components folder and add the folder “…\Components\Sources\Core” to the library path.

1) コアコンポーネントのインストール

Components フォルダにある “Python_d” パッケージをインストールし、ライブラリパスに “…\Components\Sources\Core” フォルダを追加してください。

注意:異なるバージョンのDelphiがインストールされている環境では、Python_D.dpkをダブルクリックすると拡張子dpkに関連付けされたバージョンのDelphiが起動してしまう(あたりまえ)。このような場合は、P4D環境をインストールしたいDelphiを起動し、ファイルメニューの「開く」からPython_D.dpkを指定してパッケージをインストールする。

また、「開く」のは「Python_D.dpk」で、「Python_D.dproj」ではないことにも注意する。で、「Python_D.dpk」を開いたら・・・

プロジェクトマネージャーに表示されたPython_D.bplを右クリックして、表示されたサブメニューの「インストール」をクリック。

【Delphi10.4の場合】

この方法でエラーなくインストールできた。(・・・気がするだけかもしれない)

【Delphi11の場合】

次のエラーが発生!

[dcc32 エラー] PythonEngine.pas(63): E2029 ‘INTERFACE’ が必要な場所に 識別子 ‘Error’ があります。

エラーが起きている場所を確認すると・・・

unit PythonEngine;

{ TODO -oMMM : implement tp_as_buffer slot }
{ TODO -oMMM : implement Attribute descriptor and subclassing stuff }

{$IFNDEF FPC}
{$IFNDEF DELPHI2010_OR_HIGHER}
  Error! Delphi 2010 or higher is required! ←ここでエラーが発生!
{$ENDIF}
{$ENDIF}

とりあえず、この1行をコメント化して再実行。

{$IFNDEF FPC}
{$IFNDEF DELPHI2010_OR_HIGHER}
  //Error! Delphi 2010 or higher is required!
{$ENDIF}
{$ENDIF}

エラーは発生せず。表示されたメッセージを読み、インストールの成功を確認。

もう一度Python_D.bplを右クリックして、表示されたサブメニューの「上書き保存」をクリック。これでパッケージのインストールは完了。

「ライブラリパスに “…\Components\Sources\Core” フォルダを追加・・・」とあるが、パスを追加しなくてもプログラムの動作に必要な.pasファイルをプロジェクトファイルのあるフォルダにコピーすれば動くから、ここでは「追加しない」ことを選択。

重要 特別な理由のない限り、最新版のPython4Delphiを選択することをお勧めします。
(最新版のP4Dパッケージを登録する場合は、ライブラリパスをきちんと設定しましょう)

2) Install the VCL components (this is optional)

For recent versions of Delphi, install the “PythonVCL_d” package located in the Components folder and add the folder “…\Components\Sources\Core” to the library path.

2) this is optional ・・・とあるので、オプションならやらなくてもいいか!ということで実行しない。

3) Build Modules\Delphi\Delphi.dpr (This is optional and unsupported)

Once the project is build you can either extend the Python path with ..\Modules or copy ..Modules\Delphi.pyd to C:\Python24\DLLs, to be able to import the Delphi module from Python.

Note that you can try this module by invoking the ..\Modules\TestApp.py script.

3) This is optional and unsupported ・・・とあり、オプションである上にサポートなしとあるので、これも実行しない。

3.まとめ

(1) Readme.txt の INSTALLATION の手順1)のみ実行すればOKだった。

(2)DelphiのXXX.dprojファイルのあるフォルダへコピーするPython関係のファイルは以下の通り。他のプロジェクトでも利用する場合は、ライブラリパスへ登録した方が使いやすくなるが、このP4Dは最新版ではないので、このようにして利用した(←過去形であることに注意)。

動作に必要なファイル

4. 著作権表示の記載例

参考:Python4DelphiのLicenseについて

GitHubのPython4Delphiのダウンロードページには「The project is licensed under the MIT License.」とある。これは「改変・再配布・商用利用・有料販売すべてが自由かつ無料」であること、及び使用するにあたっての必須条件はPython4Delphiの「著作権を表示すること」と「MITライセンスの全文」or 「 MITライセンス全文へのLink」をソフトウェアに記載する、もしくは、別ファイルとして同梱しなさい・・・ということを意味する。

したがってPython4Delphiを利用したプログラムの配布にあたっては、ソフトウェアの中で、次のような著作権表示を行うか、もしくは P4DフォルダのルートにあるLicenseフォルダをプログラムに同梱して配布すればよいことになる。

Python4Delphiを利用した場合の著作権表示の記載例:

Copyright (c) 2018 Dietmar Budelsky, Morgan Martinet, Kiriakos Vlahos
Released under the MIT license
https://opensource.org/licenses/mit-license.php

5.お願いとお断り

このサイトの内容を利用される場合は、自己責任でお願いします。ここに記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。

【関連記事】

Setup Python4Delphi

「DelphiからPythonを使えるようにする」

追々記(20231208)

さらにカンタンな方法がありました!

以下、上記の方法にたどり着くまでの、長い長い歩みの記録です。

追記(20231126)

RAD Studio 12.0(Delphi 12.0 Athens)のリリースに合わせ、Python4Delphi も更新されました。
RAD Studio 12.0(Delphi 12.0 Athens)へのインストールに対応した Python4Delphi (20231109版)のインストール記事は、以下のリンク先にあります。

RAD Studio 12.0(Delphi 12.0 Athens)に Python4Delphi をインストールされる場合は、こちらをご参照ください。

以下、2021年12月31日に掲載した記事です(内容は当時のままです)。

OpenCVとNumpyをインストールしたembeddable pythonをDelphiから利用できるようにした。これはその覚書。

1.Python4Delphiのダウンロード
2.P4DパッケージをDelphiにインストール
3.ライブラリパスの設定
4.P4Dの著作権表示の記載例
5.お願いとお断り

1.Python4Delphiのダウンロード

まず最初に、Python for Delphi(P4D)をGitHubから入手してDelphiにインストール。

P4Dの入手先URL https://github.com/pyscripter/python4delphi

Git Bashがない場合は、Codeをクリックすると表示されるサブメニューのいちばん下にDownLoad ZIPがあるので、これをクリックしてZIPファイルをダウンロードし、任意の場所(フォルダ)に解凍する(ここではダウンロードするフォルダの名前を「P4D」として説明)。

Download ZIPをクリック

Git Bashがある場合は・・・

Codeをクリック → 表示されるサブメニューからURLをコピー

で、Git Bashがあれば開く。

Git Bashは公式サイト https://gitforwindows.org/ から入手可能。

Git Bashでは、ls(エルエス)コマンドで今いる場所が表示され、cdコマンドでディレクトリの移動ができる。今、いる場所の直下のフォルダに移動するのであれば、Git Bashの画面に直接「cd フォルダ名」と入力してEnterキーを押す。

今、いる場所の直下に新しくフォルダを作成する場合は「mkdir フォルダ名」と入力してEnterキーを押す。

1階層上に移動したい場合は、「cd ../」と入力してEnterキーを押す。

階層の深いフォルダへ移動したい場合は、「cd」+半角スペースを入力後、そのフォルダをGit Bashの画面上へドラッグ&ドロップすればOK!

ここでは、Git Hubのリポジトリをクローンする「中が空の任意のフォルダ」を選ぶ(上の図ではあらかじめ作成しておいたP4Dフォルダを選んでいる)。

フォルダの内容が空であれば、フォルダの名前は何でもOKだが、後のPython4Delphiのインストール時に、「インストール元フォルダとして選択するフォルダとなる」ことに十分注意(フォルダ名を忘れないように)する(ここではフォルダ名を「P4D」としている)。

Git cloneと入力し、半角スペースを入れ、画面を右クリックして表示されるサブメニューのPasteをクリック。Enterキーを押すとダウンロードが始まる。

Enterキーを押してダウンロード開始。
ダウンロード終了時の画面

※ Git Bashがない場合は、Codeをクリックすると表示されるサブメニューのいちばん下にDownLoad ZIPがあるので、これをクリックしてZIPファイルをダウンロードし、任意の場所(フォルダ)に解凍する。(再掲)

2.P4DパッケージをDelphiにインストール

ここで超重要ポイントがひとつ

ダウンロードが無事完了すると、P4Dフォルダの中には「python4delphi」フォルダが出来ている。

(ZIPファイルを解凍した場合は「python4delphi-master」フォルダが出来る)

このフォルダの名前を手動で「P4D」に変更(リネーム)する。

「P4D」フォルダの中(1階層下)に「P4D」フォルダがあることになるが、これでOK! 理由は以下の通り。

C:\XXX\P4D\P4D\Install\Readme.mdには、以下の記述が・・・

P4D Installation using MultiInstaller

Use for Delphi Seattle (10.4) or later to install all packages in one step.

  1. Clone or copy the Python4Delphi git repository to a folder of your choice. The setup.ini file assumes that the folder is called “P4D”. If you chose to name your folder differently then modify the “Folder” option in setup.ini.
  2. Close all Delphi IDEs running.
  3. Run MultiInstaller.exe
  4. Select the packages you want and press Next
  5. In the dialog box specify the parent folder of “P4D” (i.e. the folder containing the directory to which you have copied Python4Delphi) and the Delphi target version. Then press Next to install the components

Google先生曰く・・・

MultiInstallerを使用したP4Dインストール

Delphi Seattle(10.4)以降で使用して、すべてのパッケージを1つのステップでインストールします。

  1. Python4Delphigitリポジトリのクローンを作成するか選択したフォルダーにコピーします。 setup.iniファイルは、フォルダが「P4D」と呼ばれることを前提としています。フォルダに別の名前を付けることを選択した場合は、setup.iniの[フォルダ]オプションを変更します。
  2. 実行中のすべてのDelphiIDEを閉じます。
  3. MultiInstaller.exeを実行します。
  4. 必要なパッケージを選択して、[次へ]を押します。
  5. ダイアログボックスで、「P4D」の親フォルダ(つまり、Python4Delphiをコピーしたディレクトリを含むフォルダ)とDelphiのターゲットバージョンを指定します。次に、[次へ]を押してコンポーネントをインストールします。

Python4Delphiをコピーしたディレクトリを「P4D」にリネームして、さらに、インストール時に表示されるダイアログボックスでは・・・

「その親フォルダを指定せよ」

と言っている・・・。

C:\XXX\P4D\P4D\Installにある「MultiInstaller.exe」を起動
デフォルトですべてにチェックが入っている。そのままNextをクリック。
親の方のP4Dフォルダを選択し、OKをクリック
Compile packages and install on IDE にチェック(My環境ではDelphi11しかないので、チェックを入れると自動的にRAD Studio 11 Alexandriaのオプションが選択された)。

複数バージョンのDelphiがインストールされている環境であれば、インストールしたいバージョンを選択することになるはず。

Nextをクリックして続行。無事終了すれば下のような画面が表示される。

Delphi11にも無事インストールできた(あらかじめInstallフォルダ内にあったSetup.iniを確認したところ、Pathの設定に10.4+とあるから大丈夫と思ったが)。Finishをクリックしてインストール終了。

DelphiのIDEを起動して確認。

パレットに7匹のヘビを無事発見。

3.ライブラリパスの設定(確認)

追加したP4Dのパッケージを使用する場合、パッケージをインストールした後で、
「ツール」→「オプション」→「言語」→「Delphiオプション」→「ライブラリ」の順にクリックして下の画面を表示する(Delphi11の場合)。

「ツール」→「オプション」で上の画面が表示されるので、左ペインでさらに「言語」→「Delphi」→「ライブラリ」と進み、次に右ペインのライブラリパス(B)の赤枠囲みの…をクリックする。

表示される画面で、ライブラリのSourceファイルがあるフォルダのパスを登録する。ライブラリのパスの設定はターゲットにするそれらのプラットフォームごとに設定する必要がある。上の画面では 「Windows 32ビット」 のプラットフォームに対して設定している。 必要であれば、「Windows 64ビット」 のプラットフォームに対しても設定する。

ライブラリのSourceファイルは、PCを変更した場合でも容易に参照できるよう、
絶対に忘れない場所に置くようにしている。
また、上の例では最新版のP4DのSourceが階層構造を持っているため、共通利用するものとそうでないもの(vcl/fmx)を、それぞれ分けて登録している。

コンパイルを実行すると、Delphiはいちばん最初にプロジェクトファイル(.dproj)のあるフォルダ(ここはパスが通っているから登録は不要)を検索し、必要なユニットファイル等の有無を確認。もし、そこに必要なファイルがなければ、この画面に登録したライブラリパスを検索するようだ。

まとめ

(1)Python4Delphiをダウンロードするフォルダの名称は任意だが、そこに作られるフォルダ「 python4delphi 」は「P4D」にリネームする。

(2)MultiInstaller.exeを実行してインストール先フォルダを指定する際には、上でリネームした「P4D」フォルダの1階層上のフォルダを指定する。

(3)パッケージのインストール後、コンパイル時に必要なSourceファイルのある場所をライブラリパスに登録する。

4.P4Dの 著作権表示の記載例

参考:Python4DelphiのLicenseについて

GitHubのPython4Delphiのダウンロードページには「The project is licensed under the MIT License.」とある。これは「改変・再配布・商用利用・有料販売すべてが自由かつ無料」であること、及び使用するにあたっての必須条件はPython4Delphiの「著作権を表示すること」と「MITライセンスの全文」or 「 MITライセンス全文へのLink」をソフトウェアに記載する、もしくは、別ファイルとして同梱しなさい・・・ということを意味する。

したがってPython4Delphiを利用したプログラムの配布にあたっては、ソフトウェアの中で、次のような著作権表示を行うか、もしくは P4DフォルダのルートにあるLicenseファイルをプログラムに同梱して配布すればよいことになる。

Python4Delphiを利用した場合の著作権表示の記載例:

Copyright (c) 2018 Dietmar Budelsky, Morgan Martinet, Kiriakos Vlahos
Released under the MIT license
https://opensource.org/licenses/mit-license.php

5.お願いとお断り

このサイトの内容を利用される場合は、自己責任でお願いします。ここに記載した内容を利用した結果、利用者および第三者に損害が発生したとしても、このサイトの管理者は一切責任を負えません。予め、ご了承ください。

【関連記事】