python在虚拟环境中导入文件

2024-06-16 12:28:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在用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包含:

^{pr2}$

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调用的{},抛出{}


Tags: frompyimportabstractparservenvtimeinit
2条回答

更改此项:

from abstract_parser import abstract

^{pr2}$

请阅读有关从模块上的python documentation导入的信息。在

在这种情况下,一种可能的解决方案是在包中使用相对导入:

也就是说,在logic/parsers/__init__.py中,使用:

from .abstract_parser import abstract
from .time_parser import _timeInfo

abstract_parser.py中:

^{pr2}$

这应该让parsers/__init__.py找到abstract_parser模块和time_parser模块。在

python导入系统有很多陷阱,您可以落入这些陷阱中。This blog post作者nickcoghlan描述了其中的许多,我个人认为如果您计划开发一个包,这是一本必读的书。在

相关问题 更多 >