首页 > 解决方案 > 获取“OSError:无法运行 gpg () - 它可能不可用。” python-gnupg 出错

问题描述

我正在尝试制作一个简单的工具来解密 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.

标签: pythongnupg

解决方案


这些python-gnupg软件包要求您安装gpg可执行文件。

部署要求文档中:

除了足够新的 Python 版本之外,为了使用这个模块,您需要访问兼容版本的 GnuPG 可执行文件。该系统已在 Windows 和 Ubuntu 上使用 GnuPG v1.4.9 进行了测试。在 Linux 平台上,这通常会通过您的发行版的包管理器安装(例如apt-get,在 Debian/Ubuntu 上)。此处提供 Windows 二进制文件- 使用 gnupg-w32cli-1.4.x.exe安装程序之一获得最简单的部署选项。

你得到的错误很清楚:

OSError: Unable to run gpg () - 它可能不可用。

它来自这一部分:

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

尝试which gpg从终端/控制台运行。如果您没有gpg安装,which gpg将评估为空字符串'',然后整行将评估为空''字符串。它实际上与

gpg = gnupg.GPG('')

这将引发相同的错误,即找不到gpg可执行文件。

所以,基本上,你需要先安装gpg

如果您已经gpg安装并且由于某种原因which gpg找不到它,您也可以传递一个gpgbinary参数

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

推荐阅读