Python导入和单元测试

2024-05-19 17:39:13 发布

您现在位置:Python中文网/ 问答频道 /正文

我第一次尝试构建Python包/库。到目前为止,我有以下文件:

src
  Accentizer2
    __init__.py
    Accentizer.py
    Annotation.py
test
  test_1.py

文件内容:

Accentizer.py:

from Annotation import Annotation # this is where the error occurs


class Accentizer:
    x = 10

Annotation.py:

class Annotation:
    Variants = []

测试_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中的import语句更改为以下行可以修复错误:

from src.Accentizer2.Accentizer import Accentizer

但是,在构建并安装Accentizer2包并尝试将其导入另一个项目后,出现错误“src不是模块名”


Tags: 文件infrompytestimportsrc错误
1条回答
网友
1楼 · 发布于 2024-05-19 17:39:13

这里有几件事有点不对劲

当前问题

Accentizer.py中,您正试图导入一个全局包Annotation。但是,Annotation.py是一个本地文件(包/文件夹的本地文件)

假设您的src文件夹位于sys.path中,正确的方法是(给定您的文件夹结构)具有全局或本地导入注意:全局和本地名称并非真正标准:)

全球进口

这只是导入包,并在导入期间提供完全限定的路径。假设src在路径中

from src.Accentizer2.Annotation import Annotation

class Accentizer:
    x = 10

本地进口

这个文件夹不关心所有内容的位置,而是使用.来引用当前文件夹。你也可以用..来指代父母,用...来指代祖父母,等等

from .Annotation import Annotation

class Accentizer:
    x = 10

文体问题

src文件夹

有一个src文件夹是非pythonic的。对于许多语言来说,这是一种习惯,但对于python来说,这并不多见

命名约定

通常,您不希望将文件命名为与类名相同的名称。我建议让文件accentizer.pyannotation.py分别具有AccentizerAnnotation类。原因是类和文件具有相同的名称可能会中断导入过程

相关问题 更多 >