在Python中导出环境变量后导入无效
在我的一个Python脚本中,我在文件的顶部使用了import语句,如下所示。
import phx_commonlib.configuration.systemConfig as systemConfig
这个脚本会查找PYTHONPATH这个环境变量,它是在~/.bashrc文件中设置的。当我在Linux的bash终端中运行时,它能正常导入文件。但是后来我通过putty连接到我的Linux机器,这时我的脚本在putty中运行失败了,因为~/.bashrc文件没有被加载。
所以我在脚本中导出了PYTHONPATH变量,如下所示。
def exportPythonPath():
pwd = os.getcwd()
pythonpath = ""
scanPath_index = pwd.find('/phx_test/scan')
if scanPath_index != -1:
pythonpath = pwd[0:scanPath_index]
pythonpath = pythonpath + ":/projects/phx/tools:/projects/phx/tools/pylib"
os.environ["PYTHONPATH"] = pythonpath
print os.environ["PYTHONPATH"]
然后我在一个函数内部设置PYTHONPATH后再导入“import phx_commonlib.configuration.systemConfig as systemConfig”。如果我把import放在顶部,它会失败,因为找不到PYTHONPATH。函数末尾的print语句打印出了正确的PYTHONPATH环境变量。但是,导入语句还是不工作,报错信息是“ImportError: No module named phx_commonlib.configuration.systemConfig”。
如果我直接在putty中设置PYTHONPATH(而不是在脚本中设置),然后运行Python脚本,它就能正常导入模块。请问这个脚本有什么问题,或者我该如何正确导入?
1 个回答
与其在 os.environ
中设置 PYTHONPATH,不如直接修改 sys.path
,像这样:
import sys
sys.path.append(pythonpath)
然后继续你的 import
操作。
之所以在 os.environ
中设置 PYTHONPATH 不起作用,是因为在执行 import
指令时,解释器参考的是 sys.path
。
如果你设置了一个 PYTHONPATH 环境变量,然后启动解释器,它会看到这个变量,把它加到 sys.path
中,然后继续运行。
但如果你在没有设置 PYTHONPATH 环境变量的情况下启动解释器,sys.path
在启动时就不会更新,而在解释器启动后设置的 os.environ['PYTHONPATH']
的新值就会被忽略。