I am trying to create a package in Python that has a number of sub-packages (I'm not sure if that's the right term for them) which need to interoperate.
I have a (simplified) structure like this:
/package
    |-script1.py
    |-script2.py
    |-subpackage1
    |   |-__init__.py
    |   |-src
    |   |   |-__init__.py
    |   |   |-my_program.py
    |   |   |-functions.py
    |   |   |-...
    |
    |-tests
    |    |-a_tests.py
    |-subpackage2
    |    |-web-server.py
    |    |-API
    |    |    |-__init__.py
    |    |    |-REST.py
    |    |    |-...
package/subpackage2 needs to be able to call package/subpackage1/src/functions.py
package/tests calls both subpackages (using pytests).package/subpackage1/src/functions.py needs to be able to call other modules within subpackage1
I've seen this answer: https://stackoverflow.com/a/33195094 - which explains what I need to do (create a package), but it doesn't explain how to do it.
I can readily get the two scripts to call their component sub-packages using:
import subpackage1.src.my_program.py
(i.e. similar to the suggestions here) but then my_program.py fails with an ImportError: No module named 'functions'
So, what glue do I need to set this structure up?
If you want to import something from functions.py into my_program.py then in my_program.py you have to specify the absolute import path.
Let's say that functions.py contains following function:
def function1():
  print('foo bar')
Then, to import function1 from functions.py into my_program.py its contents should look like:
from subpackage1.src.functions import function1
function1()
                        So to solve this issue i Created a similar folder structure
/package
    |-script1.py
    |-subpackage1
    |   |-__init__.py
    |   |-src
    |   |   |-__init__.py
    |   |   |-functions.py
my script1.py file has
import subpackage1
import subpackage1.src
import subpackage1.src.functions as f
print(f.hello())
my functions.py file has
def hello():
    return "from the functions"
now from the package folder
i did
$ python script1.py
the script ran and output
from the functions
showed.
I am using python3
So am i missing something because its working on my system.
Note: i added three different imports to check for import errors there.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With