[英]Python imports and unit tests
我正在嘗試第一次構建 Python 包/庫。 到目前為止,我有這些文件:
src
Accentizer2
__init__.py
Accentizer.py
Annotation.py
test
test_1.py
文件內容:
加速器.py:
from Annotation import Annotation # this is where the error occurs
class Accentizer:
x = 10
注釋.py:
class Annotation:
Variants = []
test_1.py:
from src.Accentizer2.Accentizer import Accentizer
當我運行 test_1.py 時,我收到以下錯誤:
Traceback (most recent call last):
File "..\tests\test_1.py", line 1, in <module>
from src.Accentizer2.Accentizer import Accentizer
File "..\src\Accentizer2\Accentizer.py", line 1, in <module>
from Annotation import Annotation
ModuleNotFoundError: No module named 'Annotation'
當我運行 Accentizer.py 時,它運行正常。
我錯過了什么? 將測試鏈接到被測代碼的傳統方法是什么?
將Accentizer.py
中的導入語句更改為以下行可修復錯誤:
from src.Accentizer2.Accentizer import Accentizer
但是在我構建並安裝 Accentizer2 package 並嘗試將其導入另一個項目后,我收到錯誤“src 不是模塊名稱”。
這里有幾件事有點不對勁
在您的Accentizer.py
中,您嘗試導入全局 package Annotation
。 但是, Annotation.py
是一個本地文件(包/文件夾的本地文件)。
假設您的src
文件夾在sys.path
中,正確的做法(給定您的文件夾結構)是全局或本地導入。 注意:名稱 global 和 local 並不是真正的標准:)
這只是導入 package,並在導入期間提供完全限定的路徑。 假設src
在路徑中。
from src.Accentizer2.Annotation import Annotation
class Accentizer:
x = 10
這個不關心所有東西的位置,並使用.
引用當前文件夾。 您也可以使用..
來指代父母, ...
來指代祖父母等。
from .Annotation import Annotation
class Accentizer:
x = 10
src
文件夾有一個src
文件夾是非 Pythonic 的。 對於很多語言來說這是慣例,但對於 python 來說並不多
通常,您不想將文件命名為與 class 名稱相同的名稱。 我建議分別使用帶有Accentizer
和Annotation
類的文件accentizer.py
和annotation.py
。 原因是 class 和文件具有相同的名稱可能會中斷導入過程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.