【发布时间】:2013-12-26 10:55:59
【问题描述】:
当你编写一个 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
但是如果你从放在同一目录中的单元测试中导入库,它将不起作用。
最后,您可以使用sys.path 和/或将单元测试移至其他目录。
什么是最好的解决方案?
编辑:为了清楚起见,我想在库的顶层目录中使用python -m unittest 运行单元测试。到目前为止,我通过添加使其工作
import os
import sys
sys.path.append(os.path.dirname(os.path.dirname(os.path.abspath(__file__))))
到单元测试文件的开头。作为替代方案,可以编写一个简短的 shell 脚本,将父目录添加到PYTHONPATH,然后运行单元测试。不知道有没有更好的处理方法?
【问题讨论】:
-
玩
PYTHONPATH而不是sys.path也许... -
我发现您的问题难以理解且令人困惑。你能澄清一下你实际上做了什么吗?我的猜测是,当您实际需要在库的外部 进行单元测试时,您在库的inside 中进行了单元测试。即,
$ ls .应该显示您的库目录。
标签: python