我正在用python3、venv和c9.iopaas编写一个web应用程序。我的代码结构如下:
batch_runner.py
logic/
__init__.py
parsers/
__init__.py
time_parser.py
abstract_parser.py
在这里,batch_runner
导入abstract_parser
,这又反过来从time解析器导入。所有的东西都安装好了,并且启动了venv。在
具体来说,batch_runner.py
包含:
logic/__init__.py
为空。logic/parsers/__init__.py
包含:
from abstract_parser import abstract
from time_parser import _timeInfo
如果我转到logic
并直接运行python abstract_parser.py
,那么一切都按预期工作。但是,如果我向上一级运行python batch_runner.py
,它可以导入abstract_parser
,但找不到从abstract_parser
调用的{
更改此项:
到
^{pr2}$请阅读有关从模块上的python documentation导入的信息。在
在这种情况下,一种可能的解决方案是在包中使用相对导入:
也就是说,在
logic/parsers/__init__.py
中,使用:在
^{pr2}$abstract_parser.py
中:这应该让
parsers/__init__.py
找到abstract_parser
模块和time_parser
模块。在python导入系统有很多陷阱,您可以落入这些陷阱中。This blog post作者nickcoghlan描述了其中的许多,我个人认为如果您计划开发一个包,这是一本必读的书。在
相关问题 更多 >
编程相关推荐