2013-04-07 5 views
5

OSX 10.8.2의 Python 2.7.3왜/usr/bin/env를 사용하면 파이썬 가져 오기가 중단됩니까?

저는 현재 markdown 모듈을 가져 오는 스크립트를 작성하고 있습니다. 나는 이식성을 위해 #!/usr/bin/env python 쉬 뱅 (shebang)을 사용했다. 나는 (로그인) 쉘의 외부에서 스크립트를 실행하면 내가 AppleScript로 do shell script "/path/to/myscript.py " & quoted form of arg1를 통해 예를 들어, ./myscript.py arg1

를 통해 쉘에서 직접 실행하면 스크립트가 정상적으로 실행, 그것은

myscript.py", line 8, in <module> 
    import markdown 
ImportError: No module named markdown 

실패 나는 추측 이것은 shebang에 문제가 될 수 있으므로, 내 비단 뱀의 위치를 ​​#!/usr/local/bin/python으로 변경하고 스크립트가 제대로 작동했는지 확인하십시오.

그래서 제 질문의 두 가지가 :

  1. /usr/bin/env python 내 수입을 중단 사용합니까?
  2. /usr/local/bin/python을 사용하지 않고이 문제를 방지하려면 어떻게해야합니까?
+0

비 로그인 셸을 사용하는 것처럼'/ usr/bin/env python'을 사용하지 않는 것 같습니다. 나는'/ usr/local/bin'이 그러한 쉘에서'PATH'에 있지 않거나'/ usr/bin' 전에는 존재하지 않는다고 가정하고 있습니다. 그러면''/ usr/bin' '은 파이썬이 왜 선택되었는지 설명 할 것입니다. bash 설정 파일에서'PATH'를 바꾸고 있습니까? – millimoose

+0

내가 빠뜨린 한가지 맛있는 점은 TextWrangler에서'#!/usr/bin/env python'과'#!/usr/local/bin/python'가 완벽하게 작동하고있어 터미널에서 실행할 때 모두 똑같은 결과를 얻었습니다. AppleScript에서 에러를 발생 시켰을뿐입니다 (로드리고는 맞습니다). TextWrangler와 Terminal 모두 똑같은 결과를 얻었지만 do shell script (echo 'import sys'; echo 'print sys.path';) |/usr/bin/env python "'을 실행하여 차이점을 볼 수있었습니다. AppleScript 편집기에서. 'do shell script '는 파이썬이 더 쉬울 것입니다. – n8henrie

답변

3

#!/usr/bin/env python은 "쉘이 찾고있는 것처럼 $PATHpython을 찾아 이동합니다."라는 의미입니다. 그래서 다른 결과를 얻으므로 아마 아마도 다른 비단뱀을 사용하고있을 것입니다.

/usr/local/bin/python/usr/bin/env python이 동일한 비단뱀을 제공하는지 확인하십시오. type -a python을 사용하여 $PATH에있는 python 개를 찾을 수도 있습니다. 내 시스템에서 type -a python이 제공 :

python is /opt/local/bin/python 
python is /usr/bin/python 
python is /usr/local/bin/python 

가 (즉, 첫 번째는 MacPorts를 설치됩니다.)

을 어쨌든, 로드리고가 지적 하듯, 직접 발사는 아마 당신이 기대하는 $PATH를 사용하지 않습니다. 어떤 뜻은 /usr/bin/env을 사용하는 것이 효과가 없을 것입니다.

+0

귀하의 대답은 문제의 본질을 설명하지만 해결 방법은 설명하지 않습니다. –

+1

가장 간단한 해결책은'#!/usr/local/bin/python'을 사용하거나 AppleScript를'do shell script "/ usr/local/bin/python /path/to/myscript.py"형식으로 변경하는 것입니다. arg1'. –

+0

감사합니다. 내 혼란에 기여한 다른 두 가지 요인은 하나는/usr/local/bin/python과/usr/bin/env python이 동일한 결과를주는 것처럼 보인다고 생각합니다. 어느 쪽이든 로그인 쉘. 또한 두 위치에 동일한 버전의 Python이 설치되어 있기 때문에 이러한 명령을 실행해도 파이썬에 대한 경로는 제공되지 않으며 버전 번호 만 제공 될 수 있습니다. – n8henrie

1

로그인 쉘의 PATH 환경 변수가 AppleScript 프로세스와 다릅니다.

PATH=/usr/local/bin:$PATH 

하지만하지 다른 프로세스에서 쉘을 열 경우 해당 파일 만 실행됩니다

내 생각 엔 당신이 선이있는 .profile 파일 또는 이와 유사한을 가지고있다. 분명히 당신은 /usr/bin/python에 다른 버전의 파이썬이 있습니다.이 모듈에는 markdown 모듈이 없습니다.

+0

귀하의 대답은 문제의 본질을 설명하지만 해결 방법은 설명하지 않습니다. –

+0

@ JoshCaswell : 네가 맞아. 가장 좋은 해결책은 PATH 시스템을 변경하거나 모든 사용자 프로세스가 동일한 검색 경로를 갖도록 최소한 사용자를 변경하는 것입니다. 그러나 세부 사항은 시스템에 따라 다르며 OP는 자신이 사용하는 것을 말하지 않았습니다 (사과에 관한 것, 아마도). – rodrigo

+1

설명에 많은 감사드립니다. 포스트의 시작 부분에서 언급했듯이, 나는 OSX 10.8.2를 사용하고있다. 비 로그인 셸에 대한 내 경로가 변경 될 수 있습니다. – n8henrie