[英]python importing file on virtual environment
我正在使用python3,venv和c9.io PAAS编写一个Web应用程序。 我的代码具有以下结构:
batch_runner.py
logic/
__init__.py
parsers/
__init__.py
time_parser.py
abstract_parser.py
这里batch_runner
导入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
,但找不到从abstract_parser
调用的time_parser
,并抛出ImportError: No module named 'abstract'
更改此:
from abstract_parser import abstract
至
from logic.parsers.abstract_parser import abstract
在这种情况下,一种可能的解决方案是在包内使用相对导入:
也就是说,在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)的这篇博客文章描述了其中许多内容,如果您打算开发软件包,我个人认为这是必读的内容。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.