使用Flask从父文件夹导入模块

时间:2015-03-16 23:36:50

标签: python flask python-import

我的文件夹树:

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
来自test1test2

唯一可行的方法是手动sys.path.append类似

os.path.join(os.path.dirname(__file__), "../..")

然而有很多答案就是说,弄乱sys.path会给我带来麻烦(为什么?);可悲的是,经过1小时的谷歌搜索后,我仍然没有找到正确的进口方式,我感到非常困惑。

1 个答案:

答案 0 :(得分:1)

测试比测试要好得多,所以如果你需要将路径附加到sys.path以使其工作 - 并且在这个目录配置中,你将 - 这是一个合理而实用的步骤

但是,通常最好不要手动调整模块加载路径。它假定您的代码将始终加载到测试文件夹外的目录中,这可能并非总是如此。但是"你会遇到问题而且#34;是相当薄弱的茶。

更大的问题是你不能使用那个小路径补丁来完成你最终想要/需要的那种自动化测试和测试管理。更好的是学会使用真正的测试工具/测试运行器,例如pytestnose。如果你还使用像tox这样的宏测试运行器,那就更好了。该组合将自动将您的软件(包括任何声明的依赖项)安装在一个全新的原始virtual environment中。这不仅可以帮助您测试模块的正常可操作性,还可以测试其可安装性。它还可以帮助您轻松地跨不同版本的Python运行测试,而无需额外的工作。 (例如,我目前正在对2.6,2.7,3.2,3.3,3.4,3.5和几个版本的PyPy进行测试 - 不是因为我使用了所有这些版本,而是因为它并没有花费我额外的费用确保我的软件在整个Python世界的大片区域中运行。)

公平警告:第一次设置你的测试环境有点麻烦,需要相当多的努力和学习#34;机械师"技能。但这是一次性投资,将为您的所有Python工作带来好处。

总而言之,修补sys.path是一个公平的起点。但是,您在测试中最终需要更多的通用性,广度,深度,测试装置和自动化 - 并且路径修补可以帮助您完成这些工作。升级到真正的测试工具可以。