annotate Tools/scripts/win_add2path.py @ 80661:94de77bd0b4b 2.7

Issue #16194: document imp.load_dynamic problems when read several extension modules from the same binary object file.
author Andrew Svetlov <andrew.svetlov@gmail.com>
date Thu, 29 Nov 2012 19:51:28 +0200
parents 2946020560e7
children 1546c1fb8f82
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
44743
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
1 """Add Python to the search path on Windows
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
2
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
3 This is a simple script to add Python to the Windows search path. It
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
4 modifies the current user (HKCU) tree of the registry.
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
5
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
6 Copyright (c) 2008 by Christian Heimes <christian@cheimes.de>
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
7 Licensed to PSF under a Contributor Agreement.
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
8 """
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
9
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
10 import sys
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
11 import site
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
12 import os
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
13 import _winreg
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
14
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
15 HKCU = _winreg.HKEY_CURRENT_USER
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
16 ENV = "Environment"
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
17 PATH = "PATH"
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
18 DEFAULT = u"%PATH%"
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
19
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
20 def modify():
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
21 pythonpath = os.path.dirname(os.path.normpath(sys.executable))
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
22 scripts = os.path.join(pythonpath, "Scripts")
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
23 appdata = os.environ["APPDATA"]
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
24 if hasattr(site, "USER_SITE"):
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
25 userpath = site.USER_SITE.replace(appdata, "%APPDATA%")
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
26 userscripts = os.path.join(userpath, "Scripts")
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
27 else:
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
28 userscripts = None
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
29
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
30 with _winreg.CreateKey(HKCU, ENV) as key:
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
31 try:
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
32 envpath = _winreg.QueryValueEx(key, PATH)[0]
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
33 except WindowsError:
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
34 envpath = DEFAULT
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
35
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
36 paths = [envpath]
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
37 for path in (pythonpath, scripts, userscripts):
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
38 if path and path not in envpath and os.path.isdir(path):
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
39 paths.append(path)
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
40
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
41 envpath = os.pathsep.join(paths)
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
42 _winreg.SetValueEx(key, PATH, 0, _winreg.REG_EXPAND_SZ, envpath)
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
43 return paths, envpath
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
44
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
45 def main():
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
46 paths, envpath = modify()
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
47 if len(paths) > 1:
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
48 print "Path(s) added:"
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
49 print '\n'.join(paths[1:])
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
50 else:
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
51 print "No path was added"
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
52 print "\nPATH is now:\n%s\n" % envpath
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
53 print "Expanded:"
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
54 print _winreg.ExpandEnvironmentStrings(envpath)
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
55
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
56 if __name__ == '__main__':
2946020560e7 Added win_add2path.py to Tools/scripts/
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
57 main()