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

インターン(その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対象のプロジェクトのルートに移動する必要がある

コメント

このブログの人気の投稿

はじめまして!

はじめまして!
株式会社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(); shfor 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_program unzip /usr/p…