Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Is it possible to access the variables in __init__.py from the modules in the same package?

Tags:

I have a hello1 package that contains good.py module.

hello1 ├── __init__.py └── good.py 

The init module has a variable A = 1, and I need to access the variable hello1.A in good.py.

import hello1  class Good(object):     def __init__(self):         print hello1.A  if __name__ == "__main__":     g = Good() 

The issue is that when I execute the python script I got ImportError: 'No module named hello1' error. I could add import sys; sys.path.append("..") at the first line of good.py for a quick fix.

However, the good.py is in hello1 package where the __init__.py is also in, so I wonder if there is a way to access the variables in __init__.py from the modules in the same package.

like image 636
prosseek Avatar asked Aug 16 '13 13:08

prosseek


2 Answers

From Python: import the containing package:

Importing __init__ seems to work fine.

import __init__  class Good(object):     def __init__(self):         print hello1.A 
like image 116
prosseek Avatar answered Sep 20 '22 22:09

prosseek


If I'm not mistaken you want to do something like:

python hello1/good.py 

Since good.py is a submodule of a package you shouldn,'t run it directly; keep in mind that when directly executing it, then it isn't considered as part of the hello1 package, which prevents relative imports and the current directory is the one that contains the file, hence hello1 cannot be found if it isn't part of the PYTHONPATH. Instead you can run it using the -m switch of the python interpreter:

-m mod : run library module as a script (terminates option list)

I personally don't like using the interpreter options to execute a python file. I'd rather have an independent launcher file good.py that imports the hello1.good module and uses it to do what it has to do.

like image 33
Bakuriu Avatar answered Sep 22 '22 22:09

Bakuriu