Python Module Import Error for One User But Not the Other

Python module Import error for one user but not the other

Ran chmod 755 on all directories in python path.

Non-root user was able to execute script after this.

Unable to import a module that is definitely installed

In my case, it is permission problem. The package was somehow installed with root rw permission only, other user just cannot rw to it!

How to fix ImportError: No module named ... error in Python?

Python does not add the current directory to sys.path, but rather the directory that the script is in. Add /home/bodacydo/work/project to either sys.path or $PYTHONPATH.

Python error ImportError: No module named

Based on your comments to orip's post, I guess this is what happened:

  1. You edited on windows.
  2. The windows editor added something non-printing, perhaps a carriage-return (end-of-line in Windows is CR/LF; in unix it is LF only), or perhaps a CTRL-Z (windows end-of-file).
  3. You used WinSCP to copy the file to your unix box.
  4. WinSCP thought: "This has something that's not basic text; I'll put a .bin extension to indicate binary data."
  5. The missing (now called means python doesn't understand toolkit as a package.
  6. You create in the appropriate directory and everything works... ?

ModuleNotFoundError' when trying to import module from imported package

FIRST, if you want to be able to access from AND from, you need to properly setup your files as packages and modules.

Packages are a way of structuring Python’s module namespace by using
“dotted module names”. For example, the module name A.B designates a
submodule named B in a package named A.


When importing the package, Python searches through the directories on
sys.path looking for the package subdirectory.

The files are required to make Python treat the
directories as containing packages; this is done to prevent
directories with a common name, such as string, from unintentionally
hiding valid modules that occur later on the module search path.

You need to set it up to something like this:

|- Mans
|- MansTest
|- SoftLib
|- Soft
|- SoftWork
|- Unittests

SECOND, for the "ModuleNotFoundError: No module named 'Soft'" error caused by from ...Mans import man1 in, the documented solution to that is to add to sys.path since Mans is outside the MansTest package. See The Module Search Path from the Python documentation. But if you don't want to modify sys.path directly, you can also modify PYTHONPATH:

sys.path is initialized from these locations:

  • The directory containing the input script (or the current directory when no file is specified).
  • PYTHONPATH (a list of directory names, with the same syntax as the shell variable PATH).
  • The installation-dependent default.

THIRD, for from ...MansTest.SoftLib import Soft which you said "was to facilitate the aforementioned import statement in", that's now how imports work. If you want to import Soft.SoftLib in, you have to setup to find Soft.SoftLib and import it there directly.

With that said, here's how I got it to work.

from Soft.SoftWork.manModules import *
# no change to import statement but need to add Soft to PYTHONPATH

def foo():
print("called foo in")
print("foo call module1 from manModules: " + module1())

# no need for "from ...MansTest.SoftLib import Soft" to facilitate importing..
from ...Mans import man1

def module1():
return "module1 in manModules"

Terminal output:

$ python3 -m man.MansTest.Unittests.man1test
Traceback (most recent call last):
from ...Mans import man1
File "/temp/man/Mans/", line 2, in <module>
from Soft.SoftWork.manModules import *
ModuleNotFoundError: No module named 'Soft'

$ PYTHONPATH=$PYTHONPATH:/temp/man/MansTest/SoftLib
$ python3 -m man.MansTest.Unittests.man1test
called foo in
foo called module1 from manModules: module1 in manModules

As a suggestion, maybe re-think the purpose of those SoftLib files. Is it some sort of "bridge" between and The way your files are setup right now, I don't think it's going to work as you expect it to be. Also, it's a bit confusing for the code-under-test ( to be importing stuff from under the test folder (MansTest).

Can't import my own modules in Python

In your particular case it looks like you're trying to import SomeObject from the and scripts. From, do

import SomeObject

since it is in the same folder. For, do

from ..myapp import SomeObject

However, this will work only if you are importing TestCase from the package. If you want to directly run python, you would have to mess with your path. This can be done within Python:

import sys
from myapp import SomeObject

though that is generally not recommended.

In general, if you want other people to use your Python package, you should use distutils to create a setup script. That way, anyone can install your package easily using a command like python install and it will be available everywhere on their machine. If you're serious about the package, you could even add it to the Python Package Index, PyPI.

Trouble importing a module that imports a module

The problem comes down to understanding the basics of the import system and the PYTHONPATH.

When you try to import a module (import module_a), Python will search in order in every directory listed in sys.path. If a directory matches the name (module_a)1, then it runs the file is such exist.

When you get an [], it means that there is no directory in sys.path containing a directory with the name asked.

You said for your tests you did something like sys.path.insert(0, "some/path/"), but it is not a solution, just a broken fix.

What you should do is set your PYTHONPATH environment variable to contain the directory where your modules are located, Project-root/src in your case. That way, no need to ever use sys.path.insert, or fiddle with relative/absolute paths in import statements.

When you create your new environment, just set your environment variable PYTHONPATH to include Project-root/src and you are done. This is how installing regular Python modules (libraries) work : they are all put into a directory in site-packages.

1: this changed since old Python versions, it used to be required for the directory to contain an file

Python - Module Not Found

All modules in Python have to have a certain directory structure. You can find details here.

Create an empty file called under the model directory, such that your directory structure would look something like that:

└── project
└── src
└── model

Also in your file change the import statement to the following:

from model.order import SellOrder

That should fix it

P.S.: If you are placing your model directory in some other location (not in the same directory branch), you will have to modify the python path using sys.path.

Relative imports - ModuleNotFoundError: No module named x

As was stated in the comments to the original post, this seemed to be an issue with the python interpreter I was using for whatever reason, and not something wrong with the python scripts. I switched over from the WinPython bundle to the official python 3.6 from and it worked just fine. thanks for the help everyone :)

Related Topics

Leave a reply