如何从测试访问子目录



我有一个python项目,我不能从命令行对子目录中的类运行测试。它可以在Pycharm中工作,但不能在命令行中工作。我把它简化如下:

/utils
__init__.py
util.py
/tests
test.py

util.py如下:

class UtilClass:
def __init__(self):
print(" in __init__ ")

utils/__init__.py

from .util import (
UtilClass
)

test。py试着调用它:

from utils import UtilClass
x = UtilClass()

当我运行(从顶级目录):% python tests/test.py是说ModuleNotFoundError: No module named 'utils'。我是否需要对包含utils的路径做些什么?还是顶层的init。py ?

问题是当您执行% python tests/test.py时,python不包括路径中的当前目录。如果您在test.py的开头添加'import sys;print(sys.path)',您将看到'tests/'目录是路径的一部分,但是您运行命令的顶层目录不在那里。几个解决方案:

选项1:显式添加当前目录(临时)

PYTHONPATH='.' python tests/test.py。如果您这样做,顶级目录将在路径中,因此test.py将找到utils/并可以找到UtilClass。这纯粹是临时的,所以很适合运行测试。

您也可以使用export PYTHONPATH='/path/to/top/level',它将在该命令行的生命周期内保留。

选项2:安装当前目录(last)

从顶级目录执行pip install -e .。这将把目录安装为'——editable',用于开发模块,这意味着它创建了一个到您的开发区域的链接。因为它现在已经安装了,python会找到它。它会一直存在,直到你卸载它。

相关内容

  • 没有找到相关文章

最新更新