py导入包异常跳出_Python运行Unittest作为包导入错误
I.前言:應(yīng)用程序的目錄結(jié)構(gòu)和模塊在文章末尾列出.
二.問(wèn)題陳述:如果未設(shè)置PYTHONPATH,則應(yīng)用程序運(yùn)行,但是單元測(cè)試失敗,并出現(xiàn)ImportError:沒(méi)有名為models.transactions的模塊.嘗試導(dǎo)入時(shí)會(huì)發(fā)生這種情況
app.py中的交易.如果PYTHONPATH設(shè)置為/ sandbox / app,則應(yīng)用程序和
unittest運(yùn)行沒(méi)有錯(cuò)誤.解決方案的約束條件是不必設(shè)置PYTHONPATH,并且
sys.path不必通過(guò)編程方式進(jìn)行修改.
三,詳細(xì)信息:考慮以下情況:設(shè)置PYTHONPATH并將test_app.py作為軟件包/ sandbox $python -m unittest tests.test_app運(yùn)行.查看__main__的打印語(yǔ)句
遍及整個(gè)代碼:
models : app.models.transactions
models : models.transactions
resources: app.resources.transactions
app : app.app
test : tests.test_app
單元測(cè)試首先導(dǎo)入應(yīng)用程序,因此有app.models.transactions.下次導(dǎo)入該應(yīng)用程序
嘗試是resources.transactions.導(dǎo)入時(shí),它會(huì)自己導(dǎo)入model.transactions和
然后我們看到__name__代表app.resources.transactions.其次是app.app
導(dǎo)入,最后是unittest模塊tests.test.app.設(shè)置PYTHONPATH允許應(yīng)用程序解析模型.
一種解決方案是將model.transactions放入resources.transaction內(nèi).但是還有另一種方法可以解決這個(gè)問(wèn)題嗎?
為了完整起見(jiàn),在運(yùn)行應(yīng)用程序時(shí),__ main__的打印語(yǔ)句為:
models : models.transactions
resources: resources.transactions
app : __main__
這是預(yù)期的,并且不會(huì)嘗試導(dǎo)入高于/ sandbox / app或橫向的導(dǎo)入.
IV.附錄
A.1目錄結(jié)構(gòu):
|-- sandbox
|-- app
|-- models
|-- __init__.py
|-- transactions.py
|-- resources
|-- __init__.py
|-- transactions.py
|-- __init__.py
|-- app.py
|-- tests
|-- __init__.py
|-- test_app.py
A.2模塊:
(1)應(yīng)用程式:
from flask import Flask
from models.transactions import TransactionsModel
from resources.transactions import Transactions
print ' app : ', __name__
def create_app():
app = Flask(__name__)
return app
app = create_app()
if __name__ == '__main__':
app.run(host='127.0.0.1', port=5000, debug=True)
(2)模型.交易
print ' model : ', __name__
class TransactionsModel:
pass
(3)resources.transactions:
from models.transactions import TransactionsModel
print ' resources: ', __name__
class Transactions:
pass
(4)tests.test_app
import unittest
from app.app import create_app
from app.resources.transactions import Transactions
print ' test : ', __name__
class DonationTestCase(unittest.TestCase):
def setUp(self):
pass
def tearDown(self):
pass
def test_transactions_get_with_none_ids(self):
self.assertEqual(0, 0)
if __name__ == '__main__':
unittest.main()
與50位技術(shù)專家面對(duì)面20年技術(shù)見(jiàn)證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的py导入包异常跳出_Python运行Unittest作为包导入错误的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: row间距 table 某一行_UITa
- 下一篇: adf检验代码 python_第22期: