pystand 2.27__tar.gz → 2.28__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {pystand-2.27/pystand.egg-info → pystand-2.28}/PKG-INFO +28 -25
- {pystand-2.27 → pystand-2.28}/README.md +27 -23
- {pystand-2.27 → pystand-2.28}/pyproject.toml +0 -1
- {pystand-2.27 → pystand-2.28/pystand.egg-info}/PKG-INFO +28 -25
- {pystand-2.27 → pystand-2.28}/pystand.egg-info/requires.txt +0 -1
- {pystand-2.27 → pystand-2.28}/pystand.py +29 -11
- {pystand-2.27 → pystand-2.28}/.gitignore +0 -0
- {pystand-2.27 → pystand-2.28}/justfile +0 -0
- {pystand-2.27 → pystand-2.28}/pystand.egg-info/SOURCES.txt +0 -0
- {pystand-2.27 → pystand-2.28}/pystand.egg-info/dependency_links.txt +0 -0
- {pystand-2.27 → pystand-2.28}/pystand.egg-info/entry_points.txt +0 -0
- {pystand-2.27 → pystand-2.28}/pystand.egg-info/top_level.txt +0 -0
- {pystand-2.27 → pystand-2.28}/setup.cfg +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pystand
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.28
|
|
4
4
|
Summary: Install Python versions from python-build-standalone project
|
|
5
5
|
Author-email: Mark Blakeney <mark.blakeney@bullet-systems.net>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -9,7 +9,6 @@ Keywords: python-build-standalone,pyenv,hatch,pdm
|
|
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
|
10
10
|
Requires-Python: >=3.8
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
-
Requires-Dist: argcomplete
|
|
13
12
|
Requires-Dist: packaging
|
|
14
13
|
Requires-Dist: platformdirs
|
|
15
14
|
Requires-Dist: argparse-from-file
|
|
@@ -145,7 +144,7 @@ usage: pystand [-h] [-D DISTRIBUTION] [-P PREFIX_DIR] [-C CACHE_DIR]
|
|
|
145
144
|
[-M CACHE_MINUTES] [--purge-days PURGE_DAYS]
|
|
146
145
|
[--github-access-token GITHUB_ACCESS_TOKEN] [--no-strip]
|
|
147
146
|
[--no-color] [--cert {system,certifi,none}] [-V]
|
|
148
|
-
{install,update,upgrade,remove,uninstall,list,show,path,cache,uv,uvx} ...
|
|
147
|
+
{install,i,update,u,upgrade,remove,r,uninstall,list,l,show,s,path,p,cache,c,uv,uvx} ...
|
|
149
148
|
|
|
150
149
|
Command line tool to download, install, and update pre-built Python versions
|
|
151
150
|
from the python-build-standalone project at https://github.com/astral-
|
|
@@ -162,10 +161,10 @@ options:
|
|
|
162
161
|
standalone/main/
|
|
163
162
|
-P, --prefix-dir PREFIX_DIR
|
|
164
163
|
specify prefix dir for storing versions. Default is
|
|
165
|
-
"
|
|
164
|
+
"~/.local/share/pystand".
|
|
166
165
|
-C, --cache-dir CACHE_DIR
|
|
167
166
|
specify cache dir for downloads. Default is
|
|
168
|
-
"
|
|
167
|
+
"~/.cache/pystand".
|
|
169
168
|
-M, --cache-minutes CACHE_MINUTES
|
|
170
169
|
cache latest YYYYMMDD release tag fetch for this many
|
|
171
170
|
minutes, before rechecking for latest. Default is 60
|
|
@@ -185,16 +184,18 @@ options:
|
|
|
185
184
|
-V, --version just show pystand version
|
|
186
185
|
|
|
187
186
|
Commands:
|
|
188
|
-
{install,update,upgrade,remove,uninstall,list,show,path,cache,uv,uvx}
|
|
189
|
-
install
|
|
187
|
+
{install,i,update,u,upgrade,remove,r,uninstall,list,l,show,s,path,p,cache,c,uv,uvx}
|
|
188
|
+
install (i) Install one, more, or all versions from a python-
|
|
190
189
|
build-standalone release.
|
|
191
|
-
update (upgrade)
|
|
192
|
-
|
|
193
|
-
|
|
190
|
+
update (u, upgrade)
|
|
191
|
+
Update one, more, or all versions to another release.
|
|
192
|
+
remove (r, uninstall)
|
|
193
|
+
Remove/uninstall one, more, or all versions.
|
|
194
|
+
list (l) List installed versions and show which have an update
|
|
194
195
|
available.
|
|
195
|
-
show
|
|
196
|
-
path
|
|
197
|
-
cache
|
|
196
|
+
show (s) Show versions available from a release.
|
|
197
|
+
path (p) Show path prefix to installed version base directory.
|
|
198
|
+
cache (c) Show size of release download caches.
|
|
198
199
|
uv Run a uv command using a version of python installed
|
|
199
200
|
by pystand.
|
|
200
201
|
uvx Run a program using uvx and a version of python
|
|
@@ -232,6 +233,8 @@ options:
|
|
|
232
233
|
-f, --force force install even if already installed
|
|
233
234
|
-s, --include-source also install source files if available in distribution
|
|
234
235
|
download
|
|
236
|
+
|
|
237
|
+
aliases: i
|
|
235
238
|
```
|
|
236
239
|
|
|
237
240
|
### Command `update`
|
|
@@ -255,7 +258,7 @@ options:
|
|
|
255
258
|
-k, --keep keep old version after updating (but only if different
|
|
256
259
|
version number)
|
|
257
260
|
|
|
258
|
-
aliases: upgrade
|
|
261
|
+
aliases: u, upgrade
|
|
259
262
|
```
|
|
260
263
|
|
|
261
264
|
### Command `remove`
|
|
@@ -277,7 +280,7 @@ options:
|
|
|
277
280
|
only remove versions if from specified YYYMMDD release
|
|
278
281
|
(e.g. 20240415)
|
|
279
282
|
|
|
280
|
-
aliases: uninstall
|
|
283
|
+
aliases: r, uninstall
|
|
281
284
|
```
|
|
282
285
|
|
|
283
286
|
### Command `list`
|
|
@@ -297,6 +300,8 @@ options:
|
|
|
297
300
|
-r, --release RELEASE
|
|
298
301
|
use specified YYYYMMDD release (e.g. 20240415) for
|
|
299
302
|
verbose compare, default is latest release
|
|
303
|
+
|
|
304
|
+
aliases: l
|
|
300
305
|
```
|
|
301
306
|
|
|
302
307
|
### Command `show`
|
|
@@ -320,6 +325,8 @@ options:
|
|
|
320
325
|
20240415), default is latest release
|
|
321
326
|
-a, --all show all available distributions for each version from
|
|
322
327
|
the release
|
|
328
|
+
|
|
329
|
+
aliases: s
|
|
323
330
|
```
|
|
324
331
|
|
|
325
332
|
### Command `path`
|
|
@@ -337,6 +344,8 @@ options:
|
|
|
337
344
|
-p, --python-path add path to python executable
|
|
338
345
|
-r, --resolve fully resolve given version
|
|
339
346
|
-c, --cache-path just show path to cache dir
|
|
347
|
+
|
|
348
|
+
aliases: p
|
|
340
349
|
```
|
|
341
350
|
|
|
342
351
|
### Command `cache`
|
|
@@ -358,6 +367,8 @@ options:
|
|
|
358
367
|
-R, --remove-all-unused
|
|
359
368
|
remove caches for all currently unused releases
|
|
360
369
|
instead of showing size
|
|
370
|
+
|
|
371
|
+
aliases: c
|
|
361
372
|
```
|
|
362
373
|
|
|
363
374
|
### Command `uv`
|
|
@@ -635,7 +646,8 @@ supported options.
|
|
|
635
646
|
|
|
636
647
|
The global options: `--distribution`, `--prefix-dir`, `--cache-dir`,
|
|
637
648
|
`--cache-minutes`, `--purge-days`, `--github-access-token`, `--no-strip`,
|
|
638
|
-
`--cert` are the only sensible candidates to consider setting
|
|
649
|
+
`--no-color`, and `--cert` are the only sensible candidates to consider setting
|
|
650
|
+
as defaults.
|
|
639
651
|
|
|
640
652
|
## Github API Rate Limiting
|
|
641
653
|
|
|
@@ -716,15 +728,6 @@ An example where this functionality may be handy is to conveniently test
|
|
|
716
728
|
various tools against free-threaded or other Python builds from Python Build
|
|
717
729
|
Standalone releases.
|
|
718
730
|
|
|
719
|
-
## Command Line Tab Completion
|
|
720
|
-
|
|
721
|
-
Command line shell [tab
|
|
722
|
-
completion](https://en.wikipedia.org/wiki/Command-line_completion) is
|
|
723
|
-
automatically enabled on `pystand` commands and options using
|
|
724
|
-
[`argcomplete`](https://github.com/kislyuk/argcomplete). You may need to first
|
|
725
|
-
(once-only) [activate argcomplete global
|
|
726
|
-
completion](https://github.com/kislyuk/argcomplete#global-completion).
|
|
727
|
-
|
|
728
731
|
## License
|
|
729
732
|
|
|
730
733
|
Copyright (C) 2024 Mark Blakeney. This program is distributed under the
|
|
@@ -125,7 +125,7 @@ usage: pystand [-h] [-D DISTRIBUTION] [-P PREFIX_DIR] [-C CACHE_DIR]
|
|
|
125
125
|
[-M CACHE_MINUTES] [--purge-days PURGE_DAYS]
|
|
126
126
|
[--github-access-token GITHUB_ACCESS_TOKEN] [--no-strip]
|
|
127
127
|
[--no-color] [--cert {system,certifi,none}] [-V]
|
|
128
|
-
{install,update,upgrade,remove,uninstall,list,show,path,cache,uv,uvx} ...
|
|
128
|
+
{install,i,update,u,upgrade,remove,r,uninstall,list,l,show,s,path,p,cache,c,uv,uvx} ...
|
|
129
129
|
|
|
130
130
|
Command line tool to download, install, and update pre-built Python versions
|
|
131
131
|
from the python-build-standalone project at https://github.com/astral-
|
|
@@ -142,10 +142,10 @@ options:
|
|
|
142
142
|
standalone/main/
|
|
143
143
|
-P, --prefix-dir PREFIX_DIR
|
|
144
144
|
specify prefix dir for storing versions. Default is
|
|
145
|
-
"
|
|
145
|
+
"~/.local/share/pystand".
|
|
146
146
|
-C, --cache-dir CACHE_DIR
|
|
147
147
|
specify cache dir for downloads. Default is
|
|
148
|
-
"
|
|
148
|
+
"~/.cache/pystand".
|
|
149
149
|
-M, --cache-minutes CACHE_MINUTES
|
|
150
150
|
cache latest YYYYMMDD release tag fetch for this many
|
|
151
151
|
minutes, before rechecking for latest. Default is 60
|
|
@@ -165,16 +165,18 @@ options:
|
|
|
165
165
|
-V, --version just show pystand version
|
|
166
166
|
|
|
167
167
|
Commands:
|
|
168
|
-
{install,update,upgrade,remove,uninstall,list,show,path,cache,uv,uvx}
|
|
169
|
-
install
|
|
168
|
+
{install,i,update,u,upgrade,remove,r,uninstall,list,l,show,s,path,p,cache,c,uv,uvx}
|
|
169
|
+
install (i) Install one, more, or all versions from a python-
|
|
170
170
|
build-standalone release.
|
|
171
|
-
update (upgrade)
|
|
172
|
-
|
|
173
|
-
|
|
171
|
+
update (u, upgrade)
|
|
172
|
+
Update one, more, or all versions to another release.
|
|
173
|
+
remove (r, uninstall)
|
|
174
|
+
Remove/uninstall one, more, or all versions.
|
|
175
|
+
list (l) List installed versions and show which have an update
|
|
174
176
|
available.
|
|
175
|
-
show
|
|
176
|
-
path
|
|
177
|
-
cache
|
|
177
|
+
show (s) Show versions available from a release.
|
|
178
|
+
path (p) Show path prefix to installed version base directory.
|
|
179
|
+
cache (c) Show size of release download caches.
|
|
178
180
|
uv Run a uv command using a version of python installed
|
|
179
181
|
by pystand.
|
|
180
182
|
uvx Run a program using uvx and a version of python
|
|
@@ -212,6 +214,8 @@ options:
|
|
|
212
214
|
-f, --force force install even if already installed
|
|
213
215
|
-s, --include-source also install source files if available in distribution
|
|
214
216
|
download
|
|
217
|
+
|
|
218
|
+
aliases: i
|
|
215
219
|
```
|
|
216
220
|
|
|
217
221
|
### Command `update`
|
|
@@ -235,7 +239,7 @@ options:
|
|
|
235
239
|
-k, --keep keep old version after updating (but only if different
|
|
236
240
|
version number)
|
|
237
241
|
|
|
238
|
-
aliases: upgrade
|
|
242
|
+
aliases: u, upgrade
|
|
239
243
|
```
|
|
240
244
|
|
|
241
245
|
### Command `remove`
|
|
@@ -257,7 +261,7 @@ options:
|
|
|
257
261
|
only remove versions if from specified YYYMMDD release
|
|
258
262
|
(e.g. 20240415)
|
|
259
263
|
|
|
260
|
-
aliases: uninstall
|
|
264
|
+
aliases: r, uninstall
|
|
261
265
|
```
|
|
262
266
|
|
|
263
267
|
### Command `list`
|
|
@@ -277,6 +281,8 @@ options:
|
|
|
277
281
|
-r, --release RELEASE
|
|
278
282
|
use specified YYYYMMDD release (e.g. 20240415) for
|
|
279
283
|
verbose compare, default is latest release
|
|
284
|
+
|
|
285
|
+
aliases: l
|
|
280
286
|
```
|
|
281
287
|
|
|
282
288
|
### Command `show`
|
|
@@ -300,6 +306,8 @@ options:
|
|
|
300
306
|
20240415), default is latest release
|
|
301
307
|
-a, --all show all available distributions for each version from
|
|
302
308
|
the release
|
|
309
|
+
|
|
310
|
+
aliases: s
|
|
303
311
|
```
|
|
304
312
|
|
|
305
313
|
### Command `path`
|
|
@@ -317,6 +325,8 @@ options:
|
|
|
317
325
|
-p, --python-path add path to python executable
|
|
318
326
|
-r, --resolve fully resolve given version
|
|
319
327
|
-c, --cache-path just show path to cache dir
|
|
328
|
+
|
|
329
|
+
aliases: p
|
|
320
330
|
```
|
|
321
331
|
|
|
322
332
|
### Command `cache`
|
|
@@ -338,6 +348,8 @@ options:
|
|
|
338
348
|
-R, --remove-all-unused
|
|
339
349
|
remove caches for all currently unused releases
|
|
340
350
|
instead of showing size
|
|
351
|
+
|
|
352
|
+
aliases: c
|
|
341
353
|
```
|
|
342
354
|
|
|
343
355
|
### Command `uv`
|
|
@@ -615,7 +627,8 @@ supported options.
|
|
|
615
627
|
|
|
616
628
|
The global options: `--distribution`, `--prefix-dir`, `--cache-dir`,
|
|
617
629
|
`--cache-minutes`, `--purge-days`, `--github-access-token`, `--no-strip`,
|
|
618
|
-
`--cert` are the only sensible candidates to consider setting
|
|
630
|
+
`--no-color`, and `--cert` are the only sensible candidates to consider setting
|
|
631
|
+
as defaults.
|
|
619
632
|
|
|
620
633
|
## Github API Rate Limiting
|
|
621
634
|
|
|
@@ -696,15 +709,6 @@ An example where this functionality may be handy is to conveniently test
|
|
|
696
709
|
various tools against free-threaded or other Python builds from Python Build
|
|
697
710
|
Standalone releases.
|
|
698
711
|
|
|
699
|
-
## Command Line Tab Completion
|
|
700
|
-
|
|
701
|
-
Command line shell [tab
|
|
702
|
-
completion](https://en.wikipedia.org/wiki/Command-line_completion) is
|
|
703
|
-
automatically enabled on `pystand` commands and options using
|
|
704
|
-
[`argcomplete`](https://github.com/kislyuk/argcomplete). You may need to first
|
|
705
|
-
(once-only) [activate argcomplete global
|
|
706
|
-
completion](https://github.com/kislyuk/argcomplete#global-completion).
|
|
707
|
-
|
|
708
712
|
## License
|
|
709
713
|
|
|
710
714
|
Copyright (C) 2024 Mark Blakeney. This program is distributed under the
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: pystand
|
|
3
|
-
Version: 2.
|
|
3
|
+
Version: 2.28
|
|
4
4
|
Summary: Install Python versions from python-build-standalone project
|
|
5
5
|
Author-email: Mark Blakeney <mark.blakeney@bullet-systems.net>
|
|
6
6
|
License-Expression: GPL-3.0-or-later
|
|
@@ -9,7 +9,6 @@ Keywords: python-build-standalone,pyenv,hatch,pdm
|
|
|
9
9
|
Classifier: Programming Language :: Python :: 3
|
|
10
10
|
Requires-Python: >=3.8
|
|
11
11
|
Description-Content-Type: text/markdown
|
|
12
|
-
Requires-Dist: argcomplete
|
|
13
12
|
Requires-Dist: packaging
|
|
14
13
|
Requires-Dist: platformdirs
|
|
15
14
|
Requires-Dist: argparse-from-file
|
|
@@ -145,7 +144,7 @@ usage: pystand [-h] [-D DISTRIBUTION] [-P PREFIX_DIR] [-C CACHE_DIR]
|
|
|
145
144
|
[-M CACHE_MINUTES] [--purge-days PURGE_DAYS]
|
|
146
145
|
[--github-access-token GITHUB_ACCESS_TOKEN] [--no-strip]
|
|
147
146
|
[--no-color] [--cert {system,certifi,none}] [-V]
|
|
148
|
-
{install,update,upgrade,remove,uninstall,list,show,path,cache,uv,uvx} ...
|
|
147
|
+
{install,i,update,u,upgrade,remove,r,uninstall,list,l,show,s,path,p,cache,c,uv,uvx} ...
|
|
149
148
|
|
|
150
149
|
Command line tool to download, install, and update pre-built Python versions
|
|
151
150
|
from the python-build-standalone project at https://github.com/astral-
|
|
@@ -162,10 +161,10 @@ options:
|
|
|
162
161
|
standalone/main/
|
|
163
162
|
-P, --prefix-dir PREFIX_DIR
|
|
164
163
|
specify prefix dir for storing versions. Default is
|
|
165
|
-
"
|
|
164
|
+
"~/.local/share/pystand".
|
|
166
165
|
-C, --cache-dir CACHE_DIR
|
|
167
166
|
specify cache dir for downloads. Default is
|
|
168
|
-
"
|
|
167
|
+
"~/.cache/pystand".
|
|
169
168
|
-M, --cache-minutes CACHE_MINUTES
|
|
170
169
|
cache latest YYYYMMDD release tag fetch for this many
|
|
171
170
|
minutes, before rechecking for latest. Default is 60
|
|
@@ -185,16 +184,18 @@ options:
|
|
|
185
184
|
-V, --version just show pystand version
|
|
186
185
|
|
|
187
186
|
Commands:
|
|
188
|
-
{install,update,upgrade,remove,uninstall,list,show,path,cache,uv,uvx}
|
|
189
|
-
install
|
|
187
|
+
{install,i,update,u,upgrade,remove,r,uninstall,list,l,show,s,path,p,cache,c,uv,uvx}
|
|
188
|
+
install (i) Install one, more, or all versions from a python-
|
|
190
189
|
build-standalone release.
|
|
191
|
-
update (upgrade)
|
|
192
|
-
|
|
193
|
-
|
|
190
|
+
update (u, upgrade)
|
|
191
|
+
Update one, more, or all versions to another release.
|
|
192
|
+
remove (r, uninstall)
|
|
193
|
+
Remove/uninstall one, more, or all versions.
|
|
194
|
+
list (l) List installed versions and show which have an update
|
|
194
195
|
available.
|
|
195
|
-
show
|
|
196
|
-
path
|
|
197
|
-
cache
|
|
196
|
+
show (s) Show versions available from a release.
|
|
197
|
+
path (p) Show path prefix to installed version base directory.
|
|
198
|
+
cache (c) Show size of release download caches.
|
|
198
199
|
uv Run a uv command using a version of python installed
|
|
199
200
|
by pystand.
|
|
200
201
|
uvx Run a program using uvx and a version of python
|
|
@@ -232,6 +233,8 @@ options:
|
|
|
232
233
|
-f, --force force install even if already installed
|
|
233
234
|
-s, --include-source also install source files if available in distribution
|
|
234
235
|
download
|
|
236
|
+
|
|
237
|
+
aliases: i
|
|
235
238
|
```
|
|
236
239
|
|
|
237
240
|
### Command `update`
|
|
@@ -255,7 +258,7 @@ options:
|
|
|
255
258
|
-k, --keep keep old version after updating (but only if different
|
|
256
259
|
version number)
|
|
257
260
|
|
|
258
|
-
aliases: upgrade
|
|
261
|
+
aliases: u, upgrade
|
|
259
262
|
```
|
|
260
263
|
|
|
261
264
|
### Command `remove`
|
|
@@ -277,7 +280,7 @@ options:
|
|
|
277
280
|
only remove versions if from specified YYYMMDD release
|
|
278
281
|
(e.g. 20240415)
|
|
279
282
|
|
|
280
|
-
aliases: uninstall
|
|
283
|
+
aliases: r, uninstall
|
|
281
284
|
```
|
|
282
285
|
|
|
283
286
|
### Command `list`
|
|
@@ -297,6 +300,8 @@ options:
|
|
|
297
300
|
-r, --release RELEASE
|
|
298
301
|
use specified YYYYMMDD release (e.g. 20240415) for
|
|
299
302
|
verbose compare, default is latest release
|
|
303
|
+
|
|
304
|
+
aliases: l
|
|
300
305
|
```
|
|
301
306
|
|
|
302
307
|
### Command `show`
|
|
@@ -320,6 +325,8 @@ options:
|
|
|
320
325
|
20240415), default is latest release
|
|
321
326
|
-a, --all show all available distributions for each version from
|
|
322
327
|
the release
|
|
328
|
+
|
|
329
|
+
aliases: s
|
|
323
330
|
```
|
|
324
331
|
|
|
325
332
|
### Command `path`
|
|
@@ -337,6 +344,8 @@ options:
|
|
|
337
344
|
-p, --python-path add path to python executable
|
|
338
345
|
-r, --resolve fully resolve given version
|
|
339
346
|
-c, --cache-path just show path to cache dir
|
|
347
|
+
|
|
348
|
+
aliases: p
|
|
340
349
|
```
|
|
341
350
|
|
|
342
351
|
### Command `cache`
|
|
@@ -358,6 +367,8 @@ options:
|
|
|
358
367
|
-R, --remove-all-unused
|
|
359
368
|
remove caches for all currently unused releases
|
|
360
369
|
instead of showing size
|
|
370
|
+
|
|
371
|
+
aliases: c
|
|
361
372
|
```
|
|
362
373
|
|
|
363
374
|
### Command `uv`
|
|
@@ -635,7 +646,8 @@ supported options.
|
|
|
635
646
|
|
|
636
647
|
The global options: `--distribution`, `--prefix-dir`, `--cache-dir`,
|
|
637
648
|
`--cache-minutes`, `--purge-days`, `--github-access-token`, `--no-strip`,
|
|
638
|
-
`--cert` are the only sensible candidates to consider setting
|
|
649
|
+
`--no-color`, and `--cert` are the only sensible candidates to consider setting
|
|
650
|
+
as defaults.
|
|
639
651
|
|
|
640
652
|
## Github API Rate Limiting
|
|
641
653
|
|
|
@@ -716,15 +728,6 @@ An example where this functionality may be handy is to conveniently test
|
|
|
716
728
|
various tools against free-threaded or other Python builds from Python Build
|
|
717
729
|
Standalone releases.
|
|
718
730
|
|
|
719
|
-
## Command Line Tab Completion
|
|
720
|
-
|
|
721
|
-
Command line shell [tab
|
|
722
|
-
completion](https://en.wikipedia.org/wiki/Command-line_completion) is
|
|
723
|
-
automatically enabled on `pystand` commands and options using
|
|
724
|
-
[`argcomplete`](https://github.com/kislyuk/argcomplete). You may need to first
|
|
725
|
-
(once-only) [activate argcomplete global
|
|
726
|
-
completion](https://github.com/kislyuk/argcomplete#global-completion).
|
|
727
|
-
|
|
728
731
|
## License
|
|
729
732
|
|
|
730
733
|
Copyright (C) 2024 Mark Blakeney. This program is distributed under the
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
#!/usr/bin/python3
|
|
2
|
-
# PYTHON_ARGCOMPLETE_OK
|
|
3
2
|
"""
|
|
4
3
|
Command line tool to download, install, and update pre-built Python
|
|
5
4
|
versions from the python-build-standalone project at
|
|
@@ -24,10 +23,10 @@ from pathlib import Path
|
|
|
24
23
|
from typing import Any
|
|
25
24
|
from urllib.request import urlopen
|
|
26
25
|
|
|
27
|
-
import argcomplete
|
|
28
26
|
import filelock
|
|
29
27
|
import platformdirs
|
|
30
28
|
from argparse_from_file import ArgumentParser, Namespace
|
|
29
|
+
from packaging.version import InvalidVersion
|
|
31
30
|
from packaging.version import parse as parse_version
|
|
32
31
|
|
|
33
32
|
REPO = 'python-build-standalone'
|
|
@@ -115,6 +114,14 @@ class ColorDist(ColorTable):
|
|
|
115
114
|
return text.split('-', 1)[0]
|
|
116
115
|
|
|
117
116
|
|
|
117
|
+
def unexpanduser(path: Path, *, home=Path.home()) -> Path:
|
|
118
|
+
"Return path name, with $HOME replaced by ~ (opposite of Path.expanduser())"
|
|
119
|
+
if path.parts[: len(home.parts)] == home.parts:
|
|
120
|
+
return Path('~', *path.parts[len(home.parts) :])
|
|
121
|
+
|
|
122
|
+
return path
|
|
123
|
+
|
|
124
|
+
|
|
118
125
|
def is_admin() -> bool:
|
|
119
126
|
"Check if we are running as root"
|
|
120
127
|
if platform.system() == 'Windows':
|
|
@@ -589,6 +596,12 @@ def show_list(args: Namespace) -> None:
|
|
|
589
596
|
if args.re_match and not re.search(args.re_match, release):
|
|
590
597
|
continue
|
|
591
598
|
|
|
599
|
+
# Ignore any bogus releases that don't parse as versions
|
|
600
|
+
try:
|
|
601
|
+
this_version = parse_version(release)
|
|
602
|
+
except InvalidVersion:
|
|
603
|
+
continue
|
|
604
|
+
|
|
592
605
|
if dt_str := releases.get(release):
|
|
593
606
|
dts = (
|
|
594
607
|
datetime.fromisoformat(dt_str)
|
|
@@ -605,8 +618,7 @@ def show_list(args: Namespace) -> None:
|
|
|
605
618
|
else:
|
|
606
619
|
app = ''
|
|
607
620
|
|
|
608
|
-
pre = ' pre-release' if
|
|
609
|
-
|
|
621
|
+
pre = ' pre-release' if this_version > latest else ''
|
|
610
622
|
print(f'{release} {dts}{app}{pre}')
|
|
611
623
|
|
|
612
624
|
|
|
@@ -763,8 +775,8 @@ def main() -> str | None:
|
|
|
763
775
|
distro_help = distro_default or '?unknown?'
|
|
764
776
|
|
|
765
777
|
p = '/opt' if is_admin() else platformdirs.user_data_dir()
|
|
766
|
-
prefix_dir =
|
|
767
|
-
cache_dir = platformdirs.user_cache_path() / PROG
|
|
778
|
+
prefix_dir = unexpanduser(Path(p, PROG))
|
|
779
|
+
cache_dir = unexpanduser(platformdirs.user_cache_path() / PROG)
|
|
768
780
|
|
|
769
781
|
# Parse arguments
|
|
770
782
|
opt = ArgumentParser(
|
|
@@ -783,7 +795,7 @@ def main() -> str | None:
|
|
|
783
795
|
opt.add_argument(
|
|
784
796
|
'-P',
|
|
785
797
|
'--prefix-dir',
|
|
786
|
-
default=prefix_dir,
|
|
798
|
+
default=str(prefix_dir),
|
|
787
799
|
help='specify prefix dir for storing versions. Default is "%(default)s".',
|
|
788
800
|
)
|
|
789
801
|
opt.add_argument(
|
|
@@ -855,8 +867,6 @@ def main() -> str | None:
|
|
|
855
867
|
# Set the function to call
|
|
856
868
|
cmdopt.set_defaults(func=cls.run, name=name, parser=cmdopt)
|
|
857
869
|
|
|
858
|
-
# Command arguments are now defined, so we can set up argcomplete
|
|
859
|
-
argcomplete.autocomplete(opt)
|
|
860
870
|
args = opt.parse_args()
|
|
861
871
|
|
|
862
872
|
if 'func' not in args:
|
|
@@ -912,6 +922,7 @@ def main() -> str | None:
|
|
|
912
922
|
# COMMAND
|
|
913
923
|
class install_:
|
|
914
924
|
doc = f'Install one, more, or all versions from a {REPO} release.'
|
|
925
|
+
aliases = ['i']
|
|
915
926
|
|
|
916
927
|
@staticmethod
|
|
917
928
|
def init(parser: ArgumentParser) -> None:
|
|
@@ -1011,7 +1022,7 @@ class install_:
|
|
|
1011
1022
|
class update_:
|
|
1012
1023
|
"Update one, more, or all versions to another release."
|
|
1013
1024
|
|
|
1014
|
-
aliases = ['upgrade']
|
|
1025
|
+
aliases = ['u', 'upgrade']
|
|
1015
1026
|
|
|
1016
1027
|
@staticmethod
|
|
1017
1028
|
def init(parser: ArgumentParser) -> None:
|
|
@@ -1098,7 +1109,7 @@ class update_:
|
|
|
1098
1109
|
class remove_:
|
|
1099
1110
|
"Remove/uninstall one, more, or all versions."
|
|
1100
1111
|
|
|
1101
|
-
aliases = ['uninstall']
|
|
1112
|
+
aliases = ['r', 'uninstall']
|
|
1102
1113
|
|
|
1103
1114
|
@staticmethod
|
|
1104
1115
|
def init(parser: ArgumentParser) -> None:
|
|
@@ -1139,6 +1150,8 @@ class remove_:
|
|
|
1139
1150
|
class list_:
|
|
1140
1151
|
"List installed versions and show which have an update available."
|
|
1141
1152
|
|
|
1153
|
+
aliases = ['l']
|
|
1154
|
+
|
|
1142
1155
|
@staticmethod
|
|
1143
1156
|
def init(parser: ArgumentParser) -> None:
|
|
1144
1157
|
parser.add_argument(
|
|
@@ -1227,6 +1240,7 @@ class show_:
|
|
|
1227
1240
|
View available releases and their distributions at
|
|
1228
1241
|
{GITHUB_SITE}/releases.
|
|
1229
1242
|
"""
|
|
1243
|
+
aliases = ['s']
|
|
1230
1244
|
|
|
1231
1245
|
@staticmethod
|
|
1232
1246
|
def init(parser: ArgumentParser) -> None:
|
|
@@ -1301,6 +1315,8 @@ class show_:
|
|
|
1301
1315
|
class path_:
|
|
1302
1316
|
"Show path prefix to installed version base directory."
|
|
1303
1317
|
|
|
1318
|
+
aliases = ['p']
|
|
1319
|
+
|
|
1304
1320
|
@staticmethod
|
|
1305
1321
|
def init(parser: ArgumentParser) -> None:
|
|
1306
1322
|
parser.add_argument(
|
|
@@ -1352,6 +1368,8 @@ class path_:
|
|
|
1352
1368
|
class cache_:
|
|
1353
1369
|
"Show size of release download caches."
|
|
1354
1370
|
|
|
1371
|
+
aliases = ['c']
|
|
1372
|
+
|
|
1355
1373
|
@staticmethod
|
|
1356
1374
|
def init(parser: ArgumentParser) -> None:
|
|
1357
1375
|
parser.add_argument(
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|