Brew указан как рекомендуемый способ установки httpie на macOS. Однако это не работает с плагинами аутентификации.
Например, если вы pip3 install requests-hawk
и затем запустите http --help
hawk не будет отображаться как тип аутентификации. Если вы pip3 install httpie-oauth
он установит httpie через pip в качестве зависимости и перезапишет установленную ссылку brew в /usr/local/bin/http
и теперь все плагины будут отображаться, потому что он не использует установленную версию brew.
Я предлагаю изменить документацию на pip3 install httpie
как рекомендуемый метод установки на macOS.
@rshurts ты прав. Установка плагина для установки на основе Homebrew не работает из коробки.
Тем не менее, использование Homebrew в качестве рекомендуемого метода имеет свои преимущества. Это упрощает обновление, а основной пакет может зависеть от Python 3 (улучшенная поддержка SSL и т. Д.).
Идеальным мировым решением было бы иметь все плагины в виде пакетов Homebrew ( brew install httpie-oauth
). Но это означало бы дополнительную работу для сопровождающих, чтобы не все плагины попали в Homebrew.
Использование pip
для установки плагинов кажется более простым способом. Чтобы заставить его работать с Hombrew, это будет означать указание pip
использовать (в настоящее время) /usr/local/Cellar/httpie/0.9.8_2/libexec/lib/python3.6/site-packages
в качестве каталога установки.
Но установленные там плагины не выдержат обновлений HTTPie.
Возможно, можно было бы настроить формулу Homebrew, чтобы разрешить HTTPie загружать установленные плагины, например, из Homebrew Python 3 site-packages
(не уверен, что это навсегда). Или из другого места.
… Или какой-то специальный установщик плагинов.
Между тем, возможно, заметка в документации к плагинам, в которой говорится, что «brew не работает с плагинами, и установить httpie для функциональности плагина», избавит от некоторых головных болей.
Также существует проблема с правами чтения, когда у пользователя нет прав администратора:
$ http --help
Traceback (most recent call last):
File "/usr/local/bin/http", line 6, in <module>
from pkg_resources import load_entry_point
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3123, in <module>
<strong i="6">@_call_aside</strong>
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3107, in _call_aside
f(*args, **kwargs)
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 3136, in _initialize_master_working_set
working_set = WorkingSet._build_master()
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 569, in _build_master
ws = cls()
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 562, in __init__
self.add_entry(entry)
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 618, in add_entry
for dist in find_distributions(entry, True):
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1965, in find_on_path
for dist in factory(fullpath):
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2035, in distributions_from_metadata
root, entry, metadata, precedence=DEVELOP_DIST,
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2492, in from_location
py_version=py_version, platform=platform, **kw
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2867, in _reload_version
md_version = _version_from_file(self._get_metadata(self.PKG_INFO))
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2456, in _version_from_file
line = next(iter(version_lines), '')
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 2646, in _get_metadata
for line in self.get_metadata_lines(name):
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1411, in get_metadata_lines
return yield_lines(self.get_metadata(name))
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1407, in get_metadata
value = self._get(self._fn(self.egg_info, name))
File "/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1519, in _get
with open(path, 'rb') as stream:
PermissionError: [Errno 13] Permission denied: '/usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/idna-2.7-py3.7.egg-info/PKG-INFO'
Я смог исправить это с помощью
chmod +r /usr/local/Cellar/httpie/1.0.0/libexec/lib/python3.7/site-packages/idna-2.7-py3.7.egg-info/PKG-INFO
но перешел на pip3 install httpie
потому что это упростило установку плагинов.
Поскольку я обновился до 10.14 Mojave, у меня возникла ошибка разрешений, упомянутая выше pip3 list
показывает только 3 элемента, которые предположительно были частью начального пакета Python.
Является ли это фундаментальной проблемой Python3 (по крайней мере, Python, установленный через homebrew)? Следует ли мне сообщать об этом сопровождающим?
Что бы это ни стоило, и, возможно, другие пользователи ищут ответ в Google, установка плагина отлично работала для меня, например:
pip3 install -t /usr/local/Cellar/httpie/2.0.0/libexec/lib/python3.8/site-packages httpie-jwt-auth
Спасибо https://github.com/jakubroztocil/httpie/issues/566#issuecomment -285210693
Самый полезный комментарий
Между тем, возможно, заметка в документации к плагинам, в которой говорится, что «brew не работает с плагинами, и установить httpie для функциональности плагина», избавит от некоторых головных болей.