Combine

python ファイルの合体スクリプトはわざわざ目印を用意する必要無いと気が付いた。
class から始まっている行から最後までを読み込みすればいい。
一部書き換えが必要だったけど下記に落ち着いた。

#!/usr/bin/env python3

import os

HEAD = '''#!/usr/bin/env python3

import objc, os, shutil, zipfile, re, subprocess
from AppKit import *
from Quartz.CoreGraphics import *

PICEXT = '\.(jpe?g|png|gif)$'
'''
FOOT = 'main()\n'

lines = [HEAD]
begin = False

for filename in [s for s in os.listdir() if s.startswith('comipoli_')]:
    with open(filename) as f:
        lines.append('# {}\n'.format(filename))
        for l in f.read().split('\n'):
            if begin:
                lines.append(l)
            elif l.startswith('class'):
                begin = True
                lines.append(l)
    begin = False

lines.append(FOOT)

with open('Comipoli.py', 'w') as f:
    f.write('\n'.join(lines))

こうなった。

後は pip3 で py2app を導入、py2applet はセットで付いてくる。

pip3 install -U py2app

ビルドスクリプトの作成。
前回のコードで icns を作る。
上記コードでソースファイルを一つに合体。
後は py2applet にこう渡すだけでアイコン付きの app を作ってくれる。
最後に片付け。

#!/bin/sh

# icns
python3 make_icns.py
iconutil -c icns comipoli.iconset

# combine
python3 make_combine.py

# build
py2applet --no-strip Comipoli.py comipoli.icns

# clean
rm -r comipoli.iconset
rm comipoli.icns
rm Comipoli.py

ただ
–no-strip オプションを付けているのは

Xcode インストール無しだとこんなダイアログが出るから。
気にせず [今はしない] を選んでも app は作れるけどね。

unrar はフルパス指定にしたらあっさり動いた。
そんなこんなでとっととサイト公開することに。

macOS アプリケーション – L’Isola di Niente

何か忘れている気がするけどまあいいや。