Bash

避免將環境變數傳遞給 python 腳本

  • June 8, 2021

我有一個小的 python 腳本

#!/usr/bin/env python3

import some_python3_module

def main():
   # do stuff

if __name__ == '__main__':
   main()

並且無法使用 Python3 執行此腳本,因為 ROS 將PYTHONPATH變數設置為與 2.7. 版本相關的某些位置,這意味著 Python 3 無法在其dist-packages目錄中找到任何模組。我想覆蓋這種行為而不必修改外部環境。也就是說,我希望unset PYTHONPATH,但僅限於這個腳本,最好是在其中,這樣 shebang 仍然可以工作。這可能嗎?

不確定這是否更適合 superuser.com

有一個適合您需要的命令行選項:

#!/usr/bin/env python3 -E

-和

忽略所有可能設置的 PYTHON* 環境變數,例如 PYTHONPATH 和 PYTHONHOME。

我知道這個問題有點老了,但我一直在尋找我為這個問題找到的具體解決方案:原來這是使用 /usr/bin/env 的實際目的

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

這完成了所需的unset,然後執行 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

引用自:https://unix.stackexchange.com/questions/385399