Python user site packages directory

Find the Location of Python site-packages Directory

How do I find the location of my Python site-packages directory? The “site-packages” directory is where third-party packages are installed for Python. In this article, we will explain different methods to find the location of the “site-packages” directory.

A quick way to find the “site-packages” directory is by using the site module. You can simply import the module and use the getsitepackages() function to get the “site-packages” directory. However, we will discuss more methods like, the sys module, the os module, and the distutils package with examples.

1. site Module to Find Directory of Python Site-Packages

The site module allows you to access the python interpreter and the installed packages, one of the functions provided by the site module is getsitepackages() , which returns a list of directories that contain the installed packages, including the “site-packages” directory.

See the following code example:

 # Import site module import site # Get the list of directories site_packages_dirs = site.getsitepackages() # Find the "site-packages" directory in the list for dir in site_packages_dirs: if dir.endswith("site-packages"): target_dir = dir break else: target_dir=None print(target_dir) 
 # Output: c:\Users\Ali\Desktop\SparkByExamples\env\Lib\site-packages 

There are two types of python “site-packages” directories. One is called the global site-packages directory and the virtual environment “site-packages”.

Читайте также:  Java array access exception

You can run the following command on your terminal to find the directory of python global site-packages.

 # Find Location of Global "site-packages" python -m site 
 # Output: c:\Users\Ali\AppData\Local\Programs\Python\Python311\Lib\site-packages 

This will return the location of the global directory of python “site-packages”. You can also add another parameter to get the location per user.

 #Find Location of Per-user "site-packages" python -m site --user-site 

2. sys Module – Python Site-Packages Directory

The sys module is another way to access various system-specific parameters and functions. One of the attributes provided by the sys module is path , which is a list of directories that Python searches for modules.

 # Find the "site-packages" directory in the "sys.path" list import sys # Iterate over the Directories for dir in sys.path: if dir.endswith("site-packages"): target_dir = dir else: target_dir = None print(target_dir) 
 # Output: c:\Users\Ali\Desktop\SparkByExamples\env\Lib\site-packages 

3. Using os Module

The os module is a built-in module in Python that provides a way to interact with the operating system. The os module provides several functions for navigating the file system and getting information about files and directories. One of these functions is listdir() which returns a list of the files and directories in a specified directory.

 # Using os to get the Location import os dir_path = os.path.dirname(os.__file__) + '/site-packages' print(dir_path) 
 # Output: C:\Users\Ali\AppData\Local\Programs\Python\Python311\Lib\site-packages 

4. distutils – Find Directory of “site-packages”

The distutils module in Python provides support for building and distributing Python modules. It includes a sysconfig module, which provides functions for retrieving configuration information about the Python installation.

 # distutils library to get the location of Python "site-packages" from distutils.sysconfig import get_python_lib site_packages_dir = get_python_lib() print(site_packages_dir) 
 # Output: c:\Users\Ali\Desktop\SparkByExamples\env\Lib\site-packages 

The sysconfig is also available is a standalone module, which you can use directly instead of importing it from the distutil .

 # Using the sysconfig module import sysconfig print(sysconfig.get_paths()) 

The location return by the sysconfig on Debian seems like to be not available, this is because when you install packages using pip, it will go into ‘dist-packages’ and not to ‘site-packages’.

5. Use Editor – The Optimal and Easy Way

If you are using a virtual environment for your project, you can find the python site packages in the editor. The editor maybe is of your choice. In my case, I am using VS code and my virtual environment is “env”. You can see the complete path to the “site-packages” directory.

find Python site-packages directory

6. Summary and Conclusion

In this article, we have learned how to find the location of the python “site-packages” directory. You have learned multiple ways to do this. If you are working in VS Code or any other editor along with a virtual environment, this directory is already available to you. Hope this article was helpful. Leave your questions in the comment section.

You may also like reading:

AlixaProDev

I am a software Engineer with extensive 4+ years of experience in Programming related content Creation.

Источник

site — Site-specific configuration hook¶

This module is automatically imported during initialization. The automatic import can be suppressed using the interpreter’s -S option.

Importing this module will append site-specific paths to the module search path and add a few builtins, unless -S was used. In that case, this module can be safely imported with no automatic modifications to the module search path or additions to the builtins. To explicitly trigger the usual site-specific additions, call the site.main() function.

Changed in version 3.3: Importing the module used to trigger paths manipulation even when using -S .

It starts by constructing up to four directories from a head and a tail part. For the head part, it uses sys.prefix and sys.exec_prefix ; empty heads are skipped. For the tail part, it uses the empty string and then lib/site-packages (on Windows) or lib/python X.Y /site-packages (on Unix and macOS). For each of the distinct head-tail combinations, it sees if it refers to an existing directory, and if so, adds it to sys.path and also inspects the newly added path for configuration files.

Changed in version 3.5: Support for the “site-python” directory has been removed.

If a file named “pyvenv.cfg” exists one directory above sys.executable, sys.prefix and sys.exec_prefix are set to that directory and it is also checked for site-packages (sys.base_prefix and sys.base_exec_prefix will always be the “real” prefixes of the Python installation). If “pyvenv.cfg” (a bootstrap configuration file) contains the key “include-system-site-packages” set to anything other than “true” (case-insensitive), the system-level prefixes will not be searched for site-packages; otherwise they will.

A path configuration file is a file whose name has the form name .pth and exists in one of the four directories mentioned above; its contents are additional items (one per line) to be added to sys.path . Non-existing items are never added to sys.path , and no check is made that the item refers to a directory rather than a file. No item is added to sys.path more than once. Blank lines and lines beginning with # are skipped. Lines starting with import (followed by space or tab) are executed.

An executable line in a .pth file is run at every Python startup, regardless of whether a particular module is actually going to be used. Its impact should thus be kept to a minimum. The primary intended purpose of executable lines is to make the corresponding module(s) importable (load 3rd-party import hooks, adjust PATH etc). Any other initialization is supposed to be done upon a module’s actual import, if and when it happens. Limiting a code chunk to a single line is a deliberate measure to discourage putting anything more complex here.

For example, suppose sys.prefix and sys.exec_prefix are set to /usr/local . The Python X.Y library is then installed in /usr/local/lib/python X.Y . Suppose this has a subdirectory /usr/local/lib/python X.Y /site-packages with three subsubdirectories, foo , bar and spam , and two path configuration files, foo.pth and bar.pth . Assume foo.pth contains the following:

# foo package configuration foo bar bletch
# bar package configuration bar

Источник

The Module Search Path

Chris Bailey

In this lesson, you’ll learn about the module search path. Continuing with the example from the previous lesson, take a look at what happens when Python executes the following statement:

>>> import mod >>> mod.a [100, 200, 300] >>> mod.s 'Computers are useless. They can only give you answers.' 

When the interpreter executes the above import statement, it searches for mod.py in a list of directories assembled from the following sources:

  • The directory from which the input script was run, or the current directory if the interpreter is being run interactively
  • The list of directories contained in the PYTHONPATH environment variable, if it is set. (The format for PYTHONPATH is OS-dependent but should mimic the PATH environment variable.)
  • An installation-dependent list of directories configured at the time Python is installed

The resulting search path is accessible in the Python variable sys.path , which is obtained from a module named sys :

>>> import sys >>> sys.path ['', '/Library/Frameworks/Python.framework/Versions/3.7/bin', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages'] 

Note: The exact contents of sys.path are installation-dependent. The above code block will almost certainly look slightly different on your computer. The operating system used in this lesson is macOS. If you would like to see what the path structure looks like in a Windows environment, check out the original article that this course is based on.

So, to ensure that your module is found, you need to do one of the following:

  • Put mod.py in the directory where the input script is located, or the current directory if interactive
  • Modify the PYTHONPATH environment variable to contain the directory where mod.py is located before starting the interpreter. Or put mod.py in one of the directories already contained in the PYTHONPATH variable.
  • Put mod.py in one of the installation-dependent directories, which you may or may not have write-access to, depending on the OS.

There is also one additional option: You can put the module file in any directory of your choice and then modify sys.path at run-time so that it contains that directory. For example, in this case, you could put mod.py in directory /Users/chris/ModulesAndPackages and then issue the following statements:

>>> sys.path.append(r'/Users/chris/ModulesAndPackages') >>> sys.path ['', '/Library/Frameworks/Python.framework/Versions/3.7/bin', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python37.zip', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/lib-dynload', '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages', '/Users/chris/ModulesAndPackages'] >>> import mod >>> mod.s 'Computers are useless. They can only give you answers.' 

Once you’ve imported a module, you can determine the location where it was found with the module’s __file__ attribute:

>>> import mod >>> mod.__file__ '/Users/chris/ModulesAndPackages/mod.py' >>> import re >>> re.__file__ '/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/re.py' 

The directory portion of __file__ should be one of the directories in sys.path .

Источник

Оцените статью