2017-02-27 88 views
0

所以我有一個像這樣的文件夾結構。ImportError:沒有模塊命名的應用程序 - 試圖運行單元測試

└── myApp 
    ├── app 
    │   ├── __init__.py 
    │   ├── core 
    │   ├── db.py 
    │   ├── schema.sql 
    │   ├── static 
    │   │   ├── fonts 
    │   │   ├── images 
    │   │   ├── js 
    │   │   └── resources 
    │   ├── templates 
    │   ├── tests 
    │   │   └── tests.py 
    │   ├── utils.py 
    │   ├── views.py 
    │   ├── con.py 
    ├── config.py 
    ├── manifest.json 
    ├── run.py 
    ├── deps 
    ├── store 

正如你可以看到我的tests.py在app/tests文件夾中。

app = Flask(__name__)初始化中聲明的.py但每當我嘗試運行我的測試我的文件夾(這是我從對myApp目錄做像這樣:Python應用程序/測試/ tests.py)我得到一個ImportError: No module named app

我不確定這個信息是否相關,運行應用程序我通常運行run.py其中有app.run(debug = True, host='0.0.0.0')裏面。

感謝。

tests.py:

import os 
import unittest 
from app import app 

class TestCase(unittest.TestCase): 

    def setUp(self): 
     self.db_fd, app.config['DATABASE'] = tempfile.mkstemp() 
     self.app = app.test_client() 

    def tearDown(self): 
     os.unlink(app.config['DATABASE']) 

    def test_empty_db(self): 
     rv = self.app.get('/index') 
     assert b'No entries here so far' in rv.data 

if __name__ == "__main__": 
    unittest.main() 
+0

我不想導入tests.py任何地方,但是。我想自己運行它。編輯:無論我回復誰刪除了他們的評論。 –

回答

1

是否有可能,這是因爲tests.pyapp裏面?這意味着python不會找到app,因爲他沒有查看這個目錄之上的目錄。

import os.path 
import sys 
newPath = os.path.abspath(os.path.join(os.path.dirname(__file__), os.path.pardir, os.path.pardir)) 
sys.path.append(newPath) 
from app import app 
sys.path.remove(newPath) 
del newPath 

這是一個非常醜陋的方式來添加一個路徑到python尋找導入。這個例子有兩個目錄,它們應該帶到myApp目錄。

如果出現這種問題,您還可以考慮將tests目錄移動到myApp文件夾或其他位置。但我不是Python包裝/應用程序禮儀的專家。可能考慮看看

0

你可以看看你的模塊的路徑是否已經通過輸入sys.path來設置。否則,你必須設置它,例如在與單元測試文件類似的:

import sys 
import os 
sys.path.append(os.path.join(os.path.dirname(__file__), 'app')) 
相關問題