Получение «OSError: Невозможно запустить gpg () - он может быть недоступен». ошибка с python-gnupg - PullRequest
0 голосов
/ 19 октября 2019

Я пытаюсь создать простой инструмент, который расшифровывает сообщение GPG, но я продолжаю получать сообщение об ошибке расшифровки сообщения, я не знаю, откуда возникает проблема.

Вот код:

import gnupg
import os

message = '''-----BEGIN PGP MESSAGE-----
Version: GnuPG v2
jA0ECQMCVady3RUyJw3X0kcBF+zdkfZOMhISoYBRwR3uk3vNv+TEg+rJnp4/yYIS
pEoI2S82cDiCNBIVAYWB8WKPtH2R2YSussKhpSJ4mFgqyOA01uwroA==
=KvJQ
-----END PGP MESSAGE----- 
'''

passphrase = 'topsecret'

gpg = gnupg.GPG(os.popen("which gpg").read().strip())

decrypted_data = str(gnupg.decrypt(message, passphrase=passphrase))

print(decrypted_data) 

Вот ошибка:

PermissionError: [Errno 13] Permission denied: ''

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 29, in <module>
    gpg = gnupg.GPG(os.popen("which gpg").read().strip())
  File "/Users/***/PycharmProjects/untitled8/venv/lib/python3.6/site-packages/gnupg.py", line 849, in __init__
    raise OSError(msg)
OSError: Unable to run gpg () - it may not be available.

1 Ответ

0 голосов
/ 19 октября 2019

Для пакетов python-gnupg требуется рабочая установка исполняемого файла gpg.

Из Требования к развертыванию документы:

Отдельноиз достаточно недавней версии Python, чтобы использовать этот модуль, вы должны иметь доступ к совместимой версии исполняемого файла GnuPG. Система была протестирована с GnuPG v1.4.9 на Windows и Ubuntu. На платформе Linux он обычно устанавливается через менеджер пакетов вашего дистрибутива (например, apt-get в Debian / Ubuntu). Двоичные файлы Windows доступны здесь - используйте один из gnupg-w32cli-1.4.x.exe установщиков для самых простых вариантов развертывания.

Полученная ошибка была довольно очевидна:

OSError: Невозможно запустить gpg () - он может быть недоступен.

Это из этой части:

os.popen("which gpg").read().strip()

Попробуйте запустить which gpg с терминала / консоли,Если у вас не установлен gpg, which gpg будет оцениваться в пустую строку '', а затем вся эта строка будет оцениваться в пустую строку ''. Фактически это будет то же самое, что и

gpg = gnupg.GPG('')

, что вызовет ту же ошибку, что он не может найти исполняемый файл gpg.

Так что, в основном, вам нужно установить gpg first.

Если у вас уже установлено gpg и по какой-то причине which gpg просто не может его найти, вы также можете передать параметр gpgbinary :

gpg = gnupg.GPG(gpgbinary="/usr/local/bin/gpg")
...