我的文件夹树:
project/
app/
__init__.py
models.py
dir/test1.py
dir/__init__.py
run.py
dir/test2.py
dir/__init__.py
如果我想做一个
from app.models import Whatever
来自test1
和test2
的唯一可行的方法是手动sys.path.append
类似
os.path.join(os.path.dirname(__file__), "../..")
然而有很多答案就是说,弄乱sys.path
会给我带来麻烦(为什么?);可悲的是,经过1小时的谷歌搜索后,我仍然没有找到正确的进口方式,我感到非常困惑。
答案 0 :(得分:1)
测试比测试要好得多,所以如果你需要将路径附加到sys.path
以使其工作 - 并且在这个目录配置中,你将 - 这是一个合理而实用的步骤
但是,通常最好不要手动调整模块加载路径。它假定您的代码将始终加载到测试文件夹外的目录中,这可能并非总是如此。但是"你会遇到问题而且#34;是相当薄弱的茶。
更大的问题是你不能使用那个小路径补丁来完成你最终想要/需要的那种自动化测试和测试管理。更好的是学会使用真正的测试工具/测试运行器,例如pytest或nose。如果你还使用像tox这样的宏测试运行器,那就更好了。该组合将自动将您的软件(包括任何声明的依赖项)安装在一个全新的原始virtual environment中。这不仅可以帮助您测试模块的正常可操作性,还可以测试其可安装性。它还可以帮助您轻松地跨不同版本的Python运行测试,而无需额外的工作。 (例如,我目前正在对2.6,2.7,3.2,3.3,3.4,3.5和几个版本的PyPy进行测试 - 不是因为我使用了所有这些版本,而是因为它并没有花费我额外的费用确保我的软件在整个Python世界的大片区域中运行。)
公平警告:第一次设置你的测试环境有点麻烦,需要相当多的努力和学习#34;机械师"技能。但这是一次性投资,将为您的所有Python工作带来好处。
总而言之,修补sys.path
是一个公平的起点。但是,您在测试中最终需要更多的通用性,广度,深度,测试装置和自动化 - 并且路径修补可以帮助您完成这些工作。升级到真正的测试工具可以。