python4delphiの配布時のファイルとPYTHONPATH

Python自体をインストールせずに動かそうとしてはまったのでメモ。Python2.6.5(Windows x86)の場合。

msvcr90.dllとmanifest

python26.dllでVC++のランタイムが必要なので用意する。
exeファイルと同じディレクトリにファイルを置く場合、 Microsoft.VC90.CRT という名前のディレクトリを作成。
msvcr90.dllをディレクトリにコピー(python2.6.5の場合は、9.0.21022.8でした)
Microsoft.VC90.CRT.manifestをディレクトリに作成。

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
    <noInheritable/>
    <assemblyIdentity
        type="win32"
        name="Microsoft.VC90.CRT"
        version="9.0.21022.8"
        processorArchitecture="x86"
        publicKeyToken="1fc8b3b9a1e18e3b"
    />
    <file name="msvcr90.dll" />
</assembly>

ライブラリをzipで固める(pydは除外)

そのままでもいいが、ファイル数が多くなるため、 .py ファイルはzipで固める。
ファイル名はlibrary.zipとした。
pydファイルはzipimportできないみたいなので、別途modulesディレクトリに配置した。
この場合、Delphi側でPythonEngineを初期化する前にPYTHONPATHにlibrary.zipとmodulesをパスに追加しておく必要がある。

var
  Path: string;

begin
  Application.Initialize;
  // PYTHONPATHにライブラリのディレクトリを追加
  SetEnvironmentVariable('PYTHONPATH',
      PChar(ExtractFilePath(Application.ExeName) + 'modules;'
      + ExtractFilePath(Application.ExeName) + 'library.zip'));
  Application.MainFormOnTaskbar := True;
  Application.CreateForm(TfrmMain, frmMain);

追記

初期化後にsys.pathにzipのパスを追加するのでも大丈夫でした。