mieki256's diary



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\ に置いてあるので…。
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 特有の不具合っぽい。 :

あちこちのファイルを眺めているうちに、なんとなく分かってきた。以下が犯人ではあるまいか。
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 には、以下のバグがある。
  • 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なんて使うんだ」と言われそうな予感も。

以上です。

過去ログ表示

Prev - 2018/08 - Next
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31

カテゴリで表示

検索機能は Namazu for hns で提供されています。(詳細指定/ヘルプ


注意: 現在使用の日記自動生成システムは Version 2.19.6 です。
公開されている日記自動生成システムは Version 2.19.5 です。

Powered by hns-2.19.6, HyperNikkiSystem Project