Pip: script.pip ()λŠ” use_module = Trueμ—μ„œ μž‘λ™ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

에 λ§Œλ“  2020λ…„ 03μ›” 15일  Β·  6μ½”λ©˜νŠΈ  Β·  좜처: pypa/pip

ν™˜κ²½

  • pip 버전 : 20.1.dev0
  • Python 버전 : 3.6.9
  • 운영체제 : Linux Mint Debian Edition

기술

λ‚˜λŠ”μ΄ # 7810 μž‘μ—… λ™μ•ˆ, λ‚΄κ°€ μ‚¬μš©ν•  λ•Œ 발견 script.pip("freeze") 와 use_module 둜 True λ™μ•ˆ κΈ°λ³Έ λ™μž‘, 그것은 λͺ¨λ“  νŒ¨ν‚€μ§€ λͺ©λ‘μ„ ν‘œμ‹œν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€ use_module λ₯Ό False 둜 λͺ…μ‹œ 적으둜 μ§€μ •ν•˜λ©΄ κ·Έλ ‡κ²Œλ©λ‹ˆλ‹€.

차이점은 λͺ…령이 ν˜ΈμΆœλ˜λŠ” λ°©μ‹μ΄λΌλŠ” 것을 μ•Œμ•˜μŠ΅λ‹ˆλ‹€. 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μ—μ„œ ν…ŒμŠ€νŠΈλ₯Ό μž‘μ„±ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ λ‹€μŒ 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)

μ•„μ•„. 그것은 μ˜λ―Έκ°€ μžˆμŠ΅λ‹ˆλ‹€-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 λ“±κΈ‰