경로 변수와 스크립트의 shebang이 올바른 Python 버전을 실행하지 않습니다.

경로 변수와 스크립트의 shebang이 올바른 Python 버전을 실행하지 않습니다.

문제 설명:

Bash 스크립트는 이름 목록의 각 이름에 대해 새 화면 세션을 만드는 데 사용됩니다. 각 이름에 대해 해당 이름을 입력으로 사용하여 Python 스크립트가 실행됩니다. Bash 스크립트는 올바른 Python 버전(anaconda 패키지의 Python 3)이 포함된 경로를 설정합니다.

#!/bin/sh

export PATH=~/anaconda3/bin/python:$PATH

while read p; do
  screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"
done <cells.txt

위와 같이 경로를 설정하면 올바른 버전의 Python을 실행할 수 없으므로 실행하려는 Python 스크립트에 다음 shebang을 추가했습니다.

#!~/anaconda3/bin/python python3

여전히 주사위 없음: 사용 /usr/bin/python되어서는 안 될 때에도 여전히 사용되고 있습니다. 이 프로그램이 내가 지정한 경로에 따라 Python 버전을 실행하도록 하려면 어떻게 해야 합니까?

1번을 시도해보세요:

새로운 사방:

#!/inside/home/thjmatth/anaconda3/bin/python/

새로운 bash 스크립트:

#!/bin/sh

export PATH=~/anaconda3/bin/python:$PATH

while read p; do
  screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"
done <cells.txt

Python 스크립트에 대한 새로운 권한:

chmod +x essentialpairs_ttest_tissue_1.py

실수:

bash: python3: command not found

이 화면에서 어떤 Python을 실행하면 여전히 표시되나요?/usr/bin/python

해결책:

위의 시도 1과 동일하지만 bash 스크립트의 3행을 변경하여 실행 파일 대신 디렉터리로 만듭니다.

export PATH=~/anaconda3/bin/python:$PATH

답변1

export PATH=~/anaconda3/bin/python:$PATH

실행 파일의 경로인 것 같습니다. PATH디렉터리는 다음과 같이 포함되어야 합니다.

export PATH=~/anaconda3/bin:$PATH

#!~/anaconda3/bin/python python3
  1. Shebang 라인에는 실제 경로가 필요하며 실행되지 않습니다.물결표 확장(그것은 당신의 껍질에 있습니다). 실행 파일의 실제 경로를 /.
  2. ~/anaconda3/bin/pythonpython3Shebang 라인은 인수 와 그 뒤에 스크립트 이름을 사용 하여 실행됩니다 . 아마도 이것을 원하지 않고 실행하거나 python대신 python3.

    #!/home/thomas/anaconda3/bin/python
    

screen -dm -S $p bash -c "cd /inside/home/thjmatth/essential; python3 essentialpairs_ttest_tissue_1.py; exec sh"

Shebang 라인을 업데이트한 후에도 이 라인을 계속 실행하면 무시됩니다. ! 와 달리 python3사용자 가 만든 라인이 실행되고 스크립트가 차례로 실행되며 Shebang 라인은 주석으로 건너뜁니다. 스크립트를 실행 가능하게 만들면( ) 직접 실행할 수 있습니다.PATHpythonchmod +x essentialpairs_ttest_tissue_1.py

./essentialpairs_ttest_tissue_1.py

그리고 Shebang 라인이 처리됩니다.


이 경우 다음을 수행할 수 있습니다.아마도변수를 재설정하는 Bash 시작 구성이 없으면 PATH첫 번째 부분에서 변수를 수정하십시오. 실행 파일 이름이 이면 해당 이름을 사용하도록 명령줄을 python업데이트해야 합니다 .screenpython3

답변2

가능한 해결책

두 번째 시도와 관련하여 Python 스크립트의 shebang을 사용합니다.

  • ~Shebang에서는 사용할 수 없습니다 . 실제 경로( #!/inside/home/thjmatth/...)여야 합니다.
  • 디렉토리 이름과 프로그램 이름 사이에는 공백이 있어서는 안 됩니다 #!/inside/home/thjmatth/anaconda3/bin/python/python3.

위생 검사:/inside/home/thjmatth/anaconda3/bin/python이라는 실행 프로그램 python3 (즉, 인터프리터의 전체 경로 이름은 무엇입니까)이 포함 된 디렉토리가 있습니까 /inside/home/thjmatth/anaconda3/bin/python/python3?

시도해 볼 가치가 있는 것

이렇게 하려면 스크립트를 변경하세요.

#!/bin/sh

export PATH=~/anaconda3/bin/python:$PATH

while read p; do
  type python3
  screen -dm -S "$p" bash -c "type python3; exec sh"
done <cells.txt

무슨 일이 일어나고 있는지 알아낼 수 있는지 확인해 보세요. 여전히 문제가 있는 경우 위의 출력을 포함하도록 질문을 편집하세요.

또 다른 한가지:"$p"타당한 이유가 없고 수행 중인 작업을 확실히 알고 있는 경우가 아니면 항상 쉘 변수(예: )에 대한 모든 참조를 인용해야 합니다.

관련 정보