Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python package import from parent directory

People also ask

How do I reference a parent directory in Python?

Using os.os. path. abspath() can be used to get the parent directory. This method is used to get the normalized version of the path.

How do you import a package in Python?

Importing module from a package We can import modules from packages using the dot (.) operator. Now, if this module contains a function named select_difficulty() , we must use the full name to reference it. Now we can directly call this function.

How do you use relative import in Python?

Relative imports use dot(.) notation to specify a location. A single dot specifies that the module is in the current directory, two dots indicate that the module is in its parent directory of the current location and three dots indicate that it is in the grandparent directory and so on.


It all depends on which script you run. That script's path will be added to python's search path automatically.

Make it the following structure:

TestApp/
TestApp/README
TestApp/LICENSE
TestApp/setup.py
TestApp/run_test.py
TestApp/testapp/__init__.py
TestApp/testapp/testmsg.py
TestApp/testapp/sub/
TestApp/testapp/sub/__init__.py
TestApp/testapp/sub/testprinter.py

Then run TestApp/run_test.py first:

from testapp.sub.testprinter import functest ; functest()

Then TestApp/testapp/sub/testprinter.py could do:

from testapp.testmsg import MSG
print("The message is: {0}".format(testmsg.MSG))

More good hints here;


Use relative import like below

from .. import testmsg

For people who still have this same problem. This is how I solve mine:

import unittest 
import sys
import os

sys.path.append(os.getcwd() + '/..')

from my_module.calc import *

This question has the answer - dynamic importing:

How to import a python file in a parent directory

import sys
sys.path.append(path_to_parent)
import parent.file1

Here's something I made to import anything. Of course, you have to still copy this script around to local directories, import it, and use the path you want.

import sys
import os

# a function that can be used to import a python module from anywhere - even parent directories
def use(path):
    scriptDirectory = os.path.dirname(sys.argv[0])  # this is necessary to allow drag and drop (over the script) to work
    importPath = os.path.dirname(path)
    importModule = os.path.basename(path)
    sys.path.append(scriptDirectory+"\\"+importPath)        # Effing mess you have to go through to get python to import from a parent directory

    module = __import__(importModule)
    for attr in dir(module):
        if not attr.startswith('_'):
            __builtins__[attr] = getattr(module, attr)