読者です 読者をやめる 読者になる 読者になる

macOS に Uniconvertor (ver 1.x) をインストールする

何の因果かわかりませんが、微妙な時期に絶妙にマイナーなユーティリティのインストールについてのエントリを書いております。

どうやらInkscapeのエクステンションの中にこいつを要求するものがあるらしい。そして以前のmacOS向けパッケージにはバンドルされていたそうで。

そしてmacOS向けのバイナリは配布されていなし、MacPortsにもない…。


[2017/02/16 追記]

InkscapeソースコードMacPorts用のPortfileが含まれているのでそれを使う方が楽でした。
なんとも微妙な気分です。

ソースファイルを展開したディレクトリの、下記のファイルを適当なディレクトリにコピーし、あとはMacPorts側の設定を変更してやればいけるはず。

packaging/macosx/ports/python/py-uniconvertor/Portfile

[追記ここまで]

手順は基本的に以下のサイトを参考にする。

How to install Uniconvertor (command-line app) on Mac OS 10.7.2 (Lion)? - Super User

というかほとんどそのままです。

準備

まず必要なファイルを入手してくる。

UniConvertor Download Page

  • uniconvertor-1.1.5.tar.gz
  • uniconvw-1.1.5.tar.gz
  • sk1libs-0.9.1.tar.gz

依存パッケージをインストール。freetype2 など色々と必要なようだがInkscapeビルドするための依存パッケージをインストールすればほとんど揃っているはずなので省略。

Inkscapeが要求するのはlcms2だけどUniconvertorが要求するのはlcms

$ sudo port install  lcms

MacPortsPython

面倒なことに、OS標準のPython 2.7と、MacPortsPython 2.7の両方が存在している。他のライブラリとの兼ね合いからすると、MacPorts側でないと不都合がある。

そのため、明示的にMacPorts側のPythonを呼び出す。

MacでPython環境を作る時に気をつける事 - Qiita

上記のページを参考に、それぞれインクルードパスとインストール先を確認する。

OS標準のPython の場合

$ which python
/usr/bin/python

インクルードパス:

$ /usr/bin/python -c "import site; print(site.getsitepackages())"
['/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python', '/Library/Python/2.7/site-packages']

モジュールのインストール先:

$ /usr/bin/python -c "import distutils.sysconfig as s; print(s.get_python_lib())"
/Library/Python/2.7/site-packages

MacPortsPython 2.7)の場合

$ which python2.7
/opt/local/bin/python2.7

インクルードパス:

$ /opt/local/bin/python2.7 -c "import site; print(site.getsitepackages())"
['/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages', '/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/site-python']

モジュールのインストール先:

$ /opt/local/bin/python2.7 -c "import distutils.sysconfig as s; print(s.get_python_lib())"
/opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages

ビルドとインストール

Pythonのライブラリによくあるsetup.pyによるインストール

アンインストール用のタスクのようなものは存在しないみたいなので、削除する場合は手作業。

sk1libs

いつも通りソースを展開。

$ tar zxf sk1libs-0.9.1.tar.gz
$ cd sk1libs-0.9.1

python2.7の部分は環境に応じて変更する必要があります。少なくともMacPortsを利用して必要なライブラリをインストールしている場合はOS標準の方ではなく、MacPortsでインストールしたPython 2系を指定。

$ LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include -I/opt/local/include/freetype2" python2.7 setup.py build

問題がなければインストール

$ sudo python2.7 setup.py install

MacPortsのPython2.7のインクルードパスにインストールするのが目的であるので、最後に以下のように出力されていればOK。

Writing /opt/local/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/sk1libs-0.9.1-py2.7.egg-info

Uniconvertor

同じ要領で。

$ tar zxf uniconvertor-1.1.5.tar.gz
$ cd uniconvertor-1.1.5
$ LDFLAGS="-L/opt/local/lib" CFLAGS="-I/opt/local/include -I/opt/local/include/freetype2" python2.7 setup.py build

ビルドに成功したらインストール

$ sudo python2.7 setup.py install

動作の検証

実行時にpython-imaging、python-reportlabを要求するので対応するパッケージか代替品をインストールする。

$ sudo port install py27-Pillow
$ sudo port install py27-reportlab

インストール先のディレクトリがパスに追加されていないので絶対パスで指定して実行。

$ /opt/local/Library/Frameworks/Python.framework/Versions/2.7/bin/uniconvertor 変換したいファイル 変換後のファイル名

フォーマットは拡張子で自動判別される。

対応しているフォーマットは本家のサイトへ。

UniConvertor vector graphics translator

なお、PythonのパスがハードコーディングされているのでmacOS標準の方のPythonが呼び出されたりはしない。/usr/local/binシンボリックリンクを作成しておくといいと思う。

uniconvw

GUIのラッパースクリプトらしいです。InkscapeのExtentionからすると不要な気がしますが一応。動くかどうかは試していません。

上記と同じ要領でインストールすればいいはずだが、/usr/share/applicationsディレクトリを作成しようとしてこける。対処法としては setup.pyの103行目以降の、ハードコーディングされている/usr/share/usr/local/share、またはインストールディレクトリに合わせて変更する。

そのほか

注意点など

CorelDRAW(.cdr)形式のファイルの変換をサポートしていると記載されていますが、新しいバージョンのファイル形式はサポートされていないようです。Googlefiletype:cdrとしてヒットするファイルで試しても変換不能でした。スタックトレースとともに以下のメッセージで変換できませんでした。

    raise SketchLoadError(_("Parsing error: ")+ str(value))
app.events.skexceptions.SketchLoadError: Parsing error: unrecognised file type

また、Inkscapeで作成したSVGファイルについても、モノによっては処理が終了しないケースがあるようです。具体的な条件は良く分かりません。 エラーを吐かずにコマンドプロンプトが帰ってこない状態になります*1

LInux 向け情報

Ubuntu 16.04 のuniconvertor (python-uniconvertor)は動かないようです。

展開したソースに含まれるREADMEなどではプロジェクトのURLが"http://sk1project.org"という記載になっていますが、現在のURLは"http://sk1project.net"です。
なお、現在ダウンロードできるバージョン 1.1.5のLinux向けパッケージはUbuntu 10向けだったりとても古いです。

UniConvertor Download Page

最新版について

どうやら2.0のリリース候補(RC)版が存在するようです。

sK1 2.0 (ex.PrintDesign) vector graphics editor

Only import/export filters are not implemented yet. This functionality will be subject of RC3 milestone.

と書いてあるので、変換フィルタとしては使えなさそう。RCというのはRelease Candidate(リリース候補版)だと思うんですが、重要な機能の入っていないRC版というのも不思議ですがまあ今後に期待、ということで*2

開発中のバージョンのリポジトリgithubにあります。READMEによるとプロジェクト名の"sK1 Project"は"K"が大文字だそうです。

カラーパレット

このソフトを開発しているプロジェクトのサイトで各種グラフィック編集ソフト向けにカラーパレットのデータが配布されている。

sK1 Project - Free Palette Collection

カラーパレットの名称をクリックするとダウンロードページに移動する。

まとめ

とりあえず動いたようなので、次はInkscape本体のパッケージ化のリターンマッチです。

確実に言えるのはPythonインタプリタの場所をハードコーディングしている箇所は小細工が必要だろうということです。


何だか無駄に文字数が多い気がしますが、このエントリは以上です。

*1:用紙サイズとして設定された範囲外にオブジェクトがあるとうまくいかないのかもしれません

*2:どっちにしろInkscape側が対応してなさそうだからどうでもいい