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

Python import system mechanics for split test and app directories

我正在努力将我的项目成功导入到我的项目中的测试套件,以及能够从命令行 运行 程序。我已经能够 运行 我的测试套件一段时间了,我的印象是如果测试有效,那么命令行的东西也是如此——显然情况并非如此。我 不打算将我的程序用作库。 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, and this tutorial.

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

事实证明这是正确的布局,我误以为是其他错误。尽管为了将来参考,Python 3 中的相对导入必须是显式的:在 myapp 包目录中时你不能说 import commands,你必须将其导入为 from . import commands .这是在有关该主题的 PEP 328 also see this SO post 中定义的。 运行 你的包 python -m mutil.api 而不是 python ./mutil/api.py 因为后者不会给出当前路径的解释器上下文。