How to make my Python unit tests to import the tested modules if they are in sister folders?
我仍在考虑import声明。如果我在同一级别有两个文件夹:
SRC
测试
如何使test中的py文件导入src中的模块?是否有更好的解决方案(比如将文件夹放在另一个文件夹中?)
- 一个非常类似的问题:stackoverflow.com/questions/1896918
您需要的代码用于使用src/module_name.py
1
| from src import module_name |
根目录位于pythonpath上,例如从根目录运行
您的目录结构是我使用的,但是使用的是模型名而不是SRC。我从J.Calderone的博客上得到了这个结构,类似于谷歌的博客。
- 它坏了=(
- 包(文件夹)的名称中间是否可以有下划线?
- 另外,通过添加一个__init__.py文件,确保src目录是一个包。
- 我将SRC目录添加到pythonpath,而不是根路径。
- 当您将src文件夹添加到pythonpath时,会发生一种有趣的行为,即import module_name语句在没有from src的情况下工作。
- 从你的评论到另一个答案,你是从测试目录运行的吗?如果是这样,您需要将根目录添加到您的pythonpath中。
- Jader是的,在pythonpath中添加src确实有效——但是最终会有很多条目,并且很难管理。如果从项目的根目录运行,则无需更改环境。
- 文件夹名中可以有,但它不是很好的样式(参见pep8),我只是用它来尝试在这里使用自记录代码。
试试看:
1 2 3 4
| import sys
import os
sys.path.append(os.path.join('..', 'src'))
import module_in_src_folder |
编辑以支持任何平台
对于我编写的所有Python项目,我都有与OP完全相同的情况:
所有模块,无论是在SRC或TEST中,还是在这些模块的子文件夹中,总是使用import的形式,标记在其答案中显示:
1
| from src import module_name |
我所做的是编写一个位于Project Folder中的模块,递归地发现测试文件夹中的所有测试模块,并让unittest运行所有这些测试。因为python运行在Project Folder中,所以模块是相对于工作目录的。
这意味着测试就像任何其他想要从src模块化的客户机一样。