スキップしてメイン コンテンツに移動

インターン(その6)

豊橋技術科学大学の近藤です。

只今、Djangoプロジェクトのリポジトリを指定して実行すると、
Clone,  Virtualenv作成, pipでのfreezeインストール,
Test, cx_freezeでのBuild, ZIP圧縮
を自動的に行うDjangoアプリを作成中です。

その際に、いくつか躓いた点があったのでまとめてみました。

 os.path.realpathではチルダは使えない

よく考えたら動かないのは当然ですが、なかなか気づきませんでした。
os.path.realpath('~/.virtualenv/hoge/bin/pip')
は、
/home/kondo/django/fuga/~/.virtualenv/hoge/bin/pip
になるそうで。
チルダの展開は os.path.expanduser がやってくれる。
os.path.expanduser("~/.virtualenv/hoge/bin/pip')
-> /home/kondo/.virtualenv/hoge/bin/pip 

Test時のカレントディレクトリに注意する

ビルドしたいプロジェクト内でテストを実行しようと、manage.py test を実行したら
こんなエラーをはいていました。

  File "/usr/lib64/python2.7/unittest/loader.py", line 267, in _find_tests
    raise ImportError(msg % (mod_name, module_dir, expected_dir))
ImportError: 'tests' module incorrectly imported from '/home/kondo/django/
  fuga/.build/piyo/myapp'. Expected '/home/kondo/django/fuga/myapp'.
  Is this module globally installed?

発生条件が
  1. 親プロジェクト内のディレクトリに存在する
    子プロジェクトをテストしようとする場合
  2. 同じ名前のアプリケーションが存在する場合
と思い、内側の プロジェクトを外に出してみて再度実行。結果は以下でした。
  File "/usr/lib64/python2.7/unittest/loader.py", line 267, in _find_tests
    raise ImportError(msg % (mod_name, module_dir, expected_dir))
ImportError: 'tests' module incorrectly imported from '/tmp/.build/piyo/myapp'.
  Expected '/home/kondo/django/fuga/myapp'.
  Is this module globally installed?
どうやら1番は関係ないらしい。これでは困るので原因をしばらく考えた結果、
カレントディレクトリが親プロジェクトになっているのが原因と気づきました。

manage.py test の実行前に、
os.chdir('/home/kondo/django/fuga/.build/piyo')
を実行するとエラーの発生はありませんでした。

実行しているmanage.pyとは別のmanage.pyがあるディレクトリの場合、
このエラーが出るようです。manage.pyがないなら大丈夫なのかと思い、
manage.pyがないディレクトリをカレントディレクトリとしましたが、この場合は
"manage.pyがない"と怒られました。当たり前でした。

結果: Testを実行する際は、Test対象のプロジェクトのルートに移動する必要がある

コメント

このブログの人気の投稿

INTEROP Tokyo2015

6月11日(木)Interop Tokyoへ行ってきました。 私の目当ては、CITRIX社 ブース会場で行われた クラウド・エバンジェリストの北瀬公彦さんと常田秀明さんの講演です CITRIX社のロードバランサーであるネットスケーラーの活用事例を IBM社のクラウドサービスSoftLayerを例に説明されていました。 CITRIX社は、IBM社のグローバル提携企業だから、 CITRIX社のロードバランサーであるネットスケーラーと SoftLayer は、セットで説明されていました。 SoftLayer は、データセンターをプライベートにつなぐネットワークだっていう話でしたので、 IBM社のSoftLayer の物理サーバーを使えば、 データセンターをクラウド化ができる。 (オンプレミスの環境をそのまあ維持してデータセンターへ移行できる) 従来のオンプレミスユーザー最適だってことでした。 そのため、仮想化とか、クラウドがどうかとか説明必要ないということになり、 企業の情報システム担当者は、安心して使えるし、経営者にも説明しやすいと思いました。 自前で仮想化システム研究できる余裕はなく、 PaaSは不安という感じがあれば、 SoftLayerのIaaSサービスって、選択しやすいし、わかりやすい。 最適なクラウド基盤を選択できるっていいなと思いました。

はじめまして!

はじめまして! 株式会社MNUで新しくブログを始めます。 主に、プログラムに関する技術的なことを中心に社員が持ち回りで書いていきます。 皆様のお役に立てれば幸いです。 どうぞ、これからよろしくお願いします。 ここから下はコードを表示するサンプルです。 int x = foo(); /* This is a comment This is not code Continuation of comment */ int y = bar(); // This is line 4. foo(); bar(); baz(); boo(); far(); faz(); sh for target do WORKDIR=$(mktemp -d "$EXTRACTHOMEDIR"/XXXXXX) case "$target" in *.[Tt][Gg][Zz]|*.[Tt][Aa][Rr].[Gg][Zz]|*.[Tt][Aa][Rr].[Zz]) tar vzxf "$target" -C "$WORKDIR" move_to_currentpath "$WORKDIR" "$target" ;; *.[Tt][Bb][Zz]|*.[Tt][Aa][Rr].[Bb][Zz]2) tar vjxf "$target" -C "$WORKDIR" move_to_currentpath "$WORKDIR" "$target" ;; *.[Gg][Zz]) gzip -d "$target" move_to_currentpath "$WORKDIR" "$target" ;; *.[Zz][Ii][Pp]|*.[JjWw][Aa][Rr]) check_required_pro