| """Add Python to the search path on Windows |
| |
| This is a simple script to add Python to the Windows search path. It |
| modifies the current user (HKCU) tree of the registry. |
| |
| Copyright (c) 2008 by Christian Heimes <christian@cheimes.de> |
| Licensed to PSF under a Contributor Agreement. |
| """ |
| |
| import sys |
| import site |
| import os |
| import winreg |
| |
| HKCU = winreg.HKEY_CURRENT_USER |
| ENV = "Environment" |
| PATH = "PATH" |
| DEFAULT = "%PATH%" |
| |
| def modify(): |
| pythonpath = os.path.dirname(os.path.normpath(sys.executable)) |
| scripts = os.path.join(pythonpath, "Scripts") |
| appdata = os.environ["APPDATA"] |
| if hasattr(site, "USER_SITE"): |
| usersite = site.USER_SITE.replace(appdata, "%APPDATA%") |
| userpath = os.path.dirname(usersite) |
| userscripts = os.path.join(userpath, "Scripts") |
| else: |
| userscripts = None |
| |
| with winreg.CreateKey(HKCU, ENV) as key: |
| try: |
| envpath = winreg.QueryValueEx(key, PATH)[0] |
| except OSError: |
| envpath = DEFAULT |
| |
| paths = [envpath] |
| for path in (pythonpath, scripts, userscripts): |
| if path and path not in envpath and os.path.isdir(path): |
| paths.append(path) |
| |
| envpath = os.pathsep.join(paths) |
| winreg.SetValueEx(key, PATH, 0, winreg.REG_EXPAND_SZ, envpath) |
| return paths, envpath |
| |
| def main(): |
| paths, envpath = modify() |
| if len(paths) > 1: |
| print("Path(s) added:") |
| print('\n'.join(paths[1:])) |
| else: |
| print("No path was added") |
| print("\nPATH is now:\n%s\n" % envpath) |
| print("Expanded:") |
| print(winreg.ExpandEnvironmentStrings(envpath)) |
| |
| if __name__ == '__main__': |
| main() |