Mr_Pouet
Mr_Pouet

Reputation: 4280

Python 2.7 : Import a module situated in a subdirectory from a different subdirectory

Here's my code configuration:

__init__py
./module_1/foo.py
./module_1/__init__.py
./module_2/bar.py
./module_2/__init__.py

My goal is to be able to import the foo module from bar.py, but I'm getting quite confused on how to do it.

Something such as:

from ..module_1.foo import *

Will raise the following error:

ValueError: Attempted relative import in non-package

EDIT:

Ideally I'd like to be able to run my script in the following fashion:

python ./module1/foo.py

Upvotes: 0

Views: 101

Answers (1)

dpmcmlxxvi
dpmcmlxxvi

Reputation: 1302

You haven't shown how you are invoking the script, but you need to ensure that your scripts are actually packages in your python path. That's basically what the error message is telling you, you were trying to import a "non-package". You probably don't have your top-level in the python path. For example ...

If your top-level module is called app and your configuration is

<path-to-app>/app/__init__py
<path-to-app>/app/module_1/foo.py
<path-to-app>/app/module_1/__init__.py
<path-to-app>/app/module_2/bar.py
<path-to-app>/app/module_2/__init__.py

You can run your script as follows.

cd <path-to-app>
PYTHONPATH=$PWD python -m app.module_2.bar

Works for me.

Upvotes: 1

Related Questions