Pip: script.pip () ne fonctionne pas avec use_module = True

Créé le 15 mars 2020  ·  6Commentaires  ·  Source: pypa/pip

Environnement

  • version de pip: 20.1.dev0
  • Version Python: 3.6.9
  • Système d'exploitation: Linux Mint Debian Edition

La description

Pendant que je travaillais sur ce # 7810, j'ai trouvé que lorsque j'utilise script.pip("freeze") avec use_module comme True qui est le comportement par défaut, il n'affiche aucune liste de paquets, alors quand je spécifie explicitement use_module comme False , c'est le cas.

J'ai trouvé que la différence réside dans la façon dont la commande est invoquée. Avec use_module=True , il est invoqué comme python -m pip freeze et avec use_module=False , il est invoqué comme pip freeze .

Comportement prévisible

Dans les deux cas, il devrait afficher la liste des paquets.

Comment reproduire

Un test peut être écrit pour vérifier ce comportement.

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

Production

___________________________________________________ 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

Tous les 6 commentaires

Merci d'avoir déposé un nouveau numéro pour cela!

Ma réponse initiale est ici: https://github.com/pypa/pip/pull/7810#issuecomment-599191853. Veuillez faire un suivi ici. :)

Comme vous l'avez suggéré, ici https://github.com/pypa/pip/pull/7810#issuecomment -599191853, j'ai écrit le test. Cependant, il échoue avec la sortie stdout suivante

====================================================== 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. Cela a du sens - celui qui a implémenté use_module n'a pas pris en compte les nuances ici. :)

pip dans le PipTestEnvironment PATH n'est pas l'élément correct à tester. Je ne sais pas quelle est la solution TBH; peut-être obtenir le chemin absolu complet vers un exécutable, lors de l'utilisation de use_module = False?

Est-ce cette ligne ici https://github.com/pypa/pip/blob/master/tests/lib/__init__.py#L475 , où le PATH pour l'environnement de test est défini?

Ça devrait être, oui. Cela pourrait également être dans le montage isolé, donc cela vaudrait la peine d'y jeter un coup d'œil.

J'ai découvert que c'est parce que nous n'avons pas de fichier exécutable pip dans le dossier Scripts l'environnement virtuel.
Nous pouvons donc exécuter python [...]/src/pip sur https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/lib/__init__.py#L619
[...]/src/pip signifie le chemin absolote défini dans https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/conftest.py#L285
Je ne suis pas sûr que ce soit correct. Mais cela peut corriger le bogue.
Et dans https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/conftest.py#L294 il supprime tous les fichiers dans venv.bin (qui est le dossier Scripts) sauf ceux qui commencent par "python" ou "libpy", que signifie non réadressable?

Cette page vous a été utile?
0 / 5 - 0 notes