pystand 2.22__tar.gz → 2.23__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.
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystand
3
- Version: 2.22
3
+ Version: 2.23
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
@@ -27,14 +27,14 @@ installation, and update of pre-built Python versions from the
27
27
  [`python-build-standalone`][pbs] project. The following commands are
28
28
  provided:
29
29
 
30
- |Command |Description |
31
- |---------|--------------------------------------------------------------------|
32
- |`install`|Install one or more versions from a python-build-standalone release.|
33
- |`update` (or `upgrade`) |Update one, more, or all versions to another release.|
34
- |`remove` (or `uninstall`) |Remove/uninstall one, more, or all versions.|
35
- |`list` |List installed versions and show which have an update available.|
36
- |`show` |Show versions available from a release.|
37
- |`path` |Show path prefix to installed version base directory.|
30
+ |Command|Description|
31
+ |---------|--------------------------------------------------------------------|
32
+ |`install`|Install one, more, or all versions from a python-build-standalone release.|
33
+ |`update` (or `upgrade`)|Update one, more, or all versions to another release.|
34
+ |`remove` (or `uninstall`)|Remove/uninstall one, more, or all versions.|
35
+ |`list`|List installed versions and show which have an update available.|
36
+ |`show`|Show versions available from a release.|
37
+ |`path`|Show path prefix to installed version base directory.|
38
38
 
39
39
  By default, Python versions are sourced from the latest
40
40
  `python-build-standalone` [release][pbs-rel] available (e.g.
@@ -89,6 +89,14 @@ Version 3.10.14 @ 20240415 removed.
89
89
 
90
90
  $ pystand list
91
91
  3.12.3 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
92
+
93
+ # Install all available versions from latest release:
94
+ $ pystand install -a
95
+ Version 3.8.19 @ 20240415 installed.
96
+ Version 3.9.19 @ 20240415 installed.
97
+ Version 3.10.14 @ 20240415 installed.
98
+ Version 3.11.9 @ 20240415 installed.
99
+ Version 3.12.3 is already installed.
92
100
  ```
93
101
 
94
102
  Here are some examples showing how to use an installed version ..
@@ -175,8 +183,8 @@ options:
175
183
 
176
184
  Commands:
177
185
  {install,update,upgrade,remove,uninstall,list,show,path,cache}
178
- install Install one or more versions from a python-build-
179
- standalone release.
186
+ install Install one, more, or all versions from a python-
187
+ build-standalone release.
180
188
  update (upgrade) Update one, more, or all versions to another release.
181
189
  remove (uninstall) Remove/uninstall one, more, or all versions.
182
190
  list List installed versions and show which have an update
@@ -195,9 +203,10 @@ individual command:
195
203
  ### Command `install`
196
204
 
197
205
  ```
198
- usage: pystand install [-h] [-r RELEASE] [-f] [-s] version [version ...]
206
+ usage: pystand install [-h] [-r RELEASE] [-a] [-A] [--skip] [-f] [-s]
207
+ [version ...]
199
208
 
200
- Install one or more versions from a python-build-standalone release.
209
+ Install one, more, or all versions from a python-build-standalone release.
201
210
 
202
211
  positional arguments:
203
212
  version version to install. E.g. 3.12 or 3.12.3
@@ -208,6 +217,11 @@ options:
208
217
  install from specified python-build-standalone
209
218
  YYYYMMDD release (e.g. 20240415), default is latest
210
219
  release
220
+ -a, --all install ALL versions from release
221
+ -A, --all-prerelease install ALL versions from release, including pre-
222
+ releases
223
+ --skip skip the specified versions when installing all (only
224
+ can be specified with --all)
211
225
  -f, --force force install even if already installed
212
226
  -s, --include-source also install source files if available in distribution
213
227
  download
@@ -7,14 +7,14 @@ installation, and update of pre-built Python versions from the
7
7
  [`python-build-standalone`][pbs] project. The following commands are
8
8
  provided:
9
9
 
10
- |Command |Description |
11
- |---------|--------------------------------------------------------------------|
12
- |`install`|Install one or more versions from a python-build-standalone release.|
13
- |`update` (or `upgrade`) |Update one, more, or all versions to another release.|
14
- |`remove` (or `uninstall`) |Remove/uninstall one, more, or all versions.|
15
- |`list` |List installed versions and show which have an update available.|
16
- |`show` |Show versions available from a release.|
17
- |`path` |Show path prefix to installed version base directory.|
10
+ |Command|Description|
11
+ |---------|--------------------------------------------------------------------|
12
+ |`install`|Install one, more, or all versions from a python-build-standalone release.|
13
+ |`update` (or `upgrade`)|Update one, more, or all versions to another release.|
14
+ |`remove` (or `uninstall`)|Remove/uninstall one, more, or all versions.|
15
+ |`list`|List installed versions and show which have an update available.|
16
+ |`show`|Show versions available from a release.|
17
+ |`path`|Show path prefix to installed version base directory.|
18
18
 
19
19
  By default, Python versions are sourced from the latest
20
20
  `python-build-standalone` [release][pbs-rel] available (e.g.
@@ -69,6 +69,14 @@ Version 3.10.14 @ 20240415 removed.
69
69
 
70
70
  $ pystand list
71
71
  3.12.3 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
72
+
73
+ # Install all available versions from latest release:
74
+ $ pystand install -a
75
+ Version 3.8.19 @ 20240415 installed.
76
+ Version 3.9.19 @ 20240415 installed.
77
+ Version 3.10.14 @ 20240415 installed.
78
+ Version 3.11.9 @ 20240415 installed.
79
+ Version 3.12.3 is already installed.
72
80
  ```
73
81
 
74
82
  Here are some examples showing how to use an installed version ..
@@ -155,8 +163,8 @@ options:
155
163
 
156
164
  Commands:
157
165
  {install,update,upgrade,remove,uninstall,list,show,path,cache}
158
- install Install one or more versions from a python-build-
159
- standalone release.
166
+ install Install one, more, or all versions from a python-
167
+ build-standalone release.
160
168
  update (upgrade) Update one, more, or all versions to another release.
161
169
  remove (uninstall) Remove/uninstall one, more, or all versions.
162
170
  list List installed versions and show which have an update
@@ -175,9 +183,10 @@ individual command:
175
183
  ### Command `install`
176
184
 
177
185
  ```
178
- usage: pystand install [-h] [-r RELEASE] [-f] [-s] version [version ...]
186
+ usage: pystand install [-h] [-r RELEASE] [-a] [-A] [--skip] [-f] [-s]
187
+ [version ...]
179
188
 
180
- Install one or more versions from a python-build-standalone release.
189
+ Install one, more, or all versions from a python-build-standalone release.
181
190
 
182
191
  positional arguments:
183
192
  version version to install. E.g. 3.12 or 3.12.3
@@ -188,6 +197,11 @@ options:
188
197
  install from specified python-build-standalone
189
198
  YYYYMMDD release (e.g. 20240415), default is latest
190
199
  release
200
+ -a, --all install ALL versions from release
201
+ -A, --all-prerelease install ALL versions from release, including pre-
202
+ releases
203
+ --skip skip the specified versions when installing all (only
204
+ can be specified with --all)
191
205
  -f, --force force install even if already installed
192
206
  -s, --include-source also install source files if available in distribution
193
207
  download
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pystand
3
- Version: 2.22
3
+ Version: 2.23
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
@@ -27,14 +27,14 @@ installation, and update of pre-built Python versions from the
27
27
  [`python-build-standalone`][pbs] project. The following commands are
28
28
  provided:
29
29
 
30
- |Command |Description |
31
- |---------|--------------------------------------------------------------------|
32
- |`install`|Install one or more versions from a python-build-standalone release.|
33
- |`update` (or `upgrade`) |Update one, more, or all versions to another release.|
34
- |`remove` (or `uninstall`) |Remove/uninstall one, more, or all versions.|
35
- |`list` |List installed versions and show which have an update available.|
36
- |`show` |Show versions available from a release.|
37
- |`path` |Show path prefix to installed version base directory.|
30
+ |Command|Description|
31
+ |---------|--------------------------------------------------------------------|
32
+ |`install`|Install one, more, or all versions from a python-build-standalone release.|
33
+ |`update` (or `upgrade`)|Update one, more, or all versions to another release.|
34
+ |`remove` (or `uninstall`)|Remove/uninstall one, more, or all versions.|
35
+ |`list`|List installed versions and show which have an update available.|
36
+ |`show`|Show versions available from a release.|
37
+ |`path`|Show path prefix to installed version base directory.|
38
38
 
39
39
  By default, Python versions are sourced from the latest
40
40
  `python-build-standalone` [release][pbs-rel] available (e.g.
@@ -89,6 +89,14 @@ Version 3.10.14 @ 20240415 removed.
89
89
 
90
90
  $ pystand list
91
91
  3.12.3 @ 20240415 distribution="x86_64-unknown-linux-gnu-install_only_stripped"
92
+
93
+ # Install all available versions from latest release:
94
+ $ pystand install -a
95
+ Version 3.8.19 @ 20240415 installed.
96
+ Version 3.9.19 @ 20240415 installed.
97
+ Version 3.10.14 @ 20240415 installed.
98
+ Version 3.11.9 @ 20240415 installed.
99
+ Version 3.12.3 is already installed.
92
100
  ```
93
101
 
94
102
  Here are some examples showing how to use an installed version ..
@@ -175,8 +183,8 @@ options:
175
183
 
176
184
  Commands:
177
185
  {install,update,upgrade,remove,uninstall,list,show,path,cache}
178
- install Install one or more versions from a python-build-
179
- standalone release.
186
+ install Install one, more, or all versions from a python-
187
+ build-standalone release.
180
188
  update (upgrade) Update one, more, or all versions to another release.
181
189
  remove (uninstall) Remove/uninstall one, more, or all versions.
182
190
  list List installed versions and show which have an update
@@ -195,9 +203,10 @@ individual command:
195
203
  ### Command `install`
196
204
 
197
205
  ```
198
- usage: pystand install [-h] [-r RELEASE] [-f] [-s] version [version ...]
206
+ usage: pystand install [-h] [-r RELEASE] [-a] [-A] [--skip] [-f] [-s]
207
+ [version ...]
199
208
 
200
- Install one or more versions from a python-build-standalone release.
209
+ Install one, more, or all versions from a python-build-standalone release.
201
210
 
202
211
  positional arguments:
203
212
  version version to install. E.g. 3.12 or 3.12.3
@@ -208,6 +217,11 @@ options:
208
217
  install from specified python-build-standalone
209
218
  YYYYMMDD release (e.g. 20240415), default is latest
210
219
  release
220
+ -a, --all install ALL versions from release
221
+ -A, --all-prerelease install ALL versions from release, including pre-
222
+ releases
223
+ --skip skip the specified versions when installing all (only
224
+ can be specified with --all)
211
225
  -f, --force force install even if already installed
212
226
  -s, --include-source also install source files if available in distribution
213
227
  download
@@ -850,11 +850,10 @@ def main() -> str | None:
850
850
  args._cert = create_cert(args.cert)
851
851
 
852
852
  # Only allow one instance of this program to run (to read/write prefix and cache dirs)
853
- p_lock = filelock.FileLock(prefix_dir / '.lock')
854
- c_lock = filelock.FileLock(cache_dir / '.lock')
853
+ locks = [filelock.FileLock(d / '.lock') for d in (prefix_dir, cache_dir)]
855
854
 
856
855
  try:
857
- with p_lock.acquire(blocking=False), c_lock.acquire(blocking=False):
856
+ with locks[0].acquire(blocking=False), locks[1].acquire(blocking=False):
858
857
  args._release = get_release_tag(args)
859
858
  result = args.func(args)
860
859
  purge_unused_releases(args)
@@ -867,7 +866,7 @@ def main() -> str | None:
867
866
 
868
867
  # COMMAND
869
868
  class install_:
870
- doc = f'Install one or more versions from a {REPO} release.'
869
+ doc = f'Install one, more, or all versions from a {REPO} release.'
871
870
 
872
871
  @staticmethod
873
872
  def init(parser: ArgumentParser) -> None:
@@ -878,6 +877,21 @@ class install_:
878
877
  f'YYYYMMDD release (e.g. {SAMPL_RELEASE}), '
879
878
  'default is latest release',
880
879
  )
880
+ parser.add_argument(
881
+ '-a', '--all', action='store_true', help='install ALL versions from release'
882
+ )
883
+ parser.add_argument(
884
+ '-A',
885
+ '--all-prerelease',
886
+ action='store_true',
887
+ help='install ALL versions from release, including pre-releases',
888
+ )
889
+ parser.add_argument(
890
+ '--skip',
891
+ action='store_true',
892
+ help='skip the specified versions when '
893
+ 'installing all (only can be specified with --all)',
894
+ )
881
895
  parser.add_argument(
882
896
  '-f',
883
897
  '--force',
@@ -891,7 +905,7 @@ class install_:
891
905
  help='also install source files if available in distribution download',
892
906
  )
893
907
  parser.add_argument(
894
- 'version', nargs='+', help='version to install. E.g. 3.12 or 3.12.3'
908
+ 'version', nargs='*', help='version to install. E.g. 3.12 or 3.12.3'
895
909
  )
896
910
 
897
911
  @staticmethod
@@ -902,6 +916,31 @@ class install_:
902
916
  return f'Release "{release}" not found, or has no compatible files.'
903
917
 
904
918
  matcher = VersionMatcher(files)
919
+
920
+ if args.all_prerelease:
921
+ args.all = True
922
+
923
+ if args.all:
924
+ if not args.skip and args.version:
925
+ args.parser.error(
926
+ 'Can not specify versions with --all unless also specifying --skip.'
927
+ )
928
+
929
+ skips = set(v for ver in args.version if (v := matcher.match(ver)))
930
+
931
+ args.version = [
932
+ v
933
+ for v in files
934
+ if (args.all_prerelease or is_release_version(v)) and v not in skips
935
+ ]
936
+
937
+ else:
938
+ if args.skip:
939
+ args.parser.error('--skip can only be specified with --all.')
940
+
941
+ if not args.version:
942
+ args.parser.error('Must specify at least one version, or --all.')
943
+
905
944
  for version in args.version:
906
945
  full_version = matcher.match(version)
907
946
  if not full_version:
@@ -911,7 +950,8 @@ class install_:
911
950
  vdir = args._versions / version
912
951
 
913
952
  if vdir.exists() and not args.force:
914
- return f'Version "{version}" is already installed.'
953
+ print(f'Version {version} is already installed.', file=sys.stderr)
954
+ continue
915
955
 
916
956
  if error := install(args, vdir, release, args._distribution, files):
917
957
  return error
@@ -1244,7 +1284,7 @@ class path_:
1244
1284
  else:
1245
1285
  path = args._versions / version
1246
1286
  if not path.exists():
1247
- return f'Version "{version}" is not installed.'
1287
+ return f'Version {version} is not installed.'
1248
1288
 
1249
1289
  if args.resolve:
1250
1290
  path = path.resolve()
File without changes
File without changes
File without changes
File without changes