2012-07-12 48 views
7

我已經搜索了這個網站從上到下還沒有找到一種方法來實際完成我想要的Python3x。這是一個簡單的玩具應用程序,所以我想我可以在斷言中編寫一些簡單的測試用例並稱之爲一天。它確實生成了報告等,所以我想確保我的代碼在變化時不會做任何事情。導入父目錄進行簡短測試

我的當前目錄結構爲:(僅包括相關部分)

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

我有一個時間讓my_file_test.py導入my_file.py地獄。

就像我說的。我從上到下搜索這個網站,沒有解決方案。我的Python版本是3.2.3在Fedora 17上運行

曾試圖嘗試: 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

在幾乎每一個嘗試,我得到一個錯誤的效果:

ImportError:No module named * OR ValueError:嘗試在非包裝中的相對導入

這裏發生了什麼事。我已經嘗試了所有關於SO的接受答案以及遍佈各個網站的答案。這裏沒有做任何奇怪的事情,但作爲.NET/Java/Ruby程序員,這被證明是直覺的絕對定義。

編輯:如果它的事項我試圖加載我試圖在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 

如果它的事項...我知道在類作品的功能但我無法導入它在現在導致無法測試。將來肯定會引起整合問題。 (更名以保護無辜者) 在這個庫的迭代中獲得期望的功能幾周之內...任何幫助都可能有用。會做的Ruby,但客戶想要的Python作爲一個學習經驗,

回答

6

結構化你這樣的代碼:

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

重要的是,你的tests目錄也應該是一個模塊目錄(有一個空__init__.py文件在其中)。

然後在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 2012-07-12 13:30:47

+1

這會導致第1行(導入語句)中出現「ImportError:No module named model」錯誤。這張照片是什麼 – Rig 2012-07-12 16:28:40

+0

是否有我需要在我的類中使其可導入的某種顯式註釋?並不是真正精通python,而且它甚至已經使用過它了(這只是當時的教學能力)。 – Rig 2012-07-12 16:36:50