【问题标题】:GnuPG home directoryGnuPG 主目录
【发布时间】:2017-01-23 06:14:50
【问题描述】:

以下是我一直在尝试的代码。

import os
import gnupg
import pdb
pdb.set_trace()
gpg = gnupg.GPG(gnupghome='new')
input_data = gpg.gen_key_input(
    key_type="RSA",key_length=1024,
    passphrase='mounika')
key = gpg.gen_key(input_data)
with open(local.txt,'rb')as f:
    status=gpg.encrypt_file(f)

以下是正在生成的错误消息。

C:\Python27\python.exe C:/SAAS/encrypt.py
Traceback (most recent call last):
  File "C:/SAAS/encrypt.py", line 4, in <module>
    gpg = gnupg.GPG(gnupghome='new')
  File "C:\Python27\lib\site-packages\gnupg.py", line 755, in __init__
    raise OSError(msg)
OSError: Unable to run gpg - it may not be available.

Process finished with exit code 1

我对 GnuPG 还很陌生,经过一些研究后,我尝试用 homedir 替换 gnupghome。但这引发了另一个错误,即 homedir 是一个意外的关键字。有人可以帮我解决这个问题吗?任何帮助,将不胜感激。

【问题讨论】:

    标签: gnupg home-directory


    【解决方案1】:

    您需要安装gpg 程序并确保它在您的PATH 中。或者在构造函数中提供gpg 二进制文件的完整路径,例如

    gpg = gnupg.GPG(gnupghome='new', gpgbinary='C:\\path\\to\\GnuPG\\pub\\gpg.exe')
    

    查看Deployment Requirements 以获取python-gnupg 包以了解更多信息。

    【讨论】:

    • 你能告诉我你在说什么路径,我该怎么做。我已经完成了部署要求并下载并安装了 gpg 可执行文件。
    • 谢谢您.. 它在某种程度上确实有效。我使用了以下行 ..code.. [ gnupghome='C:\SAAS\wew', gpgbinary='C:\SAAS\gnupg-w32cli-1.4.1.exe'] 这正在创建一个 wew 文件夹.但随后控制台中没有显示任何内容。我尝试使用 pdb 进行调试,但是当我在 pdb 中键入 n 时,那里也没有发生任何事情。
    【解决方案2】:

    正如我所遇到的,主要原因是您的本地机器或服务器没有 gnupg 包,因此您需要使用apt 或您的包管理器安装它。这样就可以解决问题了。

    【讨论】:

      【解决方案3】:

      在最新版本(2.2.0)的python-gnupg(导入为gnupg)中,
      gnupghome=homedir(存储密钥环等)。

      其他一些事情:
      二进制文件(在 Windows 中,即 exe 文件)被定义为“二进制文件”。
      最好指定一个指纹,也许你的local.txt应该是一个字符串('local.txt'),
      我认为您正在使用目前有点过时的saltycrane blog post
      所以下面应该工作(OP代码重构):

      import os
      import gnupg
      import pdb
      pdb.set_trace()
      gpg = gnupg.GPG(homedir='new',
                  binary="C:/Progra~2/GNU/GnuPG/pub/gpg2.exe")
      input_data = gpg.gen_key_input(
          key_type="RSA",key_length=1024,
          passphrase='mounika')
      key = gpg.gen_key(input_data)
      with open(local.txt,'rb')as f:
          status=gpg.encrypt(f, key.fingerprint)
      print status.ok
      print status.status
      print status.stderr
      

      我认为你的代码只是默默地失败了。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-04-21
        • 2016-02-03
        • 2012-12-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多