Difference between $PATH, sys.path and os.environ

2020-03-17 04:03发布

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.

标签: python-3.x
2条回答
够拽才男人
2楼-- · 2020-03-17 04:50

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

查看更多
做自己的国王
3楼-- · 2020-03-17 04:55

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.

查看更多
登录 后发表回答