【问题标题】:pytest 'No module named ...' for import within the tested modulepytest 'No module named ...' 用于在测试模块中导入
【发布时间】:2017-11-25 12:03:58
【问题描述】:

我发现了一些类似的问题,但并没有完全解决我的问题(例如PATH issue with pytest 'ImportError: No module named YadaYadaYada'

我的项目结构如下:

MyApp
 |
 +--MyApp
 |   |
 |   +--__init__.py
 |   +--app.py
 |   +--config.py
 |
 +--tests
     |
     +--__init__.py
     +--test_app.py

在我的 test_app.py 中,我导入 app.py,效果很好。

from MyApp import app

但在 app.py 中我像这样导入 config.py。

import config

通过此设置,我可以运行应用程序模块,但 pytest 无法导入“配置”并引发:

ImportError: No module named 'config'

当我将 app.py 中的 import 语句更改为时,pytest 成功:

from MyApp import config

但是,当我尝试运行应用程序时出现错误:

ImportError: No module named 'MyApp'

通过阅读其他问题,我确信 PYTHONPATH 有问题,我只是不知道如何解决这个问题。

【问题讨论】:

    标签: python flask pytest importerror pythonpath


    【解决方案1】:

    将 PYTHONPATH 变量设置为项目的根文件夹并设置与此相关的所有其他路径

    在您使用的同一文件夹中

    导入模块

    如果从您使用的其他文件夹引用

    来自模块导入类

    如上更改项目中的引用,它应该得到解决

    【讨论】:

    • 感谢您的建议!我仍然遇到同样的问题。我将 virtualenv 中的 PYTHONPATH 设置为根文件夹(在此 link 之后),但结果是一样的。
    • 我找到了一个可行但似乎不是很优雅的解决方案:在导入“app.py”之前,我在 test_app.py 中添加了import sys, os sys.path.append(os.path.join(os.path.dirname(__file__), '..', 'MyApp'))。有没有更优雅的方式?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-03
    • 2017-05-05
    • 2017-03-16
    • 2016-10-31
    相关资源
    最近更新 更多