当您编写python库,并希望从另一个模块中导入一个模块时,正确的方法是什么,以便在从外部导入库和从库目录运行某些单元测试时,导入都可以工作?
如果你这样做了
import some_module
from some_module import something它在从目录库运行时工作,但从外部导入时会生成ImportError: No module named 'some_module'。
你能做到的
from . import some_module
import my_library.some_other_module
from .some_module import something但是,如果您从放置在同一目录中的unittest导入库,则它将无法工作。
最后,您可以使用sys.path和/或将单元测试移到其他目录。
什么是最好的解决方案?
编辑:为了说明清楚,我想在库的顶部目录中使用python -m unittest运行单元测试。到目前为止,我通过添加
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))到单元测试文件的开头。作为另一种选择,可以编写一个简短的shell脚本,将父目录添加到PYTHONPATH,然后运行unittest。我想知道是否有更好的方法来处理它?
发布于 2013-12-26 11:43:26
看看模块搜索路径上的文档
当导入名为垃圾邮件的模块时,解释器首先搜索具有该名称的内置模块。如果找不到,则在变量spam.py提供的目录列表中搜索名为sys.path的文件。从以下位置初始化sys.path:
如果您编写了一个库,测试代码通常应该以与库的用户相同的方式与库进行接口。这可能意味着通过设置PYTHONPATH环境变量或在默认第三方模块位置安装模块,将模块添加到搜索路径。
我建议使用自动测试发现选项从包含模块的基本目录中运行测试。
python -m unittest discover (python >= 2.7)这将递归地查找与test_*.py匹配的文件(即模块dir中的文件),但应该设置相对于父dir的python。
https://stackoverflow.com/questions/20783605
复制相似问题