Home | History | Annotate | Download | only in scripts
      1 """Add Python to the search path on Windows
      2 
      3 This is a simple script to add Python to the Windows search path. It
      4 modifies the current user (HKCU) tree of the registry.
      5 
      6 Copyright (c) 2008 by Christian Heimes <christian (at] cheimes.de>
      7 Licensed to PSF under a Contributor Agreement.
      8 """
      9 
     10 import sys
     11 import site
     12 import os
     13 import _winreg
     14 
     15 HKCU = _winreg.HKEY_CURRENT_USER
     16 ENV = "Environment"
     17 PATH = "PATH"
     18 DEFAULT = u"%PATH%"
     19 
     20 def modify():
     21     pythonpath = os.path.dirname(os.path.normpath(sys.executable))
     22     scripts = os.path.join(pythonpath, "Scripts")
     23     appdata = os.environ["APPDATA"]
     24     if hasattr(site, "USER_SITE"):
     25         userpath = site.USER_SITE.replace(appdata, "%APPDATA%")
     26         userscripts = os.path.join(userpath, "Scripts")
     27     else:
     28         userscripts = None
     29 
     30     with _winreg.CreateKey(HKCU, ENV) as key:
     31         try:
     32             envpath = _winreg.QueryValueEx(key, PATH)[0]
     33         except WindowsError:
     34             envpath = DEFAULT
     35 
     36         paths = [envpath]
     37         for path in (pythonpath, scripts, userscripts):
     38             if path and path not in envpath and os.path.isdir(path):
     39                 paths.append(path)
     40 
     41         envpath = os.pathsep.join(paths)
     42         _winreg.SetValueEx(key, PATH, 0, _winreg.REG_EXPAND_SZ, envpath)
     43         return paths, envpath
     44 
     45 def main():
     46     paths, envpath = modify()
     47     if len(paths) > 1:
     48         print "Path(s) added:"
     49         print '\n'.join(paths[1:])
     50     else:
     51         print "No path was added"
     52     print "\nPATH is now:\n%s\n" % envpath
     53     print "Expanded:"
     54     print _winreg.ExpandEnvironmentStrings(envpath)
     55 
     56 if __name__ == '__main__':
     57     main()
     58