What is the difference between $PATH variable, sys.path and os.environ? I understand that they both serve as paths where python searches packages. But it'd be nice to have more elaborate response.
Just a working case from my practice is when I used the script with only os.environ before import on Ubuntu 16.04 I got ImportError: No module named XXX
. At the same time on MacOS it worked well. After I added sys.path on Ubuntu I could get import module well.
Thanks for the explanation at Advance.
This is actually more complicated than it would seem. It's unclear by the question if you understand the Linux/MacOS $PATH environment variable. Lets start there. The $PATH variable (in Python you're able to get this from os.environ) denotes the current users $PATH variable as defined in various BaSH profile and environment files. It typically contains things like "/usr/bin" and other places where programs are installed. For example when you type "ls" the interpreter goes and searches the PATH for programs named "ls". I've included additional reading below.
sys.path on the other hand is constructed by Python on import based on a number of things. The first sentence in the help page is as follows. "A list of strings that specifies the search path for modules. Initialized from the environment variable PYTHONPATH, plus an installation-dependent default." The installation-dependent portion typically defines the installation location of Python site packages. $PYTHONPATH is another environment variable which can be added to facilitate the module search location and can be set the same way the system $PATH can
Typically if you have non-installed sources (ie outside the site-packages directory) you typically need to manipulate sys.path either directly or through the PYTHONPATH so the interpreter knows where to find your modules. Alternatively, you could use .pth files to manipulate the module search path as well
This is just a basic overview, I hope you read the docs for better understanding
Sources
sys.path
Is a list of strings that specifies the search path for modules. Initialized from the environment variable PYTHONPATH, plus an installation-dependent default.
os.environ
Is a mapping object representing the string environment. For example, environ['HOME'] is the pathname of your home directory (on some platforms), and is equivalent to getenv("HOME") in C.
Environment variable PATH
Specifies a set of directories where executable programs are located. In general, each executing process or user session has its own PATH setting.