@@ -331,7 +331,9 @@ def filter_code(source, additional_imports=None,
331331 expand_star_imports = False ,
332332 remove_all_unused_imports = False ,
333333 remove_duplicate_keys = False ,
334- remove_unused_variables = False ):
334+ remove_unused_variables = False ,
335+ ignore_init_module_imports = False ,
336+ ):
335337 """Yield code with unused imports removed."""
336338 imports = SAFE_IMPORTS
337339 if additional_imports :
@@ -340,8 +342,11 @@ def filter_code(source, additional_imports=None,
340342
341343 messages = check (source )
342344
343- marked_import_line_numbers = frozenset (
344- unused_import_line_numbers (messages ))
345+ if ignore_init_module_imports :
346+ marked_import_line_numbers = frozenset ()
347+ else :
348+ marked_import_line_numbers = frozenset (
349+ unused_import_line_numbers (messages ))
345350 marked_unused_module = collections .defaultdict (lambda : [])
346351 for line_number , module_name in unused_import_module_name (messages ):
347352 marked_unused_module [line_number ].append (module_name )
@@ -589,7 +594,7 @@ def get_line_ending(line):
589594
590595def fix_code (source , additional_imports = None , expand_star_imports = False ,
591596 remove_all_unused_imports = False , remove_duplicate_keys = False ,
592- remove_unused_variables = False ):
597+ remove_unused_variables = False , ignore_init_module_imports = False ):
593598 """Return code with all filtering run on it."""
594599 if not source :
595600 return source
@@ -608,7 +613,9 @@ def fix_code(source, additional_imports=None, expand_star_imports=False,
608613 expand_star_imports = expand_star_imports ,
609614 remove_all_unused_imports = remove_all_unused_imports ,
610615 remove_duplicate_keys = remove_duplicate_keys ,
611- remove_unused_variables = remove_unused_variables ))))
616+ remove_unused_variables = remove_unused_variables ,
617+ ignore_init_module_imports = ignore_init_module_imports ,
618+ ))))
612619
613620 if filtered_source == source :
614621 break
@@ -625,13 +632,22 @@ def fix_file(filename, args, standard_out):
625632
626633 original_source = source
627634
635+ isInitFile = os .path .basename (filename ) == '__init__.py'
636+
637+ if args .ignore_init_module_imports and isInitFile :
638+ ignore_init_module_imports = True
639+ else :
640+ ignore_init_module_imports = False
641+
628642 filtered_source = fix_code (
629643 source ,
630644 additional_imports = args .imports .split (',' ) if args .imports else None ,
631645 expand_star_imports = args .expand_star_imports ,
632646 remove_all_unused_imports = args .remove_all_unused_imports ,
633647 remove_duplicate_keys = args .remove_duplicate_keys ,
634- remove_unused_variables = args .remove_unused_variables )
648+ remove_unused_variables = args .remove_unused_variables ,
649+ ignore_init_module_imports = ignore_init_module_imports ,
650+ )
635651
636652 if original_source != filtered_source :
637653 if args .in_place :
@@ -791,6 +807,9 @@ def _main(argv, standard_out, standard_error):
791807 parser .add_argument ('--remove-all-unused-imports' , action = 'store_true' ,
792808 help = 'remove all unused imports (not just those from '
793809 'the standard library)' )
810+ parser .add_argument ('--ignore-init-module-imports' , action = 'store_true' ,
811+ help = 'exclude __init__.py when removing unused '
812+ 'imports' )
794813 parser .add_argument ('--remove-duplicate-keys' , action = 'store_true' ,
795814 help = 'remove all duplicate keys in objects' )
796815 parser .add_argument ('--remove-unused-variables' , action = 'store_true' ,
0 commit comments