使用 python-gnupg 获得"OSError: Unable to run gpg () - it may not be available."错误



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

python-gnupg软件包要求您具有gpg可执行文件的工作安装。

从部署要求文档中:

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

你得到的错误很清楚:

OSError:无法运行 gpg (( - 它可能不可用。

它来自这部分:

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

尝试从终端/控制台运行which gpg。如果未安装gpgwhich gpg的计算结果将计算为空字符串'',然后整行将计算为空''字符串。它实际上与

gpg = gnupg.GPG('')

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

因此,基本上,您需要先安装gpg

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

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

我花了几个小时试图找到这个问题的解决方案,因为提出的不同解决方案不起作用。

我找到了两个解决方案:

首先,您需要在计算机上找到gpg文件,为此您有多种选择

  • 你可以打开一个命令行并键入gpg --version,你会看到类似这样的内容(如果你没有看到,你需要从官方网站下载 GnuPG(:
gpg (GnuPG) 2.3.8
libgcrypt 1.10.1
Copyright (C) 2021 g10 Code GmbH
License GNU GPL-3.0-or-later <https://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
Home: C:UsersUSERNAMEAppDataRoaminggnupg
Supported algorithms:
Pubkey: RSA, ELG, DSA, ECDH, ECDSA, EDDSA
Cipher: IDEA, 3DES, CAST5, BLOWFISH, AES, AES192, AES256, TWOFISH,
CAMELLIA128, CAMELLIA192, CAMELLIA256
AEAD: EAX, OCB
Hash: SHA1, RIPEMD160, SHA256, SHA384, SHA512, SHA224
Compression: Uncompressed, ZIP, ZLIB, BZIP2
  • Home是我们正在寻找的文件夹。转到该路径,看看是否找到gpg,如果是,那就是路径。
  • 如果你没有找到gpg文件,你可以C:UsersUSERNAMEAppDataLocalgnupgbin中查找,这就是我找到它的地方。

找到路径后,您必须将该路径添加到系统环境变量中

  • 根据您的系统,过程是不同的。您可以看到解释该过程的其他讨论。

  • 完成此操作后,您的程序应该可以正常工作

如果没有,您可以尝试

gpg = gnupg.GPG(gpgbinary="C:\Users\USERNAME\AppData\Local\gnupg\bin\gpg")

将路径替换为找到的路径

相关内容

最新更新