为何需导出PYTHONPATH?设置后遇ModuleNotFoundError问题解析
问题原因解析
这三种写法的差异,核心是shell环境变量的作用范围规则导致的:
单独执行
PYTHONPATH=somepath/a/b时,只是在当前shell进程内临时给变量赋值,但没有将其导出为可被子进程继承的环境变量。python myscript.py是启动一个独立的子进程,它无法获取当前shell中未导出的变量,因此python读取不到指定的PYTHONPATH路径,触发模块找不到的错误。执行
export PYTHONPATH=somepath/a/b时,export命令的作用就是把变量标记为环境变量,shell会自动将所有导出的环境变量传递给后续启动的所有子进程。python进程启动后能正常读取到这个路径,自然可以找到模块'c'。内联写法
PYTHONPATH=somepath/a/b python myscript.py,是在启动python子进程的同时,专门为这个子进程临时设置PYTHONPATH环境变量。这种方式仅对当前这一次的python进程生效,不会改变shell自身的环境,但子进程能直接读取到该变量,所以脚本可以正常运行。
内容的提问来源于stack exchange,提问作者Toto
相关产品推荐
相关产品推荐

