share
Stack OverflowHow to add to the PYTHONPATH in Windows, so it finds my modules/packages?
[+482] [24] darren
[2010-09-13 15:04:26]
[ python windows environment-variables pythonpath ]
[ https://stackoverflow.com/questions/3701646/how-to-add-to-the-pythonpath-in-windows-so-it-finds-my-modules-packages ]

I have a directory which hosts all of my Django apps (C:\My_Projects). I want to add this directory to my PYTHONPATH so I can call the apps directly.

I tried adding C:\My_Projects\; to my Windows Path variable from the Windows GUI (My Computer > Properties > Advanced System Settings > Environment Variables). But it still doesn't read the coltrane module and generates this error:

Error: No module named coltrane

for "no module named" error: stackoverflow.com/questions/23417941/… - JinSnow
(1) I used site module. - Zeinab Abbasimazar
if you want to run python in command prompt it is answered well here I hope this helps stackoverflow.com/a/54618199/8253662 - Mahesh Jamdade
"I want to add this directory to my PYTHONPATH so I can call the apps directly. I tried adding C:\My_Projects\; to my Windows Path variable" - well, yes, of course that doesn't work: the PATH variable is not the same as the PYTHONPATH variable. - Karl Knechtel
[+485] [2011-01-31 20:23:05] darren [ACCEPTED]

You know what has worked for me really well on windows.

My Computer > Properties > Advanced System Settings > Environment Variables >

Just add the path as C:\Python27 (or wherever you installed python)

OR

Then under system variables I create a new Variable called PythonPath. In this variable I have C:\Python27\Lib;C:\Python27\DLLs;C:\Python27\Lib\lib-tk;C:\other-folders-on-the-path

enter image description here

This is the best way that has worked for me which I hadn't found in any of the docs offered.

EDIT: For those who are not able to get it, Please add

C:\Python27;

along with it. Else it will never work.


(53) You probably want to add C:\Python27 in your path. - Wei Yang
@PiotrDobrogost that link is broken for me now. Is this the application you recommend: [patheditor2.codeplex.com/](patheditor2 at codeplex) - Steve Koch
(5) @SteveKoch I'm not sure — you would have to ask project's maintener. I no longer use Path Editor as I switched to much better Rapid Environment Editor - Piotr Dobrogost
(5) It's also important to add C:\Python27\Scripts to the path so that installed scripts can be run from the shell. - Tyler Brock
(6) Why would you put C:\Python27\Lib;C:\Python27\DLLs;C:\Python27\Lib\lib-tk in PYTHONPATH? Those are already configured. Directories for scripts go in the system PATH. Directories for libraries (that aren't installed to site-packages or the per-user site-packages) go in PYTHONPATH. - Eryk Sun
He probably did that because none of of it particularly clear or well organized in any of the documentation, or in any of the tutorials that I've found. It's all a bit too vague, which is strange considering how, back when I was a young chap and python was just getting started, python modeled itself as the ideal language for programming newbies.. - Andrew
(13) I had to include %PYTHONPATH% in my PATH as well. - gosr
(1) Remember restart your computer - Alberto Perez
(2) No need to restart computer, just need to open up a new command prompt and it should work. - neurotik
(1) Thanks darren.. I know this is an old thread but it helped me in setting up node js.. This worked.. I had Python 3.6 and by default it installs in Program Files. I tried installing it to Python36 after seeing your solution. It did not work. Then I uninstalled Python 3.6 and installed Python 2.7 to Python27 folder and it worked..I had to include %PYTHONPATH% in my PATH as well... Have you found out why this is so? - razor
(2) If you want to open this from the command line, rundll32.exe sysdm.cpl,EditEnvironmentVariables works. I put it in a batch file env.bat. - aschultz
for python3.8, Python38-32\Lib doesn't contain lib-tk. This means, isn't required to add lib-tk path in PYTHONPATH? - Innovator-programmer
1
[+139] [2014-01-29 13:55:24] Delicia Brummitt

Windows 7 Professional I Modified @mongoose_za's answer to make it easier to change the python version:

  1. [Right Click]Computer > Properties >Advanced System Settings > Environment Variables
  2. Click [New] under "System Variable"
  3. Variable Name: PY_HOME, Variable Value:C:\path\to\python\version enter image description here
  4. Click [OK]
  5. Locate the "Path" System variable and click [Edit]
  6. Add the following to the existing variable:

    %PY_HOME%;%PY_HOME%\Lib;%PY_HOME%\DLLs;%PY_HOME%\Lib\lib-tk; enter image description here

  7. Click [OK] to close all of the windows.

As a final sanity check open a command prompt and enter python. You should see

>python [whatever version you are using]

If you need to switch between versions, you only need to modify the PY_HOME variable to point to the proper directory. This is bit easier to manage if you need multiple python versions installed.


(5) Tried this and it worked... i would recommend anyone going through the same problem to try this. - Christopher M.
(2) Tried this, it didn't do anything at all. - GreySage
(1) I tried the accepted answer above and that didn't work so I would recommend this one. - mjwrazor
By "Variable Value:C:\path\to\python\version" do you mean the address of the directory that included python.exe? - Reihan_amn
(2) @Reihan_amn I mean the wrapping directory that contains the lib, bin, libexec, etc. Typically these directories are named Python[VERSION_NUMBER]/, but I have also seen python/[VERSION_NUMBER]. Hope this helps - Delicia Brummitt
(5) I tried this and it worked for me. I had to make one small adjustment which was to click New for each of these entries for Windows 10 when adding them to the PATH variable. %PY_HOME%;%PY_HOME%\Lib;%PY_HOME%\DLLs;%PY_HOME%\Lib\lib-tk; I also needed to add %PY_HOME%\Scripts so I had access to pip and the modules I install with pip such as pylint - Jose' Vargas
2
[+128] [2010-09-13 15:14:09] Yuval Adam

From Windows command line:

set PYTHONPATH=%PYTHONPATH%;C:\My_python_lib

To set the PYTHONPATH permanently, add the line to your autoexec.bat. Alternatively, if you edit the system variable through the System Properties, it will also be changed permanently.


(1) Worked but everytime I open dos I had to set the path. - darren
(9) I prefer to use set path=%PATH%;%PYTHONPATH%; - Mr Wednesday
(10) Dos and editing autoexec.bat..! Have we suddenly slipped back into the 90s? - C Mars
(12) Before this, do echo %PYTHONPATH% if this gives you a path go on, otherwise, do e.g. set PYTHONPATH=.;C:\My_python_lib If you don't, windows will expand %PYTHONPATH% to empty string as expected, it will keep it as %PYTHONPATH% in the PYTHONPATH and everything will break! Sounds crazy but thats how win7 cmd works... - ntg
(2) To make it permanent, use setx instead of set. - Amit Naidu
(2) Note that the syntax differs if using setx, per @AmitNaidu's suggestion - I think it would be setx PYTHONPATH %PYTHONPATH%;C:\My_python_lib or set PYTHONPATH .;C:\My_python_lib. And note that your path can't contain spaces (see e.g. stackoverflow.com/a/69246810/4659442) - philipnye
3
[+64] [2010-09-13 16:11:38] inspectorG4dget

These solutions work, but they work for your code ONLY on your machine. I would add a couple of lines to your code that look like this:

import sys
if "C:\\My_Python_Lib" not in sys.path:
    sys.path.append("C:\\My_Python_Lib")

That should take care of your problems


(6) Modifying sys.path like this is frowned upon and for good reasons. There are better ways of configuring sys.pathPYTHONPATH environment variable and .pth files. - Piotr Dobrogost
4
[+59] [2013-02-07 14:26:21] Paulino III

Just append your installation path (ex. C:\Python27\) to the PATH variable in System variables. Then close and open your command line and type python.


(64) This is answering a completely different question than the one OP was asking. - wpercy
(3) The question isn't about the PATH that DOS uses to find commands, but the Python path, i.e. sys.path in Python. In most operating systems, Python just uses the system environment variable PYTHONPATH, but Windows seems to be 'special'. - Michael Scheper
5
[+43] [2015-09-16 12:51:09] Mr. Polywhirl

Adding Python and PythonPath to the Windows environment:

  1. Open Explorer.
  2. Right-click 'Computer' in the Navigation Tree Panel on the left.
  3. Select 'Properties' at the bottom of the Context Menu.
  4. Select 'Advanced system settings'
  5. Click 'Environment Variables...' in the Advanced Tab
  6. Under 'System Variables':

    1. Add

      • PY_HOME

        C:\Python27
        
      • PYTHONPATH

        %PY_HOME%\Lib;%PY_HOME%\DLLs;%PY_HOME%\Lib\lib-tk;C:\another-library
        
    2. Append

      • path

        %PY_HOME%;%PY_HOME%\Scripts\
        

(4) This is the only solution that worked for me. Also, for those of you who do not have administrator rights, just follow the steps above under "User variables for [yourUsername]" and it will work just as well. - Fares K. A.
Python on Windows, appreciating node.js a little more right now - Eddie
6
[+29] [2019-02-28 20:59:34] Hamidreza

The easiest way to do that successfully, is to run the python installer again (after the first installation) and then:

  1. choose Modify.
  2. check the optional features which you want and click Next.
  3. here we go, in "Advanced Options" step you must see an option saying "Add Python to environment variables". Just check that option and click Install. 3rd step [1] When the installation is completed, python environment variables are added and you can easily use python everywhere.
[1] https://i.sstatic.net/HUTlE.png

Setting this variable globally through the Environment Variables settings is not recommended, as it may be used by any version of Python instead of the one that you intend to use. - Miroslav Avramov
Also, I tried this, does not work. Still not in my path. - Dave
7
[+19] [2013-06-18 18:41:03] Bamara Coulibaly

The easier way to set the path in python is : click start> My Computer >Properties > Advanced System Settings > Environment Variables > second windows >

enter image description here

select Path > Edit > and then add ";C:\Python27\;C:\Python27\Scripts\"

link :http://docs.python-guide.org/en/latest/starting/install/win/


changing system path changed nothing (deleting it too). But typing in admin cmd worked: ftype Python.File="C:\Python27\python.exe" "%1" %* - JinSnow
8
[+15] [2010-09-13 15:13:00] Tao

You need to add to your PYTHONPATH variable instead of Windows PATH variable.

http://docs.python.org/using/windows.html


9
[+15] [2013-02-01 23:31:55] brentlance

You can also add a .pth file containing the desired directory in either your c:\PythonX.X folder, or your \site-packages folder, which tends to be my preferred method when I'm developing a Python package.

See here [1] for more information.

[1] http://bob.ippoli.to/archives/2005/02/06/using-pth-files-for-python-development/

10
[+14] [2019-07-25 19:56:29] MWOJO

The PYTHONPATH environment variable is used by Python to specify a list of directories that modules can be imported from on Windows. When running, you can inspect the sys.path variable to see which directories will be searched when you import something.

To set this variable from the Command Prompt, use: set PYTHONPATH=list;of;paths.

To set this variable from PowerShell, use: $env:PYTHONPATH=’list;of;paths’ just before you launch Python.

Setting this variable globally through the Environment Variables settings is not recommended, as it may be used by any version of Python instead of the one that you intend to use. Read more in the Python on Windows FAQ docs [1].

[1] https://learn.microsoft.com/windows/python/faqs

11
[+12] [2017-03-28 14:28:27] Gajendra D Ambi
import sys
sys.path.append("path/to/Modules")
print sys.path

This won't persist over reboots or get translated to other files. It is however great if you don't want to make a permanent modification to your system.


(2) +1 for the ability to set paths are run time. while arguably "hacky", when writing a proof of concept or a one-off job, this is perfect and leaves the system unmodified. - Joshua Burns
I disagree that you only have to do this once. I find that the extra path does not persist past the kernal restarting - StackG
12
[+12] [2019-12-19 14:22:26] ojdo

This question needs a proper answer:

Just use the standard package site, which was made for this job!

and here is how (plagiating my own answer [1] to my own question on the very same topic):


  1. Open a Python prompt and type
>>> import site
>>> site.USER_SITE
'C:\\Users\\ojdo\\AppData\\Roaming\\Python\\Python37\\site-packages'
...

(Alternatively, call python -m site --user-site for the same effect.)

  1. Create this folder if it does not exist yet:
...
>>> import os
>>> os.makedirs(site.USER_SITE)
...

(Or, in Bash, your preferred variant of makedirs -p $(python -m site --user-site).)

  1. Create a file sitecustomize.py (with exactly this filename, or it won't work) in this folder containing the content of FIND_MY_PACKAGES, either manually or using something like the following code. Of course, you have to change C:\My_Projects to the correct path to your custom import location.
...
>>> FIND_MY_PACKAGES = """
import site
site.addsitedir(r'C:\My_Projects')
"""
>>> filename = os.path.join(site.USER_SITE, 'sitecustomize.py')
>>> with open(filename, 'w') as outfile:
...     print(FIND_MY_PACKAGES, file=outfile)

And the next time you start Python, C:\My_Projects is present in your sys.path, without having to touch system-wide settings. Bonus: the above steps work on Linux, too!


Why does this work?

From the documentation of standard library package site [2]:

[Then] an attempt is made to import a module named sitecustomize, which can perform arbitrary site-specific customizations. [...].

So if you create a module named sitecustomize anywhere in PYTHONPATH, package site will execute it at Python startup. And by calling site.addsitedir, the sys.path can be safely extended to your liking.

[1] https://stackoverflow.com/a/17811151/2375855
[2] https://docs.python.org/3/library/site.html#

(1) This is the way to go it seems. A good, cross-platform and long term solution. Great one! - Pramesh Bajracharya
Many thanks for this, this is the only way I've found to make this work for VS Community 2019! - Soup Endless
I followed all the steps,It works, but I must launch sitecustomize.py every time. - Jack Griffin
@JackGriffin: which file have you placed where? I just verified the steps in Windows 10 under Python 3.8.8. Inside my "My_Projects" folder, I placed a dummypackage.py with a function definition. And within a fresh (I)Python shell, import dummypackage succeeds immediately, without manual intervention. Check variable site.USER_SITE_ENABLED (must be True); maybe it is disabled in your environment. - ojdo
@ojdo: I have Python 3.9.5 on Kubuntu 21.04.The folder I want to 'be public', so to speak, contains a filebox.py file. I followed your instructions, got site.USERSITE path, created customizesite.py there, added the folder as you wrote.Launched customize.py. The folder is in sys.path.**>>>import filebox** : no errors. Closed python prompt and launched it again.The folder is no more in sys.path. In the console, if folder path is the working directory >>> import filebox works. Otherwise I got a ModuleNotFoundError: No module named 'filebox'. - Jack Griffin
There is no site.USER_SITE_ENABLED on my system, but one site.ENABLE_USER_SITE.Guess they change it in this version.Its value is True.You stated that this works on Linux too.It does, but it's only temporary, at least on my system. - Jack Griffin
I just verified the steps above on Linux (EndeavourOS, Python 3.9.9, but that should not make any difference). Please note that the file sitecustomize.py must be placed in the directory indicated by site.USER_SITE! Whatever code you place in there will be executed. To verify that the file was executed, you can check the contents of sys.path. I find the .../my_projects path appended to this list in each (I)Python session. You don't use any virtual environments, do you? - ojdo
@JackGriffin: the filename must be exactly sitecustomize.py (or usercustomize.py), but not anything else. - ojdo
@ojdo in the previous comment I wrote the name incorrectly.The file I created is actually sitecustomize.py.I appreciate your help.Will try again all ASAP. - Jack Griffin
@JackGriffin, ok, then it is puzzling to me as to why these steps do not work for you. I have been using them since 2015 on various Windows and Linux environments without issue. - ojdo
13
[+6] [2015-08-29 20:58:06] Octane

In Python 3.4 on windows it worked when I added it to PATH enviroment variable instead of PYTHONPATH. Like if you have installed Python 3.4 in D:\Programming\Python34 then add this at the end of your PATH environment variable

;D:\Programming\Python34

Close and reopen command prompt and execute 'python'. It will open the python shell. This also fixed my Sublime 3 issue of 'python is not recognized as an internal or external command'.


Yeah, this was the only solution to me (Python 3.x). I really have no idea why %PYTHONPATH% isn't resolved on Path parameter. Call the Scripts' folder wasn't necessary. - Davidson Lima
14
[+6] [2016-06-29 00:43:41] Pavan Ebbadi

The python 2.X paths can be set from few of the above instructions. Python 3 by default will be installed in C:\Users\\AppData\Local\Programs\Python\Python35-32\ So this path has to be added to Path variable in windows environment.


15
[+5] [2013-03-13 07:41:54] Brajendu Kumar Das

To augment PYTHONPATH, run regedit and navigate to KEY_LOCAL_MACHINE \SOFTWARE\Python\PythonCore and then select the folder for the python version you wish to use. Inside this is a folder labelled PythonPath, with one entry that specifies the paths where the default install stores modules. Right-click on PythonPath and choose to create a new key. You may want to name the key after the project whose module locations it will specify; this way, you can easily compartmentalize and track your path modifications.

thanks


16
[+5] [2019-08-05 08:10:19] Ravi Shankar Kota

I got it worked in Windows 10 by following below steps.

Under environment variables, you should only add it under PATH of "System Variables" and not under "User Variables". This is a great confusion and eats time if we miss it.

Also, just try to navigate to the path where you got Python installed in your machine and add it to PATH. This just works and no need to add any other thing in my case.I added just below path and it worked.

C:\Users\YourUserName\AppData\Local\Programs\Python\Python37-32

Most important, close command prompt, re-open and then re-try typing "python" to see the version details. You need to restart command prompt to see the version after setting up the path in environment variables.

After restarting, you should be able to see the python prompt and below info when typing python in command prompt:

On typing python in command prompt


17
[+3] [2013-11-04 09:01:17] Andreas Bergström

For anyone trying to achieve this with Python 3.3+, the Windows installer now includes an option to add python.exe to the system search path. Read more in the docs [1].

[1] http://docs.python.org/3.3/using/windows.html#finding-the-python-executable

18
[+2] [2012-11-30 18:14:54] Dan Randolph

This PYTHONPATH variable needs to be set for ArcPY when ArcGIS Desktop is installed.

PYTHONPATH=C:\arcgis\bin (your ArcGIS home bin)

For some reason it never was set when I used the installer on a Windows 7 32-bit system.


19
[+1] [2016-03-28 19:13:07] sandatomo

Maybe a little late, but this is how you add the path to the Windows Environment Variables.

  1. Go to the Environment Variables tab, you do this by pressing Windows key + Pausa inter.

  2. Go to Advanced System Settings.

  3. Click on Environment Variables.

  4. On the lower window search for the 'Path' value.

  5. Select it

  6. Click on Edit

  7. In the end of the line add your instalation folder and the route to 'Scripts' folder.

  8. Click ok, aceptar etc.

You're done, enter cmd and write python from any location of your drive, it should enter the Python program.

Example with my pc (I have Python34)

EXISTING_LINES;C:\Python34;C:\Python34\Scripts\

Hope it helps.

Greetings from Bogotá


(2) It is indeed a little late, since this answer was already provided five years ago :-) It's also not really what is asked here (since the question is about PYTHONPATH, not PATH)... - Martin Tournoij
(2) What is Pausa inter.? - Ringo
20
[+1] [2019-05-09 16:30:49] Abdur Rahman

You can set the path variable for easily by command prompt.

  1. Open run and write cmd

  2. In the command window write the following: set path=%path%;C:\python36

  3. press enter.
  4. to check write python and enter. You will see the python version as shown in the picture.

enter image description here


21
[+1] [2019-10-16 16:45:50] Michael Scheper

While this question is about the 'real' Python, it did come up in a websearch for 'Iron Python PYTHONPATH'. For Iron Python users as confused as I was: It turns out that Iron Python looks for an environment variable called IRONPYTHONPATH.

Linux/Mac/POSIX users: Don't forget that not only does Windows use \ as path separators, but it also uses ; as path delimiters, not :.


22
[0] [2022-07-05 16:03:11] Akaisteph7

To make sure Python can find code based on the directory you are executing this code from, if not already there, add to your system environment variable: key PYTHONPATH, value ..


23
[0] [2023-11-03 07:44:03] nofoobar

Before adding a path, its necessary to do some debugging, what path already exists.

Let's say you have to execute python src/main.py

Put the below lines in main.py file and notice what paths python interpreter is looking at:

import sys
print("paths are", sys.path)

If you don't find the path that you need and want to add your path. Follow the below suggestions.

  1. First take note of what PYTHONPATH is already there. This is important if something goes terribly wrong. echo %PYTHONPATH%

  2. Set a temporary python path. Make sure to use CMD and not powershell.

    set PYTHONPATH=%PYTHONPATH%;C:\Users\mentorconnect\

  3. Start new terminal, start virtual environment and check if sys.path worked?


24