문제의 두 번째 부분이 우선순위가 높은 이유는 무엇입니까?

문제의 두 번째 부분이 우선순위가 높은 이유는 무엇입니까?

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강하게이는 권장되지 않지만 스크립트에서 해시뱅을 변경하는 것이 좋습니다.

관련 정보