Pip: script.pip () tidak berfungsi dengan use_module = True

Dibuat pada 15 Mar 2020  ·  6Komentar  ·  Sumber: pypa/pip

Lingkungan Hidup

  • versi pip: 20.1.dev0
  • Versi Python: 3.6.9
  • OS: Edisi Linux Mint Debian

Deskripsi

Ketika saya mengerjakan # 7810 ini, saya menemukan bahwa ketika saya menggunakan script.pip("freeze") dengan use_module sebagai True yang merupakan perilaku default, itu tidak menampilkan daftar paket apa pun, sementara ketika saya secara eksplisit menentukan use_module sebagai False , itu benar.

Saya menemukan bahwa perbedaannya adalah cara perintah tersebut dipanggil. Dengan use_module=True , itu dipanggil sebagai python -m pip freeze dan dengan use_module=False , itu dipanggil sebagai pip freeze .

Perilaku yang diharapkan

Kedua cara, itu harus menampilkan daftar paket.

Bagaimana cara bereproduksi

Tes dapat ditulis untuk memverifikasi perilaku ini.

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

Keluaran

___________________________________________________ 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

Semua 6 komentar

Terima kasih telah mengajukan masalah baru untuk ini!

Tanggapan awal saya ada di sini: https://github.com/pypa/pip/pull/7810#issuecomment-599191853. Tolong lakukan tindak lanjut di sini. :)

Seperti yang Anda sarankan, di sini https://github.com/pypa/pip/pull/7810#issuecomment -599191853, saya telah menulis tesnya. Namun, gagal dengan mengikuti stdout

====================================================== 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. Itu masuk akal - siapa pun yang menerapkan use_module tidak memperhitungkan nuansa di sini. :)

pip di PipTestEnvironment PATH bukan item yang benar untuk diuji. Saya tidak yakin apa perbaikannya TBH; mungkin mendapatkan jalur absolut penuh ke file yang dapat dieksekusi, saat menggunakan use_module = False?

Apakah baris ini ada di sini https://github.com/pypa/pip/blob/master/tests/lib/__init__.py#L475 , di mana PATH untuk lingkungan pengujian disetel?

Harus, ya. Mungkin juga di fixture terisolasi, jadi itu layak untuk dilihat.

Saya menemukan ini karena kami tidak memiliki file pip yang dapat dieksekusi di folder Scripts lingkungan virtual.
Jadi kita dapat mengeksekusi python [...]/src/pip di https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/lib/__init__.py#L619
[...]/src/pip berarti jalur absolot yang ditentukan di https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/conftest.py#L285
Saya tidak yakin ini benar. Tapi ini bisa memperbaiki bug.
Dan di https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/conftest.py#L294 menghapus semua file di venv.bin (yang merupakan folder Scripts) kecuali yang dimulai dengan "python" atau "libpy", apa artinya non-relocatable?

Apakah halaman ini membantu?
0 / 5 - 0 peringkat