2018/08/11(土) [n年前の日記]
#1 [gimp] GIMP 2.10.4 Portable の pygimp.interp がおかしい
Windows10 x64 上に、GIMP 2.10.4 Portable をインストールしたけれど、Python-Fu を動かすための設定ファイル、pygimp.interp の内容が、どうもおかしいことに気づいたり。
◎ 症状。 :
例えば…。自分の場合、GIMP 2.10.4 Portable を C:\Prog\GIMP-2.10.4-Portable\ に置いてあるので…。
GIMP 2.10.4 Portable を、動作状況を表示するメッセージ付きで起動してみる。
ログメッセージの中に、以下が表示されてしまう。pygimp.interp 内の記述が、何か間違っているらしい。
更に、GIMP が起動すると、pygimp.interp が、以下のように勝手に書き戻されてしまう。
App\gimp\Python\ フォルダは、GIMP 2.8 Portable の頃はあったけど、GIMP 2.10 Portable では無くなっている。一体誰が、存在しないパスに書き戻してしまっているのか…。
C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\interpreters\内にある pygimp.interp を、以下のように書き換えてみた。
python=C:\Prog\GIMP-2.10.4-Portable\App\gimp\bin\pythonw.exe python2=C:\Prog\GIMP-2.10.4-Portable\App\gimp\bin\pythonw.exe /usr/bin/python=C:\Prog\GIMP-2.10.4-Portable\App\gimp\bin\pythonw.exe :Python:E::py::\Prog\GIMP-2.10.4-Portable\App\gimp\bin\pythonw.exe:
GIMP 2.10.4 Portable を、動作状況を表示するメッセージ付きで起動してみる。
GIMPPortable.exe --verbose --console-messages
ログメッセージの中に、以下が表示されてしまう。pygimp.interp 内の記述が、何か間違っているらしい。
INIT: gimp_initialize INIT: gimp_real_initialize Parsing 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\interpreters\default.interp' Parsing 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\interpreters\pygimp.interp' GIMP-警告: インタープリターファイル 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\interpreters\pygimp.interp' 内で参照しているインタープリター '(NULL)' は無効です。 GIMP-警告: インタープリターファイル 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\interpreters\pygimp.interp' 内で参照しているインタープリター '(NULL)' は無効です。 Parsing 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\environ\default.env' Parsing 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\environ\pygimp.env' INIT: gui_initialize_after_callback INIT: gimp_restore Parsing 'C:\Prog\GIMP-2.10.4-Portable\Data\.gimp\parasiterc'
更に、GIMP が起動すると、pygimp.interp が、以下のように勝手に書き戻されてしまう。
python=C:\Prog\GIMP-2.10.4-Portable\App\gimp\Python\pythonw.exe python2=C:\Prog\GIMP-2.10.4-Portable\App\gimp\bin\pythonw.exe /usr/bin/python=C:\Prog\GIMP-2.10.4-Portable\App\gimp\Python\pythonw.exe :Python:E::py::python:
App\gimp\Python\ フォルダは、GIMP 2.8 Portable の頃はあったけど、GIMP 2.10 Portable では無くなっている。一体誰が、存在しないパスに書き戻してしまっているのか…。
◎ GIMP Portable 特有の不具合っぽい。 :
あちこちのファイルを眺めているうちに、なんとなく分かってきた。以下が犯人ではあるまいか。
GIMPPortable.ini 内の、以下の指定で、pygimp.interp を書き換えているように見える。
おそらく、GIMP Portable の起動時に、指定内容に基づいて、毎回 pygimp.interp を書き換えているのではないか…。しかし、ここに書かれているパスが、そもそも間違っていて、GIMP 2.8 時代のパスになっている。
試しに、GIMPPortable.ini を、GIMP 2.10向けに修正してみたところ、次回起動時、pygimp.interp も修正後の内容で書き換えられた。やはり、この指定が、pygimp.interp を妙な内容に書き換えてしまう犯人だった模様。
しかし、起動ログを見ると、相変わらず警告が出ている…。
pygimp.interp を眺めていたら、改行コードについて、CRLF と LF が混在している点がが気になった。もしかして、GIMP は *NIX文化圏のアプリだから、LFの改行コードしか受け付けない可能性はないか…。
GIMPPortable.ini を書き換えて、pygimp.interp の書き換え設定部分をコメントアウトしてみた。.iniファイルは、行頭に「;」をつけるとコメントアウトできるらしい。これで、pygimp.interp を書き換えない状態になるはず。
かつ、pygimp.interp を、LF のみにして保存してみた。
この状態で GIMP を起動すると、起動時のログの中で、警告が出てこなくなった。
C:\Prog\GIMP-2.10.4-Portable\App\AppInfo\Launcher\GIMPPortable.ini
GIMPPortable.ini 内の、以下の指定で、pygimp.interp を書き換えているように見える。
[FileWrite15] Type=ConfigWrite File=%PAL:AppDir%\gimp\lib\gimp\2.0\interpreters\pygimp.interp Entry=python= Value=%PAL:AppDir%\gimp\bin\pythonw.exe [FileWrite16] Type=ConfigWrite File=%PAL:AppDir%\gimp\lib\gimp\2.0\interpreters\pygimp.interp Entry=/usr/bin/python= Value=%PAL:AppDir%\gimp\bin\pythonw.exe [FileWrite17] Type=ConfigWrite File=%PAL:AppDir%\gimp\lib\gimp\2.0\interpreters\pygimp.interp Entry=:Python:E::py: Value=:pythonw.exe:
おそらく、GIMP Portable の起動時に、指定内容に基づいて、毎回 pygimp.interp を書き換えているのではないか…。しかし、ここに書かれているパスが、そもそも間違っていて、GIMP 2.8 時代のパスになっている。
試しに、GIMPPortable.ini を、GIMP 2.10向けに修正してみたところ、次回起動時、pygimp.interp も修正後の内容で書き換えられた。やはり、この指定が、pygimp.interp を妙な内容に書き換えてしまう犯人だった模様。
しかし、起動ログを見ると、相変わらず警告が出ている…。
pygimp.interp を眺めていたら、改行コードについて、CRLF と LF が混在している点がが気になった。もしかして、GIMP は *NIX文化圏のアプリだから、LFの改行コードしか受け付けない可能性はないか…。
GIMPPortable.ini を書き換えて、pygimp.interp の書き換え設定部分をコメントアウトしてみた。.iniファイルは、行頭に「;」をつけるとコメントアウトできるらしい。これで、pygimp.interp を書き換えない状態になるはず。
; [FileWrite15] ; Type=ConfigWrite ; File=%PAL:AppDir%\gimp\lib\gimp\2.0\interpreters\pygimp.interp ; Entry=python= ; Value=%PAL:AppDir%\gimp\bin\pythonw.exe ; ; [FileWrite16] ; Type=ConfigWrite ; File=%PAL:AppDir%\gimp\lib\gimp\2.0\interpreters\pygimp.interp ; Entry=/usr/bin/python= ; Value=%PAL:AppDir%\gimp\bin\pythonw.exe ; ; [FileWrite17] ; Type=ConfigWrite ; File=%PAL:AppDir%\gimp\lib\gimp\2.0\interpreters\pygimp.interp ; Entry=:Python:E::py: ; Value=:pythonw.exe:
かつ、pygimp.interp を、LF のみにして保存してみた。
この状態で GIMP を起動すると、起動時のログの中で、警告が出てこなくなった。
INIT: gimp_initialize INIT: gimp_real_initialize Parsing 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\interpreters\default.interp' Parsing 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\interpreters\pygimp.interp' Parsing 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\environ\default.env' Parsing 'C:\Prog\GIMP-2.10.4-Portable\App\gimp\lib\gimp\2.0\environ\pygimp.env' INIT: gui_initialize_after_callback INIT: gimp_restore Parsing 'C:\Prog\GIMP-2.10.4-Portable\Data\.gimp\parasiterc'
◎ 結論。 :
つまり、GIMP 2.10.4 Portable には、以下のバグがある。
よって、解決策としては…。
自分の環境では、pygimp.interp を以下のようにした。
ちなみに、一番最後の行で pythonw.exe を指定することで、Python-Fuスクリプトを実行した際にDOS窓が開かない状態になる模様。
本来なら、最後の行に、
今回、「python=〜」を、GIMP が読み取れない、もしくは読み取っても、指定されたパスに目的のファイルが存在しないので、.py が呼ばれると、とにかく 「python」を呼び出した ―― python.exe を呼んでしまって、DOS窓が開いていたのだろう…。
- GIMPPortable.ini 内の指定により、GIMP 2.8用の間違った pythonw.exe のパスで pygimp.interp が書き換えられてしまう。
- 改行コードを LF にしないといけない設定ファイルに対して、CRLF を使って書き換えてしまって、GIMP が警告を出す。
よって、解決策としては…。
- (GIMP 2.10.4 Portableインストールフォルダ)\App\AppInfo\Launcher\GIMPPortable.ini の、pygimp.interp 書き換え指定部分をコメントアウト(行頭に「;」を挿入)して、pygimp.interp を書き換えないようにする。
- かつ、(GIMP 2.10.4 Portableインストールフォルダ)\App\gimp\lib\gimp\2.0\interpreters\pygimp.interp の、pythonw.exe までのパスを正しいものにする。
- かつ、pygimp.interp は、改行コードを LF で統一して保存する。
自分の環境では、pygimp.interp を以下のようにした。
python=C:\Prog\GIMP-2.10.4-Portable\App\gimp\bin\pythonw.exe python2=C:\Prog\GIMP-2.10.4-Portable\App\gimp\bin\pythonw.exe /usr/bin/python=C:\Prog\GIMP-2.10.4-Portable\App\gimp\bin\pythonw.exe :Python:E::py::pythonw.exe:
ちなみに、一番最後の行で pythonw.exe を指定することで、Python-Fuスクリプトを実行した際にDOS窓が開かない状態になる模様。
本来なら、最後の行に、
:Python:E::py::python:と書いてあることで、上のほうで指定されてる「python=〜」が使われて、結局は pythonw.exe が呼び出され、DOS窓が開かない状態になるのではないかと思うのだけど…。
今回、「python=〜」を、GIMP が読み取れない、もしくは読み取っても、指定されたパスに目的のファイルが存在しないので、.py が呼ばれると、とにかく 「python」を呼び出した ―― python.exe を呼んでしまって、DOS窓が開いていたのだろう…。
◎ 問題。 :
これは GIMP Portable に限った話ではなく、PortableApps で公開されてるアプリ全般に言えるのかもしれないけれど。もしかして、設定ファイルを書き換える処理部分に、改行コードを LF にするか、CRLF にするか、指定・反映する機能も必要だったりするのではないかしらん。まあ、*NIX文化圏のアプリに対してのみ、必要になる機能だろうけど。
GIMP側で CR を読み飛ばす処理を入れる手もあるだろうけど。GIMP開発側 = *NIX文化圏からは、「LFで統一しろや」「なんでCRLFなんて使うんだ」と言われそうな予感も。
GIMP側で CR を読み飛ばす処理を入れる手もあるだろうけど。GIMP開発側 = *NIX文化圏からは、「LFで統一しろや」「なんでCRLFなんて使うんだ」と言われそうな予感も。
[ ツッコむ ]
以上です。