httpie / cli

🥧 HTTPie CLI — modern, user-friendly command-line HTTP client for the API era. JSON support, colors, sessions, downloads, plugins & more.
https://httpie.io
BSD 3-Clause "New" or "Revised" License
33.56k stars 3.67k forks source link

--help fails with a traceback when pip is not installed #1418

Closed classabbyamp closed 2 years ago

classabbyamp commented 2 years ago

Checklist


Minimal reproduction code and steps

  1. http --help or https --help

Current result

output with traceback ```py $ http --help Traceback (most recent call last): File "/usr/bin/http", line 33, in sys.exit(load_entry_point('httpie==3.2.1', 'console_scripts', 'http')()) File "/usr/lib/python3.10/site-packages/httpie/__main__.py", line 9, in main exit_status = main() File "/usr/lib/python3.10/site-packages/httpie/core.py", line 162, in main return raw_main( File "/usr/lib/python3.10/site-packages/httpie/core.py", line 77, in raw_main parsed_args = parser.parse_args( File "/usr/lib/python3.10/site-packages/httpie/cli/argparser.py", line 159, in parse_args self.args, no_options = super().parse_known_args(args, namespace) File "/usr/lib/python3.10/argparse.py", line 1859, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python3.10/argparse.py", line 2068, in _parse_known_args start_index = consume_optional(start_index) File "/usr/lib/python3.10/argparse.py", line 2008, in consume_optional take_action(action, args, option_string) File "/usr/lib/python3.10/argparse.py", line 1936, in take_action action(self, namespace, argument_values, option_string) File "/usr/lib/python3.10/argparse.py", line 1099, in __call__ parser.print_help() File "/usr/lib/python3.10/argparse.py", line 2556, in print_help self._print_message(self.format_help(), file) File "/usr/lib/python3.10/argparse.py", line 2533, in format_help formatter.add_arguments(action_group._group_actions) File "/usr/lib/python3.10/argparse.py", line 277, in add_arguments self.add_argument(action) File "/usr/lib/python3.10/argparse.py", line 258, in add_argument if action.help is not SUPPRESS: File "/usr/lib/python3.10/site-packages/httpie/cli/utils.py", line 60, in help self.load(), File "/usr/lib/python3.10/site-packages/httpie/cli/utils.py", line 51, in load self._obj = self.getter() File "/usr/lib/python3.10/site-packages/httpie/output/formatters/colors.py", line 37, in get_available_styles return sorted(BUNDLED_STYLES | set(pygments.styles.get_all_styles())) File "/usr/lib/python3.10/site-packages/pygments/styles/__init__.py", line 92, in get_all_styles for name, _ in find_plugin_styles(): File "/usr/lib/python3.10/site-packages/pygments/plugin.py", line 63, in find_plugin_styles for entrypoint in iter_entry_points(STYLE_ENTRY_POINT): File "/usr/lib/python3.10/site-packages/pygments/plugin.py", line 45, in iter_entry_points import pkg_resources File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 3260, in def _initialize_master_working_set(): File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 3234, in _call_aside f(*args, **kwargs) File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 3272, in _initialize_master_working_set working_set = WorkingSet._build_master() File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 581, in _build_master ws.require(__requires__) File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 909, in require needed = self.resolve(parse_requirements(requirements)) File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 795, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'pip' distribution was not found and is required by httpie ```

Expected result

The help message


Debug output

Please re-run the command with --debug, then copy the entire command & output and paste both below:

debug output ```py http --debug --help HTTPie 3.2.1 Requests 2.27.1 Pygments 2.12.0 Python 3.10.5 (main, Jun 8 2022, 02:00:39) [GCC 10.2.1 20201203] /usr/bin/python3 Linux 5.15.45_1 , 'args': Namespace(), 'as_silent': , 'colors': 256, 'config': {'default_options': []}, 'config_dir': PosixPath('/home/abby/.config/httpie'), 'devnull': , 'is_windows': False, 'log_error': , 'program_name': 'http', 'quiet': 0, 'rich_console': , 'rich_error_console': , 'show_displays': True, 'stderr': <_io.TextIOWrapper name='' mode='w' encoding='utf-8'>, 'stderr_isatty': True, 'stdin': <_io.TextIOWrapper name='' mode='r' encoding='utf-8'>, 'stdin_encoding': 'utf-8', 'stdin_isatty': True, 'stdout': <_io.TextIOWrapper name='' mode='w' encoding='utf-8'>, 'stdout_encoding': 'utf-8', 'stdout_isatty': True}> , , ], 'converters': [], 'formatters': [, , , ]}> Traceback (most recent call last): File "/usr/bin/http", line 33, in sys.exit(load_entry_point('httpie==3.2.1', 'console_scripts', 'http')()) File "/usr/lib/python3.10/site-packages/httpie/__main__.py", line 9, in main exit_status = main() File "/usr/lib/python3.10/site-packages/httpie/core.py", line 162, in main return raw_main( File "/usr/lib/python3.10/site-packages/httpie/core.py", line 77, in raw_main parsed_args = parser.parse_args( File "/usr/lib/python3.10/site-packages/httpie/cli/argparser.py", line 159, in parse_args self.args, no_options = super().parse_known_args(args, namespace) File "/usr/lib/python3.10/argparse.py", line 1859, in parse_known_args namespace, args = self._parse_known_args(args, namespace) File "/usr/lib/python3.10/argparse.py", line 2068, in _parse_known_args start_index = consume_optional(start_index) File "/usr/lib/python3.10/argparse.py", line 2008, in consume_optional take_action(action, args, option_string) File "/usr/lib/python3.10/argparse.py", line 1936, in take_action action(self, namespace, argument_values, option_string) File "/usr/lib/python3.10/argparse.py", line 1099, in __call__ parser.print_help() File "/usr/lib/python3.10/argparse.py", line 2556, in print_help self._print_message(self.format_help(), file) File "/usr/lib/python3.10/argparse.py", line 2533, in format_help formatter.add_arguments(action_group._group_actions) File "/usr/lib/python3.10/argparse.py", line 277, in add_arguments self.add_argument(action) File "/usr/lib/python3.10/argparse.py", line 258, in add_argument if action.help is not SUPPRESS: File "/usr/lib/python3.10/site-packages/httpie/cli/utils.py", line 60, in help self.load(), File "/usr/lib/python3.10/site-packages/httpie/cli/utils.py", line 51, in load self._obj = self.getter() File "/usr/lib/python3.10/site-packages/httpie/output/formatters/colors.py", line 37, in get_available_styles return sorted(BUNDLED_STYLES | set(pygments.styles.get_all_styles())) File "/usr/lib/python3.10/site-packages/pygments/styles/__init__.py", line 92, in get_all_styles for name, _ in find_plugin_styles(): File "/usr/lib/python3.10/site-packages/pygments/plugin.py", line 63, in find_plugin_styles for entrypoint in iter_entry_points(STYLE_ENTRY_POINT): File "/usr/lib/python3.10/site-packages/pygments/plugin.py", line 45, in iter_entry_points import pkg_resources File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 3260, in def _initialize_master_working_set(): File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 3234, in _call_aside f(*args, **kwargs) File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 3272, in _initialize_master_working_set working_set = WorkingSet._build_master() File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 581, in _build_master ws.require(__requires__) File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 909, in require needed = self.resolve(parse_requirements(requirements)) File "/usr/lib/python3.10/site-packages/pkg_resources/__init__.py", line 795, in resolve raise DistributionNotFound(req, requirers) pkg_resources.DistributionNotFound: The 'pip' distribution was not found and is required by httpie ```

Additional information, screenshots, or code examples

This was done using void linux's httpie package

classabbyamp commented 2 years ago

solved by patching pygments to use importlib.metadata (https://github.com/pygments/pygments/pull/2155)