2017-07-10 6 views
0

Ich habe versucht, mein eigenes Pypi-Repository zu erstellen, unter Berücksichtigung https://www.python.org/dev/peps/pep-0503/. Meine Idee war, es in ein freigegebenes Verzeichnis (ich verwende Windows), sagen host1/my-pypi. Ich habe die index.html benötigt generiert:Pip-Installation auf einem freigegebenen Verzeichnis (Windows)

(dir) host1\my-pypi 
    -> (dir) toto 
     (file) index.html 
     (file) toto-1.0.0.whl 
    -> (file) index.html 

die index.html Dateien sehen irgendwie normal (gleiche wie in der pep-503). Ich versuche, von einem anderen Computer, sagen host2, der Zugriff auf dieses gemeinsame Verzeichnis muss toto-Paket zu installieren mit:

pip install --index-url file://host1/my-pipy toto 

aber es funktioniert nicht (wenn es die Datei mit einem OSError: [Errno 22] Invalid argument: '\\\\host1\\my-pypi\\' zu lesen versucht).

Erstens, hat jemand das schon mal versucht (und gelöst)? (Das ist die einfache Lösung :-)).

Zweitens habe ich ein wenig im Code von pip gegraben, und es gibt ein paar Dinge, die mir unklar sind (wenn es jemals einen Profi im Pip gibt, der antworten kann ;-)).

  1. index.py, Methode find_all_candidates: es meine URL-Liste von [file://host1/my-pypi/toto] automatisch ändert, so scheint es, dass es nie host1\my-pypi\index.html ... seltsam zu lesen versucht?

  2. index.py, Methode get_page: gut Punkt 1 ist nicht für mich blockiert, wie es meine Architektur auf magische Weise passt, aber es ist eine seltsame Bedingung:

    # Tack index.html onto file:// URLs that point to directories 
    (scheme, netloc, path, params, query, fragment) = \ 
        urllib_parse.urlparse(url) 
    if (scheme == 'file' and 
         os.path.isdir(urllib_request.url2pathname(path))): 
        # add trailing slash if not present so urljoin doesn't trim 
        # final segment 
        if not url.endswith('/'): 
         url += '/' 
        url = urllib_parse.urljoin(url, 'index.html') 
        logger.debug(' file: URL is directory, getting %s', url) 
    resp = session.get(
        url, 
        headers={ 
         "Accept": "text/html", 
         "Cache-Control": "max-age=600", 
        }, 
    ) 
    

    gut, wie erwartet, haben wir:

    scheme = 'file' 
    netloc = 'host1' 
    path = '/my-pypi/' 
    

    aber die Check-Bedingung os.path.isdir(urllib_request.url2pathname(path))) ist offensichtlich falsch, da wir den Netzwerkstandort verworfen haben. Daher wird index.html nicht an den Pfad angehängt (was sonst korrekt gewesen wäre), und daher der Fehler beim Lesen einer Datei, die nicht existiert.

+0

Eröffnet ein Problem: https://github.com/pypa/pip/issues/4615 –

Antwort

0

Für eine Remote-Dateifreigabe UNC mit vier Schrägstrichen die Datei-URL angeben:

pip install --index-url file:////host1/my-pypi toto 

In diesem Fall wird die analysierte netloc leer ist und die path enthält noch die Server-Hostnamen im UNC-Format, so isdir funktioniert ordnungsgemäß und index.html wird wie erwartet angefügt.

+0

Ich werde es versuchen, wirklich bald und halten Sie auf dem Laufenden, thx. –

Verwandte Themen