python在虚拟环境上导入文件

菲利普·凯兹(Philipp_Kats)

我正在使用python3,venv和c9.io PAAS编写一个Web应用程序。我的代码具有以下结构:

batch_runner.py
logic/
    __init__.py
    parsers/
        __init__.py
        time_parser.py
        abstract_parser.py

在这里batch_runnerimport abstract_parser,这又从time_parser导入。一切都已安装并在激活venv的情况下运行。

具体来说,batch_runner.py包含:

from logic.parsers import abstract
from sys import argv

url = argv[1]
a = abstract(url)

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,但是找不到time_parser从中调用的对象abstract_parser,则抛出ImportError: No module named 'abstract'

普拉文

请阅读有关模块python文档中有关导入的内容

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

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

from .abstract_parser import abstract
from .time_parser import _timeInfo

并在abstract_parser.py

from .time_parser import _timeInfo

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

python导入系统有很多陷阱,您可以陷入其中。尼克·科格兰(Nick Coghlan)的这篇博客文章描述了其中许多内容,如果您打算开发一个程序包,我个人认为这是必读的内容。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章