如何在GnuPG的Python绑定中设置GnuPG主目录?

10
尝试在Python中初始化GnuPG绑定时,我收到错误消息。
TypeError: __init__() got an unexpected keyword argument 'gnupghome'

这是我正在运行的代码:

import gnupg
gpg = gnupg.GPG(gnupghome='C:\Users\samss\AppData\Roaming\gnupg')
input_data = gpg.gen_key_input(key_type="RSA",
                           key_length=1024,
                           passphrase='n0sm@sy0')
key =gpg.gen_key(input_data)
print key

我在这里做错了什么?

4个回答

7

Python gnupg模块至少有3个不同的版本,其中至少有2个在pip中。

如果你使用pip install gnupg命令,会安装旧版本模块,该模块使用homedir参数。

如果你使用pip install python-gnupg命令,则会安装新版本模块。在这种情况下,你正在阅读该模块的文档。


精彩的回答 - 需要更多的赞同 - Andy

4

在文档方面,有不同的来源,一些是使用homedir,一些是使用gnupghome。我不知道他们何时更改或为什么更改。 以下是一些简单的代码,用于提供解决方案:

import gnupg
print gnupg.__version__
try:
    gpg = gnupg.GPG(gnupghome=homedir) 
except TypeError:
    gpg = gnupg.GPG(homedir=homedir)

请比较以下两个回溯。这是相同的代码。在一个案例中,gnupg.GPG期望'homedir',在另一个案例中是'gnupghome'。 我正在虚拟环境中工作,并且有两个不同的gnupg发行版。 在虚拟环境中,Python gnupg是通过pip安装的:
虚拟环境:
Python 2.7.9 (default, Mar  1 2015, 12:57:24) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gnupg
>>> gnupg.__version__
'2.0.2'
>>> homedir=''
>>> gpg = gnupg.GPG(homedir=homedir)
>>> gpg = gnupg.GPG(gnupghome=homedir)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() got an unexpected keyword argument 'gnupghome'

全局:

Python 2.7.9 (default, Mar  1 2015, 12:57:24) 
[GCC 4.9.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import gnupg
>>> gnupg.__version__
'0.3.6'
>>> homedir=''
>>> gpg = gnupg.GPG(gnupghome=homedir)
>>> gpg = gnupg.GPG(homedir=homedir)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: __init__() got an unexpected keyword argument 'homedir'

我对jessie中旧版本的gnupg感到担忧。有人能详细说明一下吗?


我认为他们实际上已经进行了变更的回溯并重新发布。当我卸载/重新安装gnupg 2.3.1时,错误突然出现了。太疯狂了!无论如何,这应该被标记为答案。 - ingyhere

3

在相关文档中,homedir 被用来代替 gnupghome。如果您遇到问题,请参考文档解决:gnupg python documentation


1
老实说,旧版本确实使用了gnupghome,并且在旧版本的文档中有提到。当我升级一个旧脚本时,我也遇到了这个问题。 - Cfreak

1

GnuPG(作为命令行工具)有两种指定GnuPG主目录的方法:

  1. Using an environment variable:

    GPGHOME=C:\Users\samss\AppData\Roaming\gnupg gpg
    
  2. Passing it as a parameter (which is also available as homedir parameter in the configuration file):

    gpg --homedir=C:\Users\samss\AppData\Roaming\gnupg
    

GnuPG Python binding允许在初始化期间传递一些参数。由于初始化语法,您可能会将其与通过命令行定义主目录的环境变量版本混淆。

另一个警告:您可能想要访问另一个系统用户的GnuPG主目录。 GnuPG对安全权限非常挑剔。对于开发机器,使用GnuPG参数--no-permission-warning和允许相当广泛访问的特权可能是可以接受的,但最好从一开始就采用清洁的方法为应用程序初始化新的GnuPG主目录,以便可以正确限制权限。


设置 GNUPGHOME 环境变量会出现问题...(Windows 操作系统)。 - Yousha Aleayoub

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接