Permanently add a directory to PYTHONPATH?
To permanently add a directory to PYTHONPATH in Linux/macOS, place this line in your shell startup file (i.e. ~/.bashrc, ~/.zshrc):
On Windows, use the setx command in your terminal:
Restart your shell to see the changes. This will expand your PYTHONPATH to include the specified directory, and Python will subsequently search in this directory when you import modules.
Ensuring Persistence Across Sessions
The additions to PYTHONPATH need to persist across multiple terminal sessions, for that, the export command needs to be placed in a startup file like ~/.bashrc (bash) or ~/.zshrc (Zsh). In a Unix-based system, you can opt to modify ~/.profile file or any other shell-specific startup scripts. On Windows, the setx command makes changes directly to the system's environmental variables, persisting these changes even after a reboot.
Making Use of .pth Files for an Organized Approach
Python provides a method to segregate your path additions using .pth files in the site-packages directory or user-site directories. You can find the path to user-site directory using:
Inside a .pth file, add full path of directories (one per line) you want to include in PYTHONPATH. Compared to editing bash profiles, this method isolates Python-specific changes within the Python's own environment.
Procedural Precautions
While modifications to PYTHONPATH provide a way to make directories available across scripts, do avoid adding too randomly. Overloading the PYTHONPATH may lead to conflicts between module names, or unforeseen behavior in scripts. Always prefer utilizing virtual environments for project-specific dependencies.
Activating Changes Along the Way
Both editing the shell configuration files and .pth files require restart of your shell or system reboot for changes to take effect. Remember to either close and open your shell or reboot your system whenever you make changes to PYTHONPATH.
Temporary vs Permanent: Know the Difference
Using sys.path.append('/my/new/path') in your scripts only modifies the path for that Python session and is not a permanent solution. It's like a temporary pass into your module party, expires when the party's over.
Platform Specific Tips
For Windows users, the location of the site-packages directory may vary, always refer to the Python documentation of your installed version. Mac users, note that changes to ~/.bash_profile will be recognized only in new terminal sessions, not existing ones.
Up-to-Date Solutions
As Python evolves, there could be changes to how the environment variables are interpretation in newer version. Always check the Python documentation to ensure your export commands conform to the latest syntax.
Was this article helpful?