python 在虚拟环境中导入文件
python importing file on virtual environment
我正在使用 python3、venv 和 c9.io PAAS 编写网络应用程序。我的代码结构如下:
batch_runner.py
logic/
__init__.py
parsers/
__init__.py
time_parser.py
abstract_parser.py
此处 batch_runner
导入 abstract_parser
,而后者又从 time_parser 导入。一切都已安装并且 运行s 已激活 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
,但找不到从 [=15 调用的 time_parser
=], 投掷 ImportError: No module named 'abstract'
改变这个:
from abstract_parser import abstract
到
from logic.parsers.abstract_parser import abstract
请阅读有关从 python documentation 模块导入的信息。
在这种情况下,一种可能的解决方案是在包内使用相对导入:
即在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 导入系统有数量惊人的陷阱,您可能会落入其中。 This blog post 作者 Nick Coghlan 描述了其中的许多内容,如果您打算开发一个包,我个人认为这是必读的内容。
我正在使用 python3、venv 和 c9.io PAAS 编写网络应用程序。我的代码结构如下:
batch_runner.py
logic/
__init__.py
parsers/
__init__.py
time_parser.py
abstract_parser.py
此处 batch_runner
导入 abstract_parser
,而后者又从 time_parser 导入。一切都已安装并且 运行s 已激活 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
,但找不到从 [=15 调用的 time_parser
=], 投掷 ImportError: No module named 'abstract'
改变这个:
from abstract_parser import abstract
到
from logic.parsers.abstract_parser import abstract
请阅读有关从 python documentation 模块导入的信息。
在这种情况下,一种可能的解决方案是在包内使用相对导入:
即在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 导入系统有数量惊人的陷阱,您可能会落入其中。 This blog post 作者 Nick Coghlan 描述了其中的许多内容,如果您打算开发一个包,我个人认为这是必读的内容。