Gittle – "argumento de palabra key inesperado 'pkey'"

Intento usar el gittle de la biblioteca para clonar un repository git, seguí los ejemplos en el file léame, aquí está mi código.

repo_path = '/path/to/dir/' repo_url = 'git@gitlab.myproject/proj.git' key = open('/path/to/.ssh/id_rsa') auth = GittleAuth(pkey=key) repo = Gittle.clone(repo_url, repo_path, auth=auth) 

Cuando trato de ejecutar esto, tengo esta exception:

 Traceback (most recent call last): File "gitCmd2.py", line 26, in <module> gitinit() File "gitCmd2.py", line 11, in gitinit repo = Gittle.clone(repo_url, repo_path, auth=auth) File "/.virtualenvs/test_gittle/lib/python2.7/site-packages/gittle/gittle.py", line 439, in clone repo.fetch(bare=bare) File "/.virtualenvs/test_gittle/lib/python2.7/site-packages/gittle/gittle.py", line 406, in fetch remote_refs = self.fetch_remote(origin_uri) File "/.virtualenvs/test_gittle/lib/python2.7/site-packages/gittle/gittle.py", line 363, in fetch_remote client, remote_path = self.get_client(origin_uri=origin_uri) File "/.virtualenvs/test_gittle/lib/python2.7/site-packages/gittle/gittle.py", line 327, in get_client client, remote_path = get_transport_and_path(origin_uri, **client_kwargs) File "/.virtualenvs/test_gittle/lib/python2.7/site-packages/dulwich/client.py", line 1076, in get_transport_and_path return SSHGitClient(host, username=user, **kwargs), path File "/.virtualenvs/test_gittle/lib/python2.7/site-packages/dulwich/client.py", line 879, in __init__ TraditionalGitClient.__init__(self, *args, **kwargs) TypeError: __init__() got an unexpected keyword argument 'pkey' 

El resultado de congelar pip (python2.7):

 dulwich==0.9.5 funky==0.0.2 gittle==0.3.0 mimer==0.0.1 paramiko==1.10.0 pycrypto==2.6 wsgiref==0.1.2 

Gracias.

Este es un problema archivado en github como TypeError: init () obtuvo un argumento de palabra key inesperado 'pkey'

La solución también se describe allí – utilizando alguna versión clonada de dulwich

Tengo el mismo problema a continuación:

TypeError: init () obtuvo un argumento de palabra key inesperado 'pkey'

finalmente lo resolví !!!!! @ 8427003 gracias por su ayuda.

  1. eliminar todos los dulwich

  2. download dulwich-0.9.1-2

  3. instalar el dulwich-0.9.1-2

     python setup.py --pure install 
  4. se refs.py not found error y not found git_line error

  5. descarga dulwich , copy refs.py en site-packages/dulwich-0.9.1-py2.7.egg/dulwich/

  6. ¡Entonces funciona!

Dado que el error es causado por la distribución de dulwich subyacente, hay una solución simple para resolver este problema. Al examinar dulwich.client el problema es que dulwich usa los sistemas de ssh client para realizar las operaciones. Para resolverlo, podrías usar paramiko.SSHClient en paramiko.SSHClient lugar. Este enfoque funcionó para mí también con nuevas versiones de dulwich=0.14 de PyPI:

 import paramiko import dulwich.client from gittle import Gittle pkey = paramiko.RSAKey.from_private_key(open('/your/private/key'), 'passwd') repo = Gittle('/your/repo/path', origin_uri='/your/origin/repo') try: from dulwich.client import ParamikoSSHVendor #for older dulwich versions -> The class was moved except ImportError: from dulwich.contrib.paramiko_vendor import ParamikoSSHVendor #newer versions of dulwich ssh_vendor = ParamikoSSHVendor() ssh_vendor.ssh_kwargs = { 'pkey': pkey } def _get_ssh_vendor(): return ssh_vendor old_get_ssh_vendor = dulwich.client.get_ssh_vendor dulwich.client.get_ssh_vendor = _get_ssh_vendor repo.pull(branch_name='master') dulwich.client.get_ssh_vendor = old_get_ssh_vendor 

De acuerdo con el código get_ssh_vendor function get_ssh_vendor está destinada a ser anulada por los usuarios. Si ahora se está ejecutando el error de host_key faltante: paramiko.SSHException: Server '[0.0.0.0]:0000' not found in known_hosts Este error es causado por ese fragment de código en la class run_command() método run_command() ):

  client = paramiko.SSHClient() policy = paramiko.client.MissingHostKeyPolicy() client.set_missing_host_key_policy(policy) 

Tuve que definir mi propia class paramiko.AutoAddPolicy() pero paramiko.AutoAddPolicy() también debería resolver este problema.