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