簡體   English   中英

Python 導入和單元測試

[英]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 名稱相同的名稱。 我建議分別使用帶有AccentizerAnnotation類的文件accentizer.pyannotation.py 原因是 class 和文件具有相同的名稱可能會中斷導入過程。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM