用于拆分测试和应用程序目录的Python导入系统机制

时间:2017-10-16 19:58:00

标签: python python-3.x python-import directory-structure

我正在努力将项目成功导入项目中的测试套件,以及能够从命令行运行程序。我已经能够运行我的测试套件一段时间了,在这样的印象下,如果测试工作,那么命令行的东西也是如此 - 显然情况并非如此。我尚未打算将我的程序用作库。 api.py行为是该计划的切入点。

我有一个具有以下结构的项目(与requests相同的目录层次结构):

myapp/
    myapp/
        __init__.py
        api.py # depends on commands.py
        commands.py # depends on utils.py
        utils.py
    tests/
        context.py
        test_api.py # depends on api.py
        test_commands.py # depends on commands.py, utils.py

在文件context.py中,我对myapp添加PYTHONPATH进行了路径修改,因此我可以在代码上成功运行测试。这是该文件的内容

import os
import sys

sys.path.insert(0, os.path.abspath('..'))
import myapp

我已经尝试过我能想到的可想象的导入组合。列出太多了!我还仔细阅读了Python参考import system page和这个tutorial

我应该如何导入我的依赖项?

1 个答案:

答案 0 :(得分:0)

原来这是正确的布局,我把错误误认为是别的。虽然为了将来参考,Python 3中的相对导入必须是明确的:如果在myapp包目录中您不能说import commands,则必须将其导入为from . import commands。这已在PEP 328中定义,另请参阅this SO帖子。使用python -m mutil.api而不是python ./mutil/api.py运行您的包,因为后者不会给出当前路径的解释器上下文。