python
기본 실행 파일과 다른 실행 파일에서 실행되는 Python 스크립트가 있습니다 .
/usr/bin
및 /mydir/mybins
.
내가 실행하면 다음을 얻습니다.
$which python
/usr/bin/python
실행 중인 경우 run.py
:
# cat run.py
#!/usr/bin/env /mydir/mybins/python
import os
import sys
print(u"Python executable: %s" % sys.executable)
print(u"From within Python PATH=%s" % os.environ[u"PATH"])
알겠어요
# ./run.py
Python executable: /mydir/mybins/python
From within Python PATH=/usr/bin:... (and no /mydir/mybins)
왜? 이것은 의도적으로 설계된 것입니까? /usr/bin/python
코드를 변경하지 않고 어떻게 사용할 수 있나요 ?
답변1
유틸리티 env
는 해당 인수를 명령으로 실행합니다.
매개변수가아니요와 같은 경로가 주어지면 env python
명령은 를 찾습니다 $PATH
. 이는 일반적으로 env
스크립트의 -line 내에서 사용할 때 원하는 것입니다.#!
인수인 경우예경로가 주어지면 해당 경로에서 명령을 실행합니다.
-라인 에서는 #!
특정 Python 인터프리터를 실행합니다. 절대 $PATH
검색되지 않습니다 . 당신도 그런 적이 있었을 것이다.
#!/mydir/mybins/python
왜냐하면 그 env
비트는 실제로 아무 일도 하지 않기 때문입니다.
효과가 $PATH
작동하려면 다음을 사용하십시오.
#!/usr/bin/env python
python
그러면 에서 발견된 첫 번째 실행 파일이 사용됩니다 .$PATH
#!
또 다른 접근 방식은 명령줄에서 명시적 인터프리터를 사용하여 스크립트를 실행하여 -line을 완전히 우회하는 것입니다.
$ python run.py
또는,
$ /usr/bin/python run.py
답변2
Kusalananda가 말했듯이, 특별히 다른 Python을 가리키도록 코드를 변경하지 않고 이를 사용하는 /mydir/mybins/python
방법을 알고 싶습니까 ?/usr/bin/python
해당 위치에 심볼릭 링크를 제거하고 생성 /mydir/mybins/python
하면 됩니다. /usr/bin/python
나강하게이는 권장되지 않지만 스크립트에서 해시뱅을 변경하는 것이 좋습니다.