programing

pip이 아닌 python-m pip을 사용하면 어떤 효과가 있습니까?

javamemo 2023. 7. 14. 23:21
반응형

pip이 아닌 python-m pip을 사용하면 어떤 효과가 있습니까?

를 할 때python -m pip install <package>그것이 단지 사용하는 것과 어떻게 다릅니까?pip install <package>마찬가지로, 내가 왜 글을 쓰겠어요?python -m pip install --upgrade pip핍을 업그레이드하기 위해, 그냥.pip install --upgrade pip?

다음 시나리오를 생각해 보십시오.

다음 세 가지 버전의 Python이 설치되어 있습니다.

  • 파이썬 3.7
  • 파이썬 3.8
  • 파이썬 3.9

기본 버전은 3.8입니다.그것은 당신의 길에 나타나는 첫 번째 것입니다.따라서 입력할 때python3 Mac) (Linux 또는 Mac) 또python(윈도우즈) 셸에서 3.8 인터프리터를 시작합니다. 왜냐하면 그것은 경로를 횡단할 때 발견되는 첫 번째 파이썬 실행 파일이기 때문입니다.

그런 다음 Python 3.9를 사용할 새 프로젝트를 시작한다고 가정합니다.인 다과같환생다성니합경을을 합니다..venv활성화합니다.

python3.9 -m venv .venv         # "py -3.9" on Windows
source .venv/bin/activate    # ".venv\Scripts\activate" on Windows 

이제 Python 3.9를 사용하여 가상 환경을 활성화했습니다.자치 기타를 합니다.python셸에서 3.9 인터프리터를 시작합니다.

그러나 입력할 경우

pip install <some-package>

의 그면어떤버의전러▁version▁then▁of의전▁what버떤.pip사용하시겠습니까?기본 버전의 파이프입니까?Python 3.8 또는 가상 환경 내의 Python 버전?

그 모호함을 피하는 쉬운 방법은 단순히 사용하는 것입니다.

python -m pip install <some-package>

-m플래그는 활성 Python 실행 파일에 연결된 pip을 사용하고 있는지 확인합니다.

상항사는것좋다습니이하용▁to▁use다▁practice좋니▁always▁it습'▁good를 사용하는 것이 좋습니다.-m가상 환경을 생성하는 데 사용되는 Python의 글로벌 버전이 하나만 설치되어 있는 경우에도 마찬가지입니다.

Re. 경로

이른바 경로는 시스템이 실행 파일을 검색하는 디렉터리 목록입니다.명령을 입력할 때 다음과 같이 입력합니다.python이 목록은 첫 번째 디렉터리에서 마지막 디렉터리로 이동하여 입력한 명령과 일치하는 파일 이름을 검색합니다.

파일 이름/명령을 찾으면 나중에 일치할 가능성을 고려하지 않고 일치된 파일이 실행됩니다.일치하는 항목이 없는 경우Command not found또는 그 변형.이 동작은 의도적으로 수행됩니다.

는 UNIX 시스경로환변다불다같립니라고 합니다.$PATH시스는다같표다시니라고 합니다.%PATH%

의견인적에 더 -m-플래그 (2022년 12월)

이것을 보고 있는 대부분의 사람들은 위에 설명된 pip을 원할 것입니다. 더 에서 지만일인의서미에때반적을 할 때는 사할용하▁using.python -m some_module,-m이 flag를 실행하도록 .some_module대본으로서이는 문서에 명시되어 있지만 기본 지식이 없으면 이해하기 어려울 수 있습니다.
"스크립트로 실행"하는 것은 무엇을 의미합니까?

Python에서 Python은some_module으로 적으로다 파이썬 일옵가다로 .import some_module가져오기 파일의 맨 위에 있는 문입니다.를 통해 통를해다정함수의, 클및변사수에 정의된 할 수 .some_module파일을 가져올 수 있습니다.some_module 스크립트로 할 수 .if __name__ == "__main__"파일 내부를 차단합니다.은 실시이블실행다니됩이록을 실행할 때 됩니다.python some_module.py명령행에서. 기능은 다른 파일로 가져올 때 이 코드 블록을 실행하지 않고 명령줄에서 호출할 때 실행하기 때문에 유용합니다.

Python은 터미널에서 실행할 때 작업 디렉터리에서 모듈을 찾기 때문에 프로젝트 내부의 모듈의 경우 이 스크립트/모듈 구조가 그대로 실행되어야 합니다.

python some_module.py

그러나 Python의 Standard Library에 포함된 모듈의 경우에는 이 기능이 작동하지 않습니다.는 Python 문서다사용다니합을 합니다.timeit(pip동일하게 작동):

python3 timeit -s 'print("hello")'  # 'python timeit.py ...' fails as well 

그러면 다음 오류가 반환됩니다."python: can't open file '/home/<username>/timeit': [Errno 2] No such file or directory"

추가-m에게 "Python"의 경로를 찾으라고 .timeit.py합니다.if __name__ == "__main__"파일의 절입니다.

python3 -m timeit -s 'print("hello")'

이것은 예상대로 작동합니다.

.if __name__ == "__main__"시간 블록은 여기에서 확인할 수 있습니다.

Python Docs에서:

인수가 모듈 이름이므로 파일 확장자(.py)를 지정할 수 없습니다.module-name유효한 Python 모듈 이름이어야 하지만 구현이 항상 이 이름을 강제하지는 않을 수 있습니다(예: 하이픈을 포함하는 이름을 사용할 수 있음).

패키지 이름도 허용됩니다.모듈이 가 일모듈대패이제인실면다행니가됩터리터프반공하을 합니다.<pkg>.__main__합니다.이 동작은 스크립트 인수로 인터프리터에 전달되는 디렉토리 및 zip 파일의 처리와 의도적으로 유사합니다.

는 경우력을 하면.python --help

당신은.

// More flags above
-m mod : run library module as a script (terminates option list)
// and more flags below

터미널에 있는 많은 것들이 당신에게 그것을 사용하는 방법을 보여줄 것입니다 만약 당신이 사용한다면.command --help또는man command

-m의 약자module-name.

명령줄환경에서:

파이썬 [-bbdEhi]IOqsSuvVWx?] [-c 명령 | -m module-name | 스크립트 | - ] [args]

-m와 함께 사용됩니다.python을 연 에 " " "라는 이름으로 표시됨"을 입력합니다.<module_name>그러면 모듈을 실행 파일로 실행할 수 있습니다.

내용에 문서를 하거나 python 문서를 실행할 수 .python --help

이것은 사실 흥미로운 질문이기 때문에, 상위 댓글에 있는 @jedwards에 의해 연결된 pep 338에 대해 알아보겠습니다.

-m 플래그는 원래 모듈 이름을 스크립트 이름으로 변환하는 더 간단한 목적으로 사용되었습니다.python 2.4에서 동작은 다음과 같습니다.

the command line is effectively reinterpreted from python <options> -m
<module> <args> to python <options> <filename> <args>.

이것은 별로 유용하지 않은 것처럼 보이지만, 그 당시에는 그렇게 했습니다.펩 338은 이러한 행동을 더욱 확장시킵니다.

제안된 의미론은 상당히 단순합니다. -m을 사용하여 모듈을 실행하는 경우 PEP 302 가져오기 메커니즘은 최상위 모듈에 대한 의미론에 따라 모듈을 실행하기 전에 모듈을 찾고 컴파일된 코드를 검색하는 데 사용됩니다.

python이 모듈의 원본 패키지를 식별하고 표준 프로세스를 사용하여 패키지를 가져오고 모듈을 실행한다는 것을 추가로 설명합니다.제가 알기로는 "python3-m package.module"이라고 부르는 것은 다음과 같습니다.

python3
from package import module

을 -m으로 실행합니다.__file__그리고 아닌__main__또한 스크립트의 디렉터리 대신 로컬 디렉터리를 sys.path에 삽입합니다.따라서 의도적이지는 않았지만 상대적인 수입을 중단하므로 저자는 항상 절대 수입을 사용할 것을 권장합니다."3-m package."는 "3-m module"입니다.

이론적으로 이것은 간단합니다. 코드를 에 버리는 대신 파이썬을 로드하고 모듈을 가져옵니다.실제로는 많은 효과가 있습니다.그것은 다르게 작동하는 다른 수입 시스템입니다.이러한 변경 사항 중 일부는 의도적이지 않았으며 구현 후에만 발견되었습니다.파이썬의 수입은 엉망이고 혼란스러워도 괜찮습니다.

놀랍게도 이것은 어떤 사람들이 그 질문이 너무 간단해서 귀찮다고 말할 때 대답하기가 너무 어렵습니다.

제가 알기로는 실제 목적은 디렉토리에 없을 때 점 표기법을 사용하여 스크립트를 실행할 수 있도록 하는 것입니다.

실행할 수 있습니다.python -m path.to.my.happy.place

안에있대에에 path/to/my/happy 중인 닝러python place.py

pip을 하려면 pip을 업그레이드해야 .pip install --upgrade pip어떤 파이썬 버전이 영향을 받을지 어떻게 알 수 있습니까?셸의 경로 변수에 따라 다릅니다.이 경우 경고를 받을 수도 있습니다.이러한 혼동을 방지하려면 다음을 사용합니다.-m그런 다음 sys.path 변수를 찾습니다.이것은 의 또 다른 장점입니다.-m.

# importing module
import sys
  
# printing all directories for 
# interpreter to search
sys.path

언급URL : https://stackoverflow.com/questions/50821312/what-is-the-effect-of-using-python-m-pip-instead-of-just-pip

반응형