2012-07-12 9 views
7

私はこのサイトを上から下に検索しましたが、実際にPython3xで欲しいものを達成するための単一の方法は見つかりませんでした。これは単純なおもちゃアプリなので、簡単なテストケースをアサーションに書き込んで、それを1日と呼ぶことができたと思いました。それはレポートなどを生成するので、私のコードが変更時に何もしないことを確認したいと思います。簡単なテストのために親ディレクトリをインポート

私の現在のディレクトリ構造は次のとおりです(関連部分のみが含まれています)

project 
    -model 
    __init__.py 
    my_file.py 
    -test 
     my_file_test.py 

私はmy_file_test.pyがmy_file.pyをインポートするために取得した時間の地獄を持っています。

私が言ったように。私はこのサイトをトップからボトムまで検索しましたが、解決策はありませんでした。

:私はの効果にエラーが発生します事実上すべての試みで https://stackoverflow.com/questions/5078590/dynamic-imports-relative-imports-in-python-3 Importing modules from parent folder Can anyone explain python's relative imports? How to accomplish relative import in python

:Pythonの私のバージョンは3.2.3

は、以前の試みをしようとしたのFedora 17で実行されていますImportError:* という名前のモジュールがありません。または ValueError:非パッケージで相対インポートを試行しました

ここでは何が起こっているのですか?私はそれだけでなく、interwebsのすべての受け入れられた答えを試してみました。ここで気になることは何もしませんが、.NET/Java/Rubyプログラマとして、これは直感性の絶対的な定義であることが証明されています。

EDIT:私がREPLにインポートしようとしているクラスをロードしようとした事項と私は次の取得する場合:それは問題にした場合

>>> import datafileclass 
>>> datafileclass.methods 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
>>> x = datafileclass('sample_data/sample_input.csv') 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
TypeError: 'module' object is not callable 

...私はクラスの作品に機能を知っています私はそれをインポートすることはできませんが、今はテストできない原因となっています。将来的には統合の問題を引き起こすでしょう。 (無実を守るために名前が変更されました) ライブラリのこの繰り返しで2〜3週間以内に希望の機能が得られれば、どんな助けも役に立つかもしれません。空__init__.pyを持っている重要なことは、あなたのtestsディレクトリも(モジュールディレクトリである必要があり

project 
    -model 
    __init__.py 
    my_file.py 
    -tests 
    __init__.py 
    test_my_file.py 

:、

答えて

6

構造このようなあなたのコードをRubyでそれをやったが、クライアントは、学習経験としてPythonを望んでいるだろうファイル)。

次に、test_my_file.pyでfrom model import my_fileを使用し、トップディレクトリからpython -m tests.test_my_fileを実行します。これはモジュールとしてtest_my_fileを呼び出しています。その結果、Pythonはインポートパスを設定してトップレベルを組み込みます。

pytestまたはnoseを使用すると、py.testを実行するとテストが自動的に実行されます。

これはあなたの質問に答えることはできませんが、Python標準のやり方ではなく、もっと簡単に作業することができます。つまり、自分のプロジェクトを独自のトップレベルディレクトリに構造化することです。

+0

ありがとうございました。私は今夜​​それを試してみましょう。それは私の元の構造に似ていましたが、私はこのように構造化すべきであると述べたリソースを見つけました。私は仕事が終わったらそれがどのように機能するかを教えてあげます。 – Rig

+1

これは、1行目(importステートメント)で "ImportError:Modelという名前のモジュールがありません"というエラーを引き起こします。この写真には何がありますか? – Rig

+0

クラスにインポート可能にするために必要な明示的なアノテーションがありますか?私はそれを使ったことがあっても、Pythonに精通していません。 – Rig

関連する問題