podgorniy/alfred-translate

Обновление Mac 12.3 убило работу Workflow

CaptainMalReynolds opened this issue · 19 comments

Последнее обновление Mac OS отказывается от Python 2 в пользу Python 3, и скрипт перестал работать полностью.
Возможно ли обновление скрипта чтобы переводчик начал снова работать?

Я портировал на python3 в своем форке: https://github.com/pavel-alay/alfred-translate.
На macOS Monterey 12.2.1 полет нормальный.

@pavel-alay Спасибо, работает! Нужно было только вручную инсталлировать aiohttp библиотеку.

А у меня на 12.3 не хочет корректно работать. Пишет "Translating / Перевожу", но никакого результата на экран не выводиться.

@eugen-nesterov Надо попробовать использовать с логом в альфреде и смотреть что говорит. Либо же просто из консоли смотреть что за ошибка.

@pavel-alay Спасибо, работает! Нужно было только вручную инсталлировать aiohttp библиотеку.

Команда для установки
pip3 install aiohttp

Форк работает на MacOS 12.3.1

Форк не работает на 12.4 (только обновился с 12.2), aiohttp библиотеку установил. Просто команда не выводит ничего, как было до апдейта на 12.3.

Добавлю, что не работают также воркфлоу, которые переписали для работы на 12.3+ с вручную установленным Python 2 (через Homebrew), вот тред.

Переустанавливал Альфред с полной очисткой кэша через системные папки, не помогло. Есть идеи?

@grivachev Можно попробовать в самом альфреде запустить на форкфлоу лог и посмотреть что пишут

Я пробовал инсталлировать модуль через pip3 install aiohttp но он инсталлировался не в то окружение и дебаг в альфреде все равно писал ModuleNotFoundError: No module named 'aiohttp'.

Помогло python -m pip install aiohttp

@denisborovikov не работает так у меня — возможно, потому что я на M1, но не уверен.

m.grivachev@macbook-m ~ % python -m pip install aiohttp
zsh: command not found: python

@CaptainMalReynolds а как это там сделать? сори, я чайник и в питоне максимум пандас использовал. поверхностный гугл не помог

@grivachev Я тоже на M1. zsh: command not found: python у меня такое тоже было, не помню что конкретно делал, можно попробовать добавить линк sudo ln -s /usr/bin/python3 /usr/bin/python, здесь в первой половине должно быть то что возвращает which python3.

Как вариант попробовать python3 -m pip install aiohttp, возможно python3 -m pip3 install aiohttp

Дебаг в альфред, нажать на иконку жука вверху справа, потом не закрывая это окно запустить поиск в альфреде как обычно, внизу будет лог.
image

@grivachev Вот выше отличный скриншот и рекомендации дал @denisborovikov - у меня тоже М1 и те же проблемы были.

Спасибо всем. Команда от @denisborovikov выдает следующее:

m.grivachev@macbook-m ~ % sudo ln -s /usr/bin/python3 /usr/bin/python
Password:
ln: /usr/bin/python: Operation not permitted

Погуглил, добавил Терминал в Full Disk Access, перезагрузил — не помогло. Замечу, что я не администратор компа (он корпоративный), но права у меня достаточно широкие и Homebrew, например, разрешал устанавливаться.

Вот логи альфреда:

image

UPD: python3 -m pip install aiohttp выдает такое (скрин ниже); вроде установил раньше без проблем по команде которую давали выше в ветке. Команда python3 -m pip3 install aiohttp выдает No module named pip3

image

Судя по всему, aiohttp уже установлен, а вот бинарник python3 в usr/local/bin/python3 не находится. Попробуйте переустановить через homebrew brew update && brew reinstall python. Можно попробовать перелинковать brew unlink python@3.9 && brew link python@3.9, в последней команде возможно другая версия. Правда после переустановки возможно нужно будет опять установить aiohttp.

Везде пишу возможно, потому что я не настоящий сварщик, я так же проходил через эти шаги и что-то помогло.

Кстати вот еще вариант - если в терминале написать python3то питон запускается? Если да, то можно просто прописать другой путь, в альфреде открыть воркфлоу, дважды кликнуть на Script filter - тот что с синей иконкой глобуса и usr/local/bin/python3 поменять на просто python3. Для второй иконки тоже самое.

@denisborovikov второй способ сработал. Ура, а то я отчаялся совсем уже — теперь осталось починить нерабочие воркфлоу на втором питоне, щас буду через хомбрю бороться.

Спасибо большое!

Кстати вот еще вариант - если в терминале написать python3то питон запускается? Если да, то можно просто прописать другой путь, в альфреде открыть воркфлоу, дважды кликнуть на Script filter - тот что с синей иконкой глобуса и usr/local/bin/python3 поменять на просто python3. Для второй иконки тоже самое.

А как вот с такой проблемой бороться?

[12:21:21.513 PM] Translate[[Script Filter](alfredpreferences:workflows%3Eworkflow%3Euser.workflow.A111DBCF-5725-4C75-9BEC-F3A446A3DA13%3E94EED11C-93A9-4FF4-8F28-14E546743485)] Queuing argument 'head'
[12:21:23.021 PM] Translate[[Script Filter](alfredpreferences:workflows%3Eworkflow%3Euser.workflow.A111DBCF-5725-4C75-9BEC-F3A446A3DA13%3E94EED11C-93A9-4FF4-8F28-14E546743485)] Script with argv '(null)' finished
[12:21:23.021 PM] ERROR: Translate[[Script Filter](alfredpreferences:workflows%3Eworkflow%3Euser.workflow.A111DBCF-5725-4C75-9BEC-F3A446A3DA13%3E94EED11C-93A9-4FF4-8F28-14E546743485)] Code 1: Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/aiohttp/connector.py", line 986, in _wrap_create_connection
    return await self._loop.create_connection(*args, **kwargs)  # type: ignore[return-value]  # noqa
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 989, in create_connection
    ssl_handshake_timeout=ssl_handshake_timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 1017, in _create_connection_transport
    await waiter
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/sslproto.py", line 530, in data_received
    ssldata, appdata = self._sslpipe.feed_ssldata(data)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/sslproto.py", line 189, in feed_ssldata
    self._sslobj.do_handshake()
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/ssl.py", line 774, in do_handshake
    self._sslobj.do_handshake()
ssl.SSLCertVerificationError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1091)

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "./translate.py", line 179, in <module>
    print(get_output(sys.argv[1]))
  File "./translate.py", line 150, in get_output
    responses = asyncio.run(process_requests(input_string))
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/runners.py", line 43, in run
    return loop.run_until_complete(main)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/asyncio/base_events.py", line 587, in run_until_complete
    return future.result()
  File "./translate.py", line 137, in process_requests
    process_translate_request(input_string, source_lang, target_lang, session)
  File "./translate.py", line 109, in process_vocabulary_request
    return await process_get_response_as_json(article_url, session)
  File "./translate.py", line 83, in process_get_response_as_json
    async with session.get(url=url) as response:
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/aiohttp/client.py", line 1138, in __aenter__
    self._resp = await self._coro
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/aiohttp/client.py", line 536, in _request
    req, traces=traces, timeout=real_timeout
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/aiohttp/connector.py", line 542, in connect
    proto = await self._create_connection(req, traces, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/aiohttp/connector.py", line 907, in _create_connection
    _, proto = await self._create_direct_connection(req, traces, timeout)
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/aiohttp/connector.py", line 1206, in _create_direct_connection
    raise last_exc
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/aiohttp/connector.py", line 1187, in _create_direct_connection
    client_error=client_error,
  File "/Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages/aiohttp/connector.py", line 988, in _wrap_create_connection
    raise ClientConnectorCertificateError(req.connection_key, exc) from exc
aiohttp.client_exceptions.ClientConnectorCertificateError: Cannot connect to host dictionary.yandex.net:443 ssl:True [SSLCertVerificationError: (1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate (_ssl.c:1091)')]

Быстрый гуглеж дает вот эту ссылку https://stackoverflow.com/questions/27835619/urllib-and-ssl-certificate-verify-failed-error

Похоже на специфическую проблему для версии python и OSX. Но это не точно.

Сделал PR где перевел workflow на python3
Сейчас можете воспользоваться моим форком