这个问题之前已经被问了数十次,但我找到的每一个解决方案都对我无效。
我正在使用Python 2.7和pytest
来运行测试。
项目/ git仓库的结构如下:
myapp/
myapp/
__init__.py # def main():
# ... stuff
# if __name__ == "__main__":
# main()
__main__.py # import __init__ as myapp
# myapp.main()
config.yaml # (app config file)
myapplib/
__init__.py # (Empty file)
config.py # Loads {projectroot}/config.yaml
# def cfg():
# ... stuff
tests/
test_stuff.py # from myapplib.config import cfg
然后我尝试运行tests/test_stuff.py文件,方法如下:
cd {projectroot}
pytest
同时它抱怨道:
myapp/tests/test_stuff.py:38: in <module>
from myapplib.config import cfg
E ImportError: No module named myapp.config
我尝试过以下几种方法:
- 使用
-m
导入myapplib
或myapp.myapplib
- 从不同的目录启动
pytest
(例如在tests/中) - 使用其他答案中提供的所有路径技巧
- 将代码更改为
from . import XXX
或..
或任何相对导入选项(但这些都会出现ValueError:尝试在非包中进行相对导入
错误)。
值得注意的是,该应用程序本身在项目目录中可以正常执行:
cd {projectroot}
python myapp
......所有配置和路径都没有问题。只是测试无法找到路径。
以下是我目前的完整复制:
https://pyfiddle.io/fiddle/4fa60f5a-02df-43bb-8aa3-03e59ff72650/?m=Saved%20fiddle
myapp.config
不存在。难道不应该是myapp.myapplib.config
吗?错误似乎与您的代码不匹配。 - Jean-François Fabrefrom myapplib.config import cfg
,但错误显示为from myapp.config import cfg
。首先澄清这一点。 - Jean-François Fabre