豊橋技術科学大学の近藤です。
只今、Djangoプロジェクトのリポジトリを指定して実行すると、
Clone, Virtualenv作成, pipでのfreezeインストール,
Test, cx_freezeでのBuild, ZIP圧縮
を自動的に行うDjangoアプリを作成中です。
その際に、いくつか躓いた点があったのでまとめてみました。
チルダの展開は os.path.expanduser がやってくれる。
こんなエラーをはいていました。
発生条件が
カレントディレクトリが親プロジェクトになっているのが原因と気づきました。
manage.py test の実行前に、
実行しているmanage.pyとは別のmanage.pyがあるディレクトリの場合、
このエラーが出るようです。manage.pyがないなら大丈夫なのかと思い、
manage.pyがないディレクトリをカレントディレクトリとしましたが、この場合は
"manage.pyがない"と怒られました。当たり前でした。
結果: Testを実行する際は、Test対象のプロジェクトのルートに移動する必要がある
只今、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?
発生条件が
- 親プロジェクト内のディレクトリに存在する
子プロジェクトをテストしようとする場合 - 同じ名前のアプリケーションが存在する場合
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対象のプロジェクトのルートに移動する必要がある
コメント
コメントを投稿