annotate Tools/scripts/win_add2path.py @ 87690:66c1c9f32567 default tip

Add use_weakref option to functools.lru_cache The use_weakref option makes lru_cache create weak references to the function arguments when creating the cache key, which prevents them from staying in the memory forever even after all other references to them are gone. This is a proof of concept for http://bugs.python.org/issue19859
author Radomir Dopieralski <devel@sheep.art.pl>
date Tue, 03 Dec 2013 16:02:48 +0100
parents bb94f6222fef
children
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
1 """Add Python to the search path on Windows
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
2
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
3 This is a simple script to add Python to the Windows search path. It
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
4 modifies the current user (HKCU) tree of the registry.
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
5
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
6 Copyright (c) 2008 by Christian Heimes <christian@cheimes.de>
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
7 Licensed to PSF under a Contributor Agreement.
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
8 """
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
9
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
10 import sys
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
11 import site
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
12 import os
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 44748
diff changeset
13 import winreg
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
14
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 44748
diff changeset
15 HKCU = winreg.HKEY_CURRENT_USER
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
16 ENV = "Environment"
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
17 PATH = "PATH"
63627
593d6417edf1 Fix unicode literal.
Georg Brandl <georg@python.org>
parents: 57147
diff changeset
18 DEFAULT = "%PATH%"
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
19
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
20 def modify():
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
21 pythonpath = os.path.dirname(os.path.normpath(sys.executable))
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
22 scripts = os.path.join(pythonpath, "Scripts")
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
23 appdata = os.environ["APPDATA"]
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
24 if hasattr(site, "USER_SITE"):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
25 userpath = site.USER_SITE.replace(appdata, "%APPDATA%")
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
26 userscripts = os.path.join(userpath, "Scripts")
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
27 else:
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
28 userscripts = None
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
29
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 44748
diff changeset
30 with winreg.CreateKey(HKCU, ENV) as key:
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
31 try:
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 44748
diff changeset
32 envpath = winreg.QueryValueEx(key, PATH)[0]
80944
bb94f6222fef Issue #16719: Get rid of WindowsError. Use OSError instead
Andrew Svetlov <andrew.svetlov@gmail.com>
parents: 63627
diff changeset
33 except OSError:
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
34 envpath = DEFAULT
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
35
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
36 paths = [envpath]
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
37 for path in (pythonpath, scripts, userscripts):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
38 if path and path not in envpath and os.path.isdir(path):
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
39 paths.append(path)
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
40
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
41 envpath = os.pathsep.join(paths)
47254
1546c1fb8f82 #2879: rename _winreg to winreg.
Georg Brandl <georg@python.org>
parents: 44748
diff changeset
42 winreg.SetValueEx(key, PATH, 0, winreg.REG_EXPAND_SZ, envpath)
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
43 return paths, envpath
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
44
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
45 def main():
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
46 paths, envpath = modify()
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
47 if len(paths) > 1:
57147
48989ecff804 Merged revisions 76158 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
48 print("Path(s) added:")
48989ecff804 Merged revisions 76158 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
49 print('\n'.join(paths[1:]))
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
50 else:
57147
48989ecff804 Merged revisions 76158 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
51 print("No path was added")
48989ecff804 Merged revisions 76158 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
52 print("\nPATH is now:\n%s\n" % envpath)
48989ecff804 Merged revisions 76158 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
53 print("Expanded:")
48989ecff804 Merged revisions 76158 via svnmerge from
Benjamin Peterson <benjamin@python.org>
parents: 47254
diff changeset
54 print(winreg.ExpandEnvironmentStrings(envpath))
44748
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
55
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
56 if __name__ == '__main__':
4a67673e3481 Merged revisions 60043-60052 via svnmerge from
Christian Heimes <christian@cheimes.de>
parents:
diff changeset
57 main()