Mercurial > cpython-lru_cache-weakref
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 |
| 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 | 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() |
