最近在使用 Python 的 XlsxWriter 來產生 Excel 檔案。
可是在 Ubuntu 上面只有在 Trusty 裡面才有 python-xlsxwriter/python3-xlsxwriter 可以使用。
但是我自己在使用的是 Ubuntu 13.10 (Saucy) 於是我就先自己從 Trusty 上面抓 Debian source package 回來 backport 到 Saucy 上面使用。
本來想說等到程式寫好的差不多再來 backport 到 Ubuntu 12.04 (Precise) 上面給人家使用,結果卻發現事情並非如此單純,因為 xlsxwriter 這個套件還需要使用 dh-python 來編譯,但是在 Precise 上面根本就沒有這個套件,於是這件事就變成要先去 backport dh-python 到 Precise 上面使用。
想說不然就從跟 Precise 比較接近的 Wheezy 來抓 Debian source package 回來 backport 好了,於是就找到了 wheezy-backports 裡面的 dh-python,原本以為只要抓回來改一下 debian/changelog 再推到 PPA 上編譯完成就可以了,沒想到 dh-python 已經編譯好了,再去修改 xlsxwriter 裡面的 debian/control 加上 dh-python 的相依性來編譯就可以了,結果卻又遇到了下面這段錯誤訊息:
running python rtupdate hooks for python3.2... Usage: py3clean [-V VERSION] [-p PACKAGE | DIR_OR_FILE] py3clean: error: only one action is allowed at the same time (cleaning directory or a package) error running python rtupdate hook dh-python dpkg: error processing python3 (--configure): subprocess installed post-installation script returned error exit status 4 dpkg: dependency problems prevent configuration of dh-python: dh-python depends on python3 (>= 3.2.3-0); however: Package python3 is not configured yet. dpkg: error processing dh-python (--configure): dependency problems - leaving unconfigured dpkg: dependency problems prevent configuration of python3-all: python3-all depends on python3 (= 3.2.3-0ubuntu1.2); however: Package python3 is not configured yet. dpkg: error processing python3-all (--configure): dependency problems - leaving unconfigured Processing triggers for libc-bin ... No apport report written because the error message indicates its a followup error from a previous failure. No apport report written because the error message indicates its a followup error from a previous failure. ldconfig deferred processing now taking place Errors were encountered while processing: python3 dh-python python3-all E: Sub-process /usr/bin/dpkg returned an error code (1)
後來追查了一下才發現,原來 dh-python 在 python3 還沒有安裝好的時候會去執行 py3clean 才導致這個問題的發生,於是查了一下 Debian Policy Manual,發現在 7.2 Binary Dependencies 這一章節提到 Pre-Depends 可以使用來解決我遇到的問題。
於是我就再修改一下 dh-python 將 ${python3:Depends} 移到 Pre-Depends 上面,等 dh-python 推上 PPA 編譯完成後,再來編譯 xlsxwriter 這個額外加上 dh-python 相依性的套件,才順利過關。
xlsxwriter backports 的 PPA 放在 ppa:fourdollars/xlsxwriter