@@ -45,7 +45,8 @@ def __init__(self, target: str = None, verbose: bool = False):
45
45
self .pip = None
46
46
self .to_be_removed = []
47
47
self .version , self .architecture = utils .get_python_infos (self .target )
48
- self .short_exe = Path (utils .get_python_executable (self .target )).name
48
+ self .python_exe = utils .get_python_executable (self .target )
49
+ self .short_exe = Path (self .python_exe ).name
49
50
50
51
def create_file (self , package , name , dstdir , contents ):
51
52
"""Generate data file -- path is relative to distribution root dir"""
@@ -224,81 +225,30 @@ def install_bdist_direct(self, package, install_options=None):
224
225
225
226
def main (test = False ):
226
227
227
- registerWinPythonHelp = f"Register distribution : associate file extensions, icons and context menu with this WinPython"
228
- unregisterWinPythonHelp = f"Unregister distribution : de-associate file extensions, icons and context menu from this WinPython"
228
+ registerWinPythonHelp = f"Register WinPython : associate file extensions, icons and context menu with this WinPython"
229
+ unregisterWinPythonHelp = f"Unregister WinPython : de-associate file extensions, icons and context menu from this WinPython"
229
230
parser = ArgumentParser (
230
231
description = "WinPython Package Manager: handle a WinPython Distribution and its packages" ,
231
232
formatter_class = RawTextHelpFormatter ,
232
233
)
233
- parser .add_argument (
234
- "fname" ,
235
- metavar = "package" ,
236
- nargs = "?" ,
237
- default = "" ,
238
- type = str ,
239
- help = "optional package name or package wheel" ,
240
- )
241
- parser .add_argument (
242
- "--register" ,
243
- dest = "registerWinPython" ,
244
- action = "store_true" , # Store True when flag is present
245
- help = registerWinPythonHelp ,
246
- )
247
- parser .add_argument (
248
- "--unregister" ,
249
- dest = "unregisterWinPython" ,
250
- action = "store_true" ,
251
- help = unregisterWinPythonHelp ,
252
- )
253
- parser .add_argument (
254
- "-v" , "--verbose" ,
255
- action = "store_true" ,
256
- help = "show more details on packages and actions" ,
257
- )
258
- parser .add_argument (
259
- "-ls" , "--list" ,
260
- action = "store_true" ,
261
- help = "list installed packages matching the given [optional] package expression: wppm -ls, wppm -ls pand" ,
262
- )
263
- parser .add_argument (
264
- "-p" ,
265
- dest = "pipdown" ,
266
- action = "store_true" ,
267
- help = "show Package dependencies of the given package[option]: wppm -p pandas[test]" ,
268
- )
269
- parser .add_argument (
270
- "-r" ,
271
- dest = "pipup" ,
272
- action = "store_true" ,
273
- help = f"show Reverse dependancies of the given package[option]: wppm -r pytest[test]" ,
274
- )
275
- parser .add_argument (
276
- "-l" , "--levels" ,
277
- type = int ,
278
- default = 2 ,
279
- help = "show 'LEVELS' levels of dependencies (with -p, -r), default is 2: wppm -p pandas -l1" ,
280
- )
281
- parser .add_argument (
282
- "-lsa" ,
283
- dest = "all" ,
284
- action = "store_true" ,
285
- help = f"list details of package names matching given regular expression: wppm -lsa pandas -l1" ,
286
- )
287
- parser .add_argument (
288
- "-t" , "--target" ,
289
- default = sys .prefix ,
290
- help = f'path to target Python distribution (default: "{ sys .prefix } ")' ,
291
- )
292
- parser .add_argument (
293
- "-i" , "--install" ,
294
- action = "store_true" ,
295
- help = "install a given package wheel (use pip for more features)" ,
296
- )
297
- parser .add_argument (
298
- "-u" , "--uninstall" ,
299
- action = "store_true" , # Store True when flag is present
300
- help = "uninstall package (use pip for more features)" ,
301
- )
234
+ parser .add_argument ("fname" , metavar = "package" , nargs = "?" , default = "" , type = str , help = "optional package name or package wheel" )
235
+ parser .add_argument ("-v" , "--verbose" , action = "store_true" , help = "show more details on packages and actions" )
236
+ parser .add_argument ( "--register" , dest = "registerWinPython" , action = "store_true" , help = registerWinPythonHelp )
237
+ # parser.add_argument( "--register_forall", action="store_true", help="Register distribution for all users")
238
+ parser .add_argument ("--unregister" , dest = "unregisterWinPython" , action = "store_true" , help = unregisterWinPythonHelp )
239
+ # parser.add_argument( "--unregister_forall", action="store_true", help="un-Register distribution for all users")
240
+ parser .add_argument ("--fix" , action = "store_true" , help = "make WinPython fix" )
241
+ parser .add_argument ("--movable" , action = "store_true" , help = "make WinPython movable" )
242
+ parser .add_argument ("-ls" , "--list" , action = "store_true" , help = "list installed packages matching the given [optional] package expression: wppm -ls, wppm -ls pand" )
243
+ parser .add_argument ("-lsa" , dest = "all" , action = "store_true" ,help = f"list details of package names matching given regular expression: wppm -lsa pandas -l1" )
244
+ parser .add_argument ("-p" ,dest = "pipdown" ,action = "store_true" ,help = "show Package dependencies of the given package[option]: wppm -p pandas[test]" )
245
+ parser .add_argument ("-r" , dest = "pipup" , action = "store_true" , help = f"show Reverse dependancies of the given package[option]: wppm -r pytest[test]" )
246
+ parser .add_argument ("-l" , "--levels" , type = int , default = 2 , help = "show 'LEVELS' levels of dependencies (with -p, -r), default is 2: wppm -p pandas -l1" )
247
+ parser .add_argument ("-t" , "--target" , default = sys .prefix , help = f'path to target Python distribution (default: "{ sys .prefix } ")' )
248
+ parser .add_argument ("-i" , "--install" , action = "store_true" , help = "install a given package wheel (use pip for more features)" )
249
+ parser .add_argument ("-u" , "--uninstall" , action = "store_true" , help = "uninstall package (use pip for more features)" )
250
+
251
+
302
252
args = parser .parse_args ()
303
253
targetpython = None
304
254
if args .target and args .target != sys .prefix :
@@ -362,26 +312,35 @@ def main(test=False):
362
312
if theAnswer == "Y" :
363
313
associate .unregister (dist .target , verbose = args .verbose )
364
314
sys .exit ()
365
- elif not args .install and not args .uninstall :
366
- args .install = True
367
- if not Path (args .fname ).is_file () and args .install :
368
- if args .fname == "" :
369
- parser .print_help ()
370
- sys .exit ()
371
- else :
372
- raise FileNotFoundError (f"File not found: { args .fname } " )
373
315
if utils .is_python_distribution (args .target ):
374
316
dist = Distribution (args .target , verbose = True )
375
- try :
376
- if args .uninstall :
377
- package = dist .find_package (args .fname )
378
- dist .uninstall (package )
317
+ cmd_fix = rf"from winpython import wppm;dist=wppm.Distribution(r'{ dist .target } ');dist.patch_standard_packages('pip', to_movable=False)"
318
+ cmd_mov = rf"from winpython import wppm;dist=wppm.Distribution(r'{ dist .target } ');dist.patch_standard_packages('pip', to_movable=True)"
319
+ if args .fix :
320
+ # dist.patch_standard_packages('pip', to_movable=False) # would fail on wppm.exe
321
+ p = subprocess .Popen (["start" , "cmd" , "/k" ,dist .python_exe , "-c" , cmd_fix ], shell = True , cwd = dist .target )
322
+ sys .exit ()
323
+ if args .movable :
324
+ p = subprocess .Popen (["start" , "cmd" , "/k" ,dist .python_exe , "-c" , cmd_mov ], shell = True , cwd = dist .target )
325
+ sys .exit ()
326
+ if not args .install and not args .uninstall :
327
+ args .install = True
328
+ if not Path (args .fname ).is_file () and args .install :
329
+ if args .fname == "" :
330
+ parser .print_help ()
331
+ sys .exit ()
379
332
else :
380
- package = Package (args .fname )
381
- if args .install :
382
- dist .install (package )
383
- except NotImplementedError :
384
- raise RuntimeError ("Package is not (yet) supported by WPPM" )
333
+ raise FileNotFoundError (f"File not found: { args .fname } " )
334
+ try :
335
+ if args .uninstall :
336
+ package = dist .find_package (args .fname )
337
+ dist .uninstall (package )
338
+ elif args .install :
339
+ package = Package (args .fname )
340
+ if args .install :
341
+ dist .install (package )
342
+ except NotImplementedError :
343
+ raise RuntimeError ("Package is not (yet) supported by WPPM" )
385
344
else :
386
345
raise OSError (f"Invalid Python distribution { args .target } " )
387
346
0 commit comments