2016-01-27 16 views
5

Quando si cerca di inizializzare il GnuPG vincolante in Python, sto ottenendo un messaggio di erroreCome impostare la directory home di GnuPG all'interno del binding Python di GnuPG?

TypeError: __init__() got an unexpected keyword argument 'gnupghome' 

Questo è il codice sto correndo:

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='[email protected]') 
key =gpg.gen_key(input_data) 
print key 

che cosa sto facendo male qui?

risposta

2

È necessario fare riferimento alla documentazione gnupg poiché utilizza homedir nel luogo di gnupghome.

Si prega di seguire la documentazione che potrebbe risolvere i vostri problemi: gnupg python documentation

+0

Per essere giusti, le versioni precedenti utilizzavano 'gnupghome' e le sue versioni precedenti della documentazione. Anch'io sono rimasto un po 'per l'aggiornamento di uno script più vecchio – Cfreak

0

GnuPG (come strumento di riga di comando) conosce due modi per specificare la directory home di GnuPG:

  1. Utilizzando una variabile d'ambiente:

    GPGHOME=C:\Users\samss\AppData\Roaming\gnupg gpg 
    
  2. Passarlo come parametro (che è anche disponibile come parametro homedir nella configurazione ione di file):

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

Il GnuPG Python binding permette ad alcuni parametri da passare durante l'inizializzazione. A causa della sintassi di inizializzazione, probabilmente la si è combinata con la versione della variabile di ambiente che definisce la directory home sulla riga di comando.

Un ulteriore avviso: probabilmente si desidera accedere alla home directory di GnuPG di un altro utente di sistema. GnuPG è molto schizzinoso sulle autorizzazioni di sicurezza. Per una macchina di sviluppo, potrebbe essere opportuno utilizzare il parametro GnuPG --no-permission-warning e privilegi che consentono un accesso piuttosto ampio, ma è meglio iniziare con un approccio pulito dall'inizio e inizializzare una nuova directory home di GnuPG per l'applicazione che può essere opportunamente limitata per quanto riguarda le autorizzazioni .

1

Ci sono fonti differnet quando si tratta di documentazione, alcuni con homedir, alcuni con gnupghome. Non so quando lo hanno cambiato o perché. Alcuni codice banale per fornire una soluzione a OP:

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

paragoni per favore i due seguenti traceback. È lo stesso codice in entrambi i casi. In un caso, gnupg.GPG si aspetta 'homedir e nell'altro caso' gnupghome '. Sto lavorando in un virtualenv e ho due diverse distribuzioni di gnupg. Nel GnuPG virtualenv Python sia installato tramite pip:

virtualenv:

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' 

globale:

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' 

mi riguarda dal vecchia versione di GnuPG a Jessie, però. Qualcuno può approfondire la questione?