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

如何在gnupgpython绑定中设置GnuPG主目录?,python,gnupg,Python,Gnupg,在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",

在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

我在这里做错了什么?

您应该参考
gnupg
文档,因为它在
gnupghome
处使用了
homedir

请遵循文档,它可能会解决您的问题:

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

  • 使用环境变量:

    GPGHOME=C:\Users\samss\AppData\Roaming\gnupg gpg
    
  • 将其作为参数传递(在配置文件中也可以作为
    homedir
    参数提供):

  • 允许在初始化期间传递一些参数。由于初始化语法的原因,您可能将其与在命令行上定义主目录的环境变量版本混为一谈


    另外一个警告:您可能想访问另一个系统用户的GnuPG主目录。GnuPG对安全权限非常挑剔。对于开发机器,可以使用GnuPG参数
    ——无权限警告和允许相当广泛访问的特权,但是最好从一开始就用一种干净的方法开始,为您的应用程序初始化一个新的GnuPG主目录,该目录可以适当地限制权限。

    当涉及到文档时,有不同的网络来源,有些是homedir,有些是gnupghome。我不知道他们是什么时候改变的,也不知道为什么。 提供OP解决方案的一些简单代码:

    import gnupg
    print gnupg.__version__
    try:
        gpg = gnupg.GPG(gnupghome=homedir) 
    except TypeError:
        gpg = gnupg.GPG(homedir=homedir)
    
    请比较以下两个回溯。这两种情况下的代码相同。在一种情况下,gnupg.GPG预期为“homedir”,在另一种情况下为“gnupghome”。 我在virtualenv中工作,有两个不同的gnupg发行版。 在virtualenv 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(默认,2015年3月1日12:57:24)
    [GCC 4.9.2]关于linux2
    有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
    >>>进口gnupg
    >>>gnupg.\uuuu版本__
    '2.0.2'
    >>>homedir=''
    >>>gpg=gnupg.gpg(homedir=homedir)
    >>>gpg=gnupg.gpg(gnupghome=homedir)
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    TypeError:\uuuu init\uuuuu()获取了意外的关键字参数“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'
    
    Python 2.7.9(默认,2015年3月1日12:57:24)
    [GCC 4.9.2]关于linux2
    有关详细信息,请键入“帮助”、“版权”、“信用证”或“许可证”。
    >>>进口gnupg
    >>>gnupg.\uuuu版本__
    '0.3.6'
    >>>homedir=''
    >>>gpg=gnupg.gpg(gnupghome=homedir)
    >>>gpg=gnupg.gpg(homedir=homedir)
    回溯(最近一次呼叫最后一次):
    文件“”,第1行,在
    TypeError:\uuuu init\uuuuuuuuu()获取了意外的关键字参数“homedir”
    

    不过,我对杰西的老版gnupg感到担忧。有人能详细说明这件事吗

    python gnupg模块至少有3个不同版本。其中至少有2人处于pip状态

    如果执行
    pip安装gnupg
    ,则会得到使用homedir参数的旧模块


    如果您执行了
    pip安装python gnupg
    ,您将获得一个更新的模块。在本例中,您正在阅读的是该模块的文档。

    公平地说,较旧版本确实使用了
    gnupghome
    及其在较旧版本的文档中。在升级一个较旧的脚本设置
    GNUPGHOME
    env时,我也受到了这一点的影响。变量制造问题。。。(Windows操作系统)。实际上,我认为他们甚至将更改向后移植并重新发布。当我卸载/重新安装GNUPG2.3.1时,错误突然出现。疯狂!无论如何,这应该被标记为答案。
    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'