Pip: script.pip()はuse_module = Trueでは機能しません

作成日 2020年03月15日  ·  6コメント  ·  ソース: pypa/pip

環境

  • pipバージョン:20.1.dev0
  • Pythonバージョン:3.6.9
  • OS:Linux Mint Debian Edition

説明

私はこの#7810に取り組んでいましたが、私が使用している場合ことがわかっscript.pip("freeze")use_moduleTrueながら、デフォルトの動作である、それは任意のパッケージリストが表示されませんuse_moduleFalseとして明示的に指定すると、そうなります。

違いは、コマンドの呼び出し方法にあることがわかりました。 use_module=True場合、 python -m pip freezeとして呼び出され、 use_module=False場合、 pip freezeとして呼び出されます。

予想される行動

どちらの場合も、パッケージリストが表示されます。

再現する方法

この動作を検証するためのテストを作成できます。

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

出力

___________________________________________________ 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

全てのコメント6件

このための新しい問題を提出していただきありがとうございます!

私の最初の応答はここにあります:https://github.com/pypa/pip/pull/7810#issuecomment-599191853。 こちらでフォローアップしてください。 :)

あなたが提案したように、ここhttps://github.com/pypa/pip/pull/7810#issuecomment -599191853、私はテストを書きました。 ただし、次の標準出力で失敗します

====================================================== 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)

ああ。 それは理にかなっています-use_moduleを実装した人は誰でもここでのニュアンスを考慮していませんでした。 :)

PipTestEnvironment PATH pipは、テスト対象の正しいアイテムではありません。 TBHの修正方法がわかりません。 use_module = Falseを使用しているときに、実行可能ファイルへの完全な絶対パスを取得している可能性がありますか?

この行はhttps://github.com/pypa/pip/blob/master/tests/lib/__init__.py#L475で、テスト環境のPATHが設定されていますか?

そうあるべきです。 分離フィクスチャにもある可能性があるので、一見の価値があります。

これは、仮想環境のScriptsフォルダーにpip実行可能ファイルがないためです。
したがって、 https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/lib/__init__.py#L619でpython [...]/src/pipを実行できます。
[...]/src/pipは、 https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/conftest.py#L285で定義されている絶対パスを意味し
これが正しいかどうかはわかりません。 しかし、これでバグを修正できます。
また、 https://github.com/pypa/pip/blob/c7bde5bf88c70ac3f807db7d9e7d19745bc0a2e0/tests/conftest.py#L294では、「python」で始まるファイルを除き、 venv.bin (Scriptsフォルダー)内のすべてのファイルが削除されます。または「libpy」、再配置不可とはどういう意味ですか?

このページは役に立ちましたか?
0 / 5 - 0 評価