Pip: script.pip () funktioniert nicht mit use_module = True

Erstellt am 15. März 2020  ·  6Kommentare  ·  Quelle: pypa/pip

Umgebung

  • Pip-Version: 20.1.dev0
  • Python-Version: 3.6.9
  • Betriebssystem: Linux Mint Debian Edition

Beschreibung

Während ich an diesem # 7810 arbeitete, stellte ich fest, dass bei Verwendung von script.pip("freeze") mit use_module als True was das Standardverhalten ist, keine Paketliste angezeigt wird Wenn ich use_module explizit als False spezifiziere, ist dies der Fall.

Ich habe festgestellt, dass der Unterschied in der Art und Weise liegt, wie der Befehl aufgerufen wird. Mit use_module=True wird es als python -m pip freeze und mit use_module=False als pip freeze aufgerufen.

Erwartetes Verhalten

In beiden Fällen sollte die Paketliste angezeigt werden.

Wie zu reproduzieren

Ein Test kann geschrieben werden, um dieses Verhalten zu überprüfen.

def test_pip_script(script):
    assert script.pip("freeze").stdout == script.pip("freeze", use_module=False).stdout

Ausgabe

___________________________________________________ test_pip_script ___________________________________________________
[gw4] linux -- Python 3.6.9 /home/gutsytechster/Documents/Projects/Open-Source-Projects/pip/.tox/py36/bin/python

script = <tests.lib.PipTestEnvironment object at 0x7f696adfc8d0>

    def test_pip_script(script):
>       assert script.pip("freeze").stdout == script.pip("freeze", use_module=False).stdout
E       AssertionError: assert '' == 'apipkg==1.5\natomicwrites==...zeug==0.16.0\nzipp==3.0.0\n'
E         + apipkg==1.5
E         + atomicwrites==1.3.0
E         + attrs==19.3.0
E         + cffi==1.14.0
E         + coverage==5.0.3
E         + cryptography==2.8
E         + csv23==0.1.6
E         + execnet==1.7.1
E         + freezegun==0.3.15
E         + importlib-metadata==1.5.0
E         + mock==4.0.1
E         + more-itertools==8.2.0
E         + pluggy==0.13.1
E         + pretend==1.0.9
E         + py==1.8.1
E         + pycparser==2.19
E         + pytest==3.8.2
E         + pytest-cov==2.8.1
E         + pytest-forked==1.1.3
E         + pytest-rerunfailures==6.0
E         + pytest-timeout==1.3.4
E         + pytest-xdist==1.27.0
E         + python-dateutil==2.8.1
E         + PyYAML==5.3
E         + scripttest==1.3
E         + six==1.14.0
E         + virtualenv==16.7.10
E         + Werkzeug==0.16.0
E         + zipp==3.0.0
tests bug maintenance

Alle 6 Kommentare

Vielen Dank, dass Sie eine neue Ausgabe dafür eingereicht haben!

Meine erste Antwort ist hier: https://github.com/pypa/pip/pull/7810#issuecomment-599191853. Bitte folgen Sie dem hier. :) :)

Wie Sie vorgeschlagen haben, habe ich hier https://github.com/pypa/pip/pull/7810#issuecomment -599191853 den Test geschrieben. Es schlägt jedoch mit folgendem Standard fehl

====================================================== FAILURES =======================================================
___________________________________________________ test_pip_script ___________________________________________________
[gw3] linux -- Python 3.6.9 /home/gutsytechster/Documents/Projects/Open-Source-Projects/pip/.tox/py36/bin/python

script = <tests.lib.PipTestEnvironment object at 0x7fc79f3b5208>

    def test_pip_script(script):
        r1 = script.pip("--version")
        r2 = script.pip("--version", use_module=False)
>       assert r1.stdout == r2.stdout
E       AssertionError: assert 'pip 20.1.dev...python 3.6)\n' == 'pip 20.1.dev0...python 3.6)\n'
E         - pip 20.1.dev0 from /tmp/pytest-of-gutsytechster/pytest-0/popen-gw3/pip0/pip/src/pip (python 3.6)
E         + pip 20.1.dev0 from /home/gutsytechster/Documents/Projects/Open-Source-Projects/pip/.tox/py36/lib/python3.6/site-packages/pip (python 3.6)

Ahhhh. Das macht Sinn - wer use_module implementiert hat, hat die Nuancen hier nicht berücksichtigt. :) :)

pip in der PipTestEnvironment PATH ist nicht das richtige zu testende Element. Ich bin nicht sicher, was das Update TBH ist; Vielleicht den vollständigen absoluten Pfad zu einer ausführbaren Datei erhalten, wenn use_module = False verwendet wird?

Ist es diese Zeile hier https://github.com/pypa/pip/blob/master/tests/lib/__init__.py#L475 , in der die PATH für die Testumgebung festgelegt werden?

Sollte ja sein. Es könnte sich auch in der Isolatvorrichtung befinden, so dass es sich lohnt, einen Blick darauf zu werfen.

Ich habe herausgefunden, dass dies daran liegt, dass wir keine ausführbare Pip-Datei im Ordner Scripts der virtuellen Umgebung haben.
So können wir python [...]/src/pip unter https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/lib/__init__.py#L619 ausführen
[...]/src/pip den in https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/conftest.py#L285 definierten absoluten Pfad
Ich bin mir nicht sicher, ob das richtig ist. Dies kann jedoch den Fehler beheben.
In https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/conftest.py#L294 werden alle Dateien in venv.bin (dem Skriptordner) entfernt, mit Ausnahme derjenigen, die mit "python" beginnen. oder "libpy", was bedeutet nicht verlagerbar?

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen