いつも論文や授業コンテンツで使用する図の作成でお世話になっておりますinkscape。 大変お世話になっております。
使用しているFreeBSDなるOSをバージョンアップしたらこのinkscapeの機能拡張部分が動かない。 とくにLogicGateは論理回路の授業コンテンツ作成で頻繁に使っているのでとても困ってしまいます。 この拡張機能を使うと”Can’t Spawn!!! spawn returns: Failed to execute child process” と出力されるだけで全く動作しない。 この拡張機能はpythonというプログラミング言語で記述されており、シェルスクリプトとして動作します。 このスクリプトで使用するモジュールpy27-lxmlやpy27-numpyはインストールされているので問題はこの部分ではない模様。
せっかくinkscapeはオープンソースで開発されているので、該当部分のソースコードを閲覧して原因を調べてみることに。
inkscape-0.92.4/src/extension/implementation/script.cpp
Script::interpreter_t const Script::interpreterTab[] = {
{“perl”, “perl-interpreter”, “perl” },
#ifdef WIN32
{“python”, “python-interpreter”, “pythonw” },
#else
{“python”, “python-interpreter”, “python” },
#endif
{“ruby”, “ruby-interpreter”, “ruby” },
{“shell”, “shell-interpreter”, “sh” },
{ NULL, NULL, NULL }
};
インストールされているインタプリタであるプログラムはpython2.7で、ソースコードにはpythonと記述されているわけですか。 まさかと思って inkscape/extensions の中にある設定ファイル *.inxを見てみるとすべてpythonと書いてある。
<script>
<command reldir=”extensions” interpreter=”python”>ink2canvas.py</command>
</script>
inkscape/extensions の中にある拡張モジュールである *.pyの中はpython2.7になっている。
#!/usr/local/bin/python2.7
ということはプログラムを拡張機能を使用しようとするとインタプリタプログラムであるpythonを起動しようとするが、python2.7はあるものの該当する名前のインタプリタプログラムpythonがOSに無い。 設定ファイルでpythonの代わりにpython2.7を動作させようとしても動かない。 ということで python2.7をpythonにシンボリックリンクすることで対応。
無事動きました。