Lingkungan Hidup
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
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?