pytest需要与python shell不同的导入语句有时
我对编程有些新鲜感,到目前为止,我的大部分程序都是单一的目录事务,但现在我想尝试更大的东西,而且我无法使导入工作。我使用pytest来创建我的单元测试,并且在我的test_foo.py文件中的单元测试定义之后,我一直使用独立测试脚本。这工作正常,直到我添加__init__.py文件。如果使用import card as crd
test_card.py进口卡pytest需要与python shell不同的导入语句有时
文件安排1
StackOverflow | card.py
| test_card.py
。
结果:无论以下命令挨一个ImportError
$ python3 test_card.py $ pytest
文件的安排2
StackOverflow | __init__.py
| card.py
| test_card.py
结果:如果我离开import语句一样,$ python3 test_card.py
仍然有效,但$ pytest
遭受的导入错误。
如果我改用import StackOverflow.card as crd
pytest重新开始工作,但由于ImportError,我无法将其作为脚本运行。
我意识到在本例中我不需要__init__.py
文件,但它只是大型程序的一部分。还有人指出,第二项进口声明显然是错误的。那么我怎样才能用pytest来处理原始的import语句?
card.py的全文:
#Created by Patrick Cunfer #2017-07-15
class Card(object):
def __init__(self, value, suit):
'''
Sets the card's value and suit
param value: An integer from 1 to 13
param suit: A character representing a suit
'''
self.value = value
self.suit = suit
def __str__(self):
return str(self.value) + " of " + str(self.suit)
的test_card.py
#Created by Patrick Cunfer #2017-07-15
# First one breaks pytest, second one breaks shell
# import card as crd
# import StackOverflow.card as crd
def test_Card():
test = crd.Card(5, 'S')
assert test.value == 5
assert test.suit == 'S'
assert str(test) == "5 of S"
del test
if __name__ == "__main__":
#Unit test found a bug? Lets isolate it!
print("Test 1")
test = crd.Card(5, 'S')
print(test.suit)
print("Expect 'S'")
print()
#etc.
回答:
全文如果你想使用__init__.py
你的情况,你有追加的父目录的路径StackOverflow
到sys,如下:
import sys project_dir = 'path to the parent dir of StackOverflow'
sys.path.append(project_dir)
然后你将能够使用import StackOverflow.card as crd
您当前import StackOverflow.card as crd
语句的意思是,你有一个名为StackOverflow
的StackOverflow
目录本身内部的其他目录; import语句是假设你的目录结构看起来是这样的(这不是你的情况下):
StackOverflow | test_card.py
| StackOverflow
| __init__.py
| card.py
不管怎样,在你的情况,你不需要使用__init__.py
,因为你是内导入另一个脚本您从中导入的相同目录。 __init__.py
通常用于在目录之外导入脚本。
在此link中,您可以找到有关如何使用__init__.py
文件的文档。
以上是 pytest需要与python shell不同的导入语句有时 的全部内容, 来源链接: utcz.com/qa/263434.html