1

在 python 脚本中加载环境模块

上述解决方案在 python 交互式 shell 和可执行 python 文件中的行为不同,我需要一些帮助来理解如何让它在 exe.py 设置中工作,其中 import 语句似乎没有看到环境变量 PYTHONPATH。

在 python shell 中,该解决方案允许加载修改 PYTHONPATH 的环境模块;我随后可以从修改后的 PYTHONPATH 中导入一个 python 模块。这是很棒的功能,正是我希望它在可执行的 python 脚本中做的事情。

在 python 脚本(标题为 #!/usr/bin/env python 等)中,它可以正常工作,包括修改 PYTHONPATH

if 'PYTHONPATH' in os.environ: print 'PYPATH:', os.environ['PYTHONPATH']
# nothing prints

execfile('/usr/local/Modules/default/init/python.py')
module('list')
# No Modulefiles Currently Loaded.

module('load', 'my_module')
print 'loaded my_module'
# loaded my_module
module('list')
#   1) /my_module
if 'PYTHONPATH' in os.environ: print 'PYPATH:', os.environ['PYTHONPATH']
# /home/me/py/my_module

但就它在 python.exe 中的工作而言

尝试从在 python shell 中正常工作的 my_module 导入会导致 Traceback 报告“ImportError: No Module named module_1

由此我想我可以得出结论,当我在 python exe 中运行它时,python 没有使用或“看到”修改后的 PYTHONPATH(但在交互式 python shell 中确实看到它)。

这就是我卡住的地方!有任何想法吗?非常感谢帮助。我敢打赌,我忽略了一个非常简单的解决方案,我很高兴听到它。

谢谢,祝你有美好的一天

编辑:更多阅读表明python本身将PYTHONPATH的内容添加到sys.path,但这既不是在交互式python shell中发生,也不是在我运行python.exe时发生。

如果我使用 sys.path.insert(1,os.environ['PYTHONPATH']) 在 exe 中手动执行此操作,那么我将获得我想要的功能

4

1 回答 1

1

我认为在初始化期间会读取 pythonpath 以在 sys.path 中添加路径,请参阅sys.path() 和 PYTHONPATH 问题中的一些示例。

因此,您需要更新的变量实际上只是 sys.path - 当 python 已经初始化时,更新 os.environ['PYTHONPATH'] 为时已晚

于 2015-02-13T08:19:05.710 回答