i writing web app using python3, venv , c9.io paas. have following structure of code:
batch_runner.py logic/ __init__.py parsers/ __init__.py time_parser.py abstract_parser.py
here batch_runner
imports abstract_parser
, which, in turn, import time_parser. installed , runs venv activated.
to specific, batch_runner.py
contains:
from logic.parsers import abstract sys import argv url = argv[1] = abstract(url)
logic/__init__.py
empty. logic/parsers/__init__.py
contains:
from abstract_parser import abstract time_parser import _timeinfo
if go logic
, run python abstract_parser.py
directly, works expected. however, if go 1 level up, , run python batch_runner.py
, able import abstract_parser
, can't find time_parser
called abstract_parser
, throwing importerror: no module named 'abstract'
do read importing python documentation on modules.
in case, 1 possible solution use relative imports inside package:
that is, in logic/parsers/__init__.py
, use:
from .abstract_parser import abstract .time_parser import _timeinfo
and in abstract_parser.py
:
from .time_parser import _timeinfo
this should let parsers/__init__.py
find abstract_parser
module , time_parser
module.
the python import system has surprising number of traps can fall into. this blog post nick coghlan describes many of them, , consider must-read if you're planning develop package.
Comments
Post a Comment