【问题标题】:How to set the GnuPG home directory within the GnuPG Python binding?如何在 GnuPG Python 绑定中设置 GnuPG 主目录?
【发布时间】:2016-01-27 04:22:43
【问题描述】:

尝试在 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

我在这里做错了什么?

【问题讨论】:

    标签: python gnupg


    【解决方案1】:

    在文档方面有不同的来源,有些使用 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 (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 时,突然弹出错误。疯狂!无论如何,这应该被标记为答案。
    【解决方案2】:

    您应该参考gnupg 文档,因为它使用homedir 代替gnupghome

    请遵循可能会解决您的问题的文档:gnupg python documentation

    【讨论】:

    • 公平地说,旧版本确实使用 gnupghome 及其在旧版本的文档中。升级旧脚本时,我也对此感到厌烦
    【解决方案3】:

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

    如果您执行pip install gnupg,您将获得使用 homedir 参数的旧模块。

    如果你使用pip install python-gnupg,你会得到一个更新的模块。在这种情况下,它是您正在阅读的那个模块的文档。

    【讨论】:

      【解决方案4】:

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

      1. 使用环境变量:

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

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

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

      附加警告:您可能想要访问另一个系统用户的 GnuPG 主目录。 GnuPG非常对安全权限很挑剔。对于开发机器,使用 GnuPG 参数 --no-permission-warning 和允许相当广泛的访问权限可能没问题,但最好从一开始就使用干净的方法,并为您的应用程序初始化一个新的 GnuPG 主目录,该目录可以适当地受到限制关于权限。

      【讨论】:

      • 设置GNUPGHOME 环境。变量产生问题...(Windows 操作系统)。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多