programing

"pip 설치"와 "python-m pip 설치"의 차이점은 무엇입니까?

abcjava 2023. 5. 16. 22:03
반응형

"pip 설치"와 "python-m pip 설치"의 차이점은 무엇입니까?

Python 3.4.1의 로컬 버전이 있으며 실행할 수 있습니다.python -m pip install하지만 실행할 파이프 바이너리를 찾을 수 없습니다.pip install이 둘의 차이점은 무엇입니까?

그들은 정확히 같은 일을 합니다.사실, 파이썬 모듈 배포를 위한 문서는 다음을 사용하도록 제안하기 위해 업데이트되었습니다.python -m pip대신에pip실행 파일, 왜냐하면 실제로 실행하기 위해 어떤 버전의 파이썬이 사용될 것인지를 더 쉽게 알 수 있기 때문입니다.pip그와 같이.


여기 내 말과 내가 링크한 버그 보고서를 신뢰하는 것을 넘어 더 구체적인 "증거"가 있습니다 :)

다음을 보시면,pip실행 가능한 스크립트는 다음과 같습니다.

from pkg_resources import load_entry_point
<snip>
load_entry_point('pip==1.5.4', 'console_scripts', 'pip')()

이것은 함수를 반환하는 호출입니다. 그리고 그 함수를 실행합니다.사용 중인 진입점의 이름은'console_scripts'entry_points를 보시면요.txt 파일:pip(/usr/lib/ntry2.7/dist-info/ntry-1.5.4.ntry-info/entry_points).내 Ubuntu 컴퓨터에서 txt), 다음과 같이 표시됩니다.

[console_scripts]
pip = pip:main
pip2.7 = pip:main
pip2 = pip:main

그래서 반환된 진입점은main에서 기능하는.pip모듈.

실행할 때python -m pip당신은 그것을 실행하고 있습니다.__main__.py내부 스크립트pip꾸러미이것은 다음과 같습니다.

import sys
from .runner import run

if __name__ == '__main__':
    exit = run()
    if exit:
        sys.exit(exit)

그리고.runner.run함수는 다음과 같습니다.

def run():
    base = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    ## FIXME: this is kind of crude; if we could create a fake pip
    ## module, then exec into it and update pip.__path__ properly, we
    ## wouldn't have to update sys.path:
    sys.path.insert(0, base)
    import pip
    return pip.main()

보다시피, 그것은 단지 전화를 거는 것입니다.pip.main기능도 있습니다.그래서 두 명령 모두 동일하게 호출됩니다.main에서 기능하는.pip/__init__.py.

2021

이는 PyCharm으로 venv를 생성하는 경우에만 발생합니다.Scripts/pip-script.py 이 가상 환경에 있는지 확인하십시오.

pip install그리고.python -m pip install사실은 같지 않습니다.아니면 버전 관리 & 의존성의 지옥으로 돌아온 것을 환영합니다 :-(

타이핑에 익숙했습니다.pip(.exe) install <name>패키지 설치를 원할 경우하지만 Pillow 패키지를 설치하려고 하면 문제가 발생합니다.그것은 매번 오류 메시지와 함께 깨집니다.

오늘 나는 다시 시도합니다.python -m pip install설명서에서 복사하여 붙여넣으면 작동합니다.무시하고 pip을 입력하기 전에...왜냐하면 저는 그것이 같다고 생각했기 때문입니다.

저는 pip에 대해 조금 더 깊이 파고들기 시작했고 이 질문/답변을 발견했습니다.잠시 후 저는 그 핍을 발견했습니다.exe는 스크립트를 <virtual-environment/Scripts>pip-script.py 라고 부릅니다.

나는 Pillow 패키지 설치로 싸웁니다.

#! .\venv\Scripts\python.exe
# EASY-INSTALL-ENTRY-SCRIPT: 'pip==19.0.3','console_scripts','pip3'
__requires__ = 'pip==19.0.3'
import re
import sys
from pkg_resources import load_entry_point

if __name__ == '__main__':
    sys.argv[0] = re.sub(r'(-script\.pyw?|\.exe)?$', '', sys.argv[0])
    sys.exit(
        load_entry_point('pip==19.0.3', 'console_scripts', 'pip3')()
    )

저는 pip.exe가 새로운 설치 버전 21.0.1이 아닌 패키지의 이전 버전 19.0.3을 여전히 사용한다는 것에 조금 놀랐습니다.

두 개의 버전 문자열을 손으로 21.0.1로 변경했습니다.그리고 이제 pip.exe는 Pillow를 제대로 설치할 수 있었습니다.

지금부터 나는 왜 pip이 여전히 내가 오래된 버전의 pip을 사용한다고 불평하는지 이해합니다.

여기에 이미지 설명 입력

이전 v19 pip은 지원되는 플랫폼을 감지하는 데 문제가 있어 바이너리 대신 소스가 설치된 것 같습니다.

언급URL : https://stackoverflow.com/questions/25749621/whats-the-difference-between-pip-install-and-python-m-pip-install

반응형