在Python中导出环境变量后导入无效

1 投票
1 回答
1796 浏览
提问于 2025-04-18 01:54

在我的一个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 个回答

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'] 的新值就会被忽略。

撰写回答