Python2.7でOpenCVを使ったコードをTravis CI(まだUbuntu 14.04)でテストするときの設定

Pocket
LINEで送る

新年早々ドハマりしたのでメモ。環境はTravisCI標準のUbuntu 14.04(いつになったら16.04になるんでしょうか?!?!?!)。OpenCVはaptで入るバージョンです。

.travis.ymlはこんな感じ。PYTHONPATHを設定するという正解にたどり着くまでに3時間くらいかかりました・・・

sudo: required
dist: trusty

script:
  - sudo apt-get update
  - sudo apt-get install libopencv-dev python-opencv
  - export PYTHONPATH=$PYTHONPATH:/usr/lib/python2.7/dist-packages
  - ./test.py

./test.pyというのはこれ。

#!/usr/bin/env python
import cv2
print cv2.__version__

PYTHONPATHの設定がないと

$ ./test.py
Traceback (most recent call last):
  File "./test.py", line 2, in 
    import cv2
ImportError: No module named cv2

となってテスト(といっても何もテストしてませんが)が失敗します。

PYTHONPATHの行を加えてテストを走らせてログを見ると

libdc1394 error: Failed to initialize libdc1394

と出ますが、./test.pyの終了ステータスは0で無事に成功と表示されました。

デスクトップでも「ImportError: No module named cv2」と出るときはPYTHONPATHを疑うということで。

補足

PYTHONPATHで加えるべきディレクトリは

sudo find / | grep -F cv2.so

で検索できるので、.travis.ymlに書いて探すとよいでしょう。

Pocket
LINEで送る

【やっつけ】CGIHTTPServer.test()でウェブサーバを立ち上げるROSのノードを作る

Pocket
LINEで送る

もっと簡単な方法があれば教えてくださーい

やりたいこと

roslaunchでウェブサーバを立ち上げたい。roslaunchを終わらせたらウェブサーバを落としたい。

やり方

次のようなスクリプトwebserver.pyを書いて、scriptsディレクトリに置く。

#!/usr/bin/env python
import rospy, os
import CGIHTTPServer

def kill():
    os.system("kill -KILL " + str(os.getpid()))

os.chdir(os.path.dirname(__file__))
rospy.init_node("webserver")
rospy.on_shutdown(kill)
CGIHTTPServer.test()

launchファイルにノードを次のように書く。

<launch>
  <node pkg="hoge_webserver" name="webserver" type="webserver.py" required="true" args="8080" />
</launch>

解説

スクリプト中のkillは、自分自身のプロセスをぶっ殺す関数で、CGIHTTPServer.test()もろともシステムから消し去ります。これがないと、CGIHTTPServer.test()のスレッド(?)が死にません。

また、roslaunchからこのノードを立ち上げると、システムのディレクトリがドキュメントルートになるので、8行目でディレクトリをscriptsに変更しています。

また、roslaunchからwebserver.pyを立ち上げると引数に余計なものが入るので、ローンチファイルでwebserver.pyに指定する引数をargs=”8080″と明示的に指定しています。

以上。

Pocket
LINEで送る

FreeBSD10にpython2.4から2.6までを無理矢理インストールした。

Pocket
LINEで送る

こんにちは。なんだかよく分からないのですが、頭の中でティモテの歌が流れっぱなしです。もうダメかもしれません。

Open usp Tukubaiの開発はFreeBSDでやっているのですが、この前、環境をFreeBSD10にしました。

続きを読む FreeBSD10にpython2.4から2.6までを無理矢理インストールした。

Pocket
LINEで送る

Pythonのround関数の-0.0はどうにかならんのでしょうか?

Pocket
LINEで送る

タイトルのままなんですが、負の数字を丸めてゼロになるときに -0 とか -0.0 とか出てきて微妙に困っております。

Python 2.7.2 (default, Oct 11 2012, 20:14:37) 
[GCC 4.2.1 Compatible Apple Clang 4.0 (tags/Apple/clang-418.0.60)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> round(-1.1,-1)
-0.0
>>> round(-1.1,-1)*1.0
-0.0

どーやったらマイナスでないゼロになる?

情報乞う。

※以下、追記

こんなん見つけた。http://mail.python.org/pipermail/python-bugs-list/2006-October/035573.html

Pocket
LINEで送る