|
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@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() |