Python 스크립트에 환경 변수를 전달하지 마세요.

Python 스크립트에 환경 변수를 전달하지 마세요.

작은 파이썬 스크립트가 있습니다

#!/usr/bin/env python3

import some_python3_module

def main():
    # do stuff

if __name__ == '__main__':
    main()

그리고 ROS가 변수를 2.7 버전과 관련된 일부 위치로 설정하기 때문에 Python3을 사용하여 이 스크립트를 실행할 수 없습니다. 이는 Python 3이 PYTHONPATH해당 디렉터리에서 모듈을 찾을 수 없음을 의미합니다. dist-packages외부 환경을 수정하지 않고도 이 동작을 재정의하고 싶습니다. 즉, 나는 희망 unset PYTHONPATH하지만 이 스크립트 내에서만, 그리고 바람직하게는 그 안에서 shebang이 계속 작동할 수 있습니다. 가능합니까?

이것이 superuser.com에 더 적합한지 확실하지 않습니다.

답변1

귀하의 필요에 맞는 명령줄 옵션이 있습니다:

#!/usr/bin/env python3 -E

-이자형

PYTHONPATH 및 PYTHONHOME과 같이 설정될 수 있는 PYTHON* 환경 변수를 무시합니다.

답변2

이 질문이 약간 오래되었다는 것을 알고 있지만 이 문제에 대한 구체적인 해결책을 찾고 있습니다. 이것이 /usr/bin/env를 사용하는 실제 목적이라는 것이 밝혀졌습니다.

#!/usr/bin/env -u PYTHONPATH python3

이렇게 하면 원하는 효과를 얻을 수 있습니다.설정되지 않음, 그리고 python3을 실행하세요.

man 1 환경에서:

ENV(1)                                    User Commands                                    ENV(1)

NAME
       env - run a program in a modified environment
.
.<snip>
.
       -u, --unset=NAME
              remove variable from the environment

관련 정보