我有
ModuleNotFoundError:没有名为“项目”的模块
尝试运行test_req.py时 我的项目结构是:
├── instance/
│ ├── flask.cfg
├── project/
│ ├── __init__.py
│ ├── base_processing.py
│ ├── models.py
| ├── views.py
│ ├── templates/
│ │ ├── base.html
│ │ ├── login.html
│ │ ├── note.html
│ │ ├── notes.html
│ └── static/
│ │
│ └── tests/
│ ├── test_req.html
├── run.py
我的UnitTest文件是:
# project/test_req.py
import unittest
import os
from project import app
from project.models import db, User, Note
from project.views import *
TEST_DB = 'test.db'
class RequestTests(unittest.TestCase):
@classmethod
def setUpClass(cls):
app.config['TESTING'] = True
app.config['WTF_CSRF_ENABLED'] = False
app.config['DEBUG'] = False
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + \
os.path.join(app.config['BASEDIR'], TEST_DB)
app.secret_key = 'staytrue'
cls.app = app.test_client()
def setUp(self):
db.create_all()
def tearDown(self):
db.drop_all()
def test_main_page(self):
response = self.app.get('/', follow_redirects=True)
self.assertEqual(response.status_code, 200)
def test_auth(self):
u = User(username='testname1', password='1234567', email='cyber@mail.com')
db.session.add(u)
db.session.commit()
response = self.app.post('/login', data=dict(username='testname1', password='1234567'), follow_redirects=True)
with self.app.session_transaction() as sess:
self.assertEqual(sess['username'], 'testname1')
if __name__ == "__main__":
unittest.main()
当我从根目录运行该程序时,我的测试工作也可以很好地与鼻子2配合使用。这也是我第一次以此方式组织项目布局。
答案 0 :(得分:1)
模块不是文件夹,应该是.py
文件。由于您没有project.py
文件,因此不应指定from project import app
。
指定from project import app
意味着存在project.py
文件,并且您要从该文件导入类app
。
如果您的test_req.py
和app.py
文件位于同一文件夹中,则只需在import app
中使用test_req.py
也替换:
from project.models import db, User, Note
from project.views import *
到
from models import db, User, Note
from views import *
进一步阅读:
此外,我建议您使用PyCharm Community Edition,它是免费的,多平台和开放源代码的软件,可以帮助您通过单击两次鼠标来解决此类任务。
假设我们在项目的根文件夹中具有以下项目结构:
/folder1/MyPythonFile1.py
/folder1/folder11/MyPythonFile2.py
/folder2/MyApp.py
/folder1/MyPythonFile1.py
文件如下:
class Class1:
def __init__(self):
pass
class Class2:
def __init__(self):
pass
/folder1/folder11/MyPythonFile2.py
文件如下所示:
class Class3:
def __init__(self):
pass
文件/folder2/MyApp.py
使用上述文件中的类,如下所示:
from folder1.MyPythonFile1 import Class1
from folder1.folder11.MyPythonFile2 import Class3
obj1 = Class1()
obj3 = Class3()
将此示例应用于您的特定情况,并相应地更新您的进口商品。