'ImportError: No module named <module name> for local module imports in Python

I am very new to Python and I have the following structure for a project:

    server/
        ├── config/
        │   ├── __init__.py
        │   ├── application.py
        │   ├── dev.py
        │   └── qa.py
        ├── lib/
        │   ├── __init__.py
        │   ├── redisdb.py
        │   ├── logger.py
        │   └── geo.py
        └── scripts/
            ├── __init__.py
            ├── my_first_script.py
            └── my_second_script.py

and in my_first_script.py file, I have the following code:

import pickle
from lib.redisdb import r
import re
import config.application as appconf

print( appconf.DOCUMENT_ENDPOINT )

partnerData = pickle.loads(r.get("partner_date_all"))

print( len(partnerData) )

When I run this code in the terminal using the command

python server/scripts/my_first_script.py

I am getting the following error:

Traceback (most recent call last):
  File "my_first_script.py", line 3, in <module>
    from lib.redisdb import r
ImportError: No module named lib.redisdb

I am using Python 2.7 version here. When I checked with Python 3 also, I have the same error. Now how can I execute this file? If my code doesn't have imports from the other local modules, everything works just fine.



Solution 1:[1]

Your modules are all siblings and you didn't not declare a parent package.

You could modify your structure this way so your modules can know each other.

server/ (assuming this is your project root)
    server/ (assuming you want to call your package "server")
        ??? __init__.py
        ??? server.py (your package entry point)
        ??? config/
        ?   ??? __init__.py
        ?   ??? application.py
        ?   ??? dev.py
        ?   ??? qa.py
        ??? lib/
        ?   ??? __init__.py
        ?   ??? redisdb.py
        ?   ??? logger.py
        ?   ??? geo.py
        ??? scripts/
            ??? __init__.py
            ??? my_first_script.py
            ??? my_second_script.py

And now your imports can refer to the parent package:

for example:

# my_first_script.py
from server.config import application

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 Peterrabbit