Python-从* behave *测试中找不到并行目录中的软件包

时间:2020-07-01 13:58:54

标签: python module package behavior

我正在尝试用Python完成behave测试。

一个简单的行为测试本身没有问题。但是,当我尝试使用已经创建的,位于并行目录中的程序包中的模块时,我就很努力。

目录结构类似于:

src
 ├── connection
 │    │
 │    └── api_connector.py
 │
 ├── behave_tests
 │    │
 │    ├─ steps
 │    │  │
 │    │  └ testCommands.py
 │    │
 │    ├── testConnection.feature
 │    └── testCommands.feature
 │
 └── unit_tests

通常,行为是从 behave_tests 目录内部启动的。首先,它运行良好。行为测试的所有Python代码都在文件 testCommands.py 中,仅使用了python内核中的软件包。

但是后来我更改了 testCommands.py 以使用我自己的软件包 connection 中的代码,该代码已经过测试并且可以正常工作。

testCommands.py 中,我输入了输入行

from connection.api_connector import ApiConnector, SerialApiConnector

但是此输入行不能由行为解决,它输出:

ModuleNotFoundError: No module named 'connection'

我尝试通过将以下行添加到 test_commands.py

的顶部,将软件包 connection 附加到python模块路径中
import sys
sys.path.append('/home/username/projects/projectname/src/connection/')

但这没有帮助。

如何告诉行为使用我的连接软件包?

1 个答案:

答案 0 :(得分:0)

进一步阅读后,我找到了解决方法。

  1. 要使Python将目录 connection 识别为软件包,我必须将空__init__.py文件添加到两个目录: src connection
  2. 要使用绝对导入来寻址软件包 connection PYTHONPATH 环境变量必须指向 src 目录。

例如在Linux Shell中,我通过键入

来设置PYTHONPATH
export PYTHONPATH=/home/{username}/test_project/src

然后python解释器,并且表现,只要它们从此shell中启动,就可以找到并解决相关模块。