Loading environment modules within a python script
上述解决方案在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中的作用
尝试从my_module导入哪个在python shell中正常工作导致Traceback报告'ImportError:没有名为module_1的模块
由此我认为我可以得出结论,当我在python exe中运行时,python没有使用或“看到”修改后的PYTHONPATH(但是在交互式python shell中时会看到它)。
这就是我遇到困难的地方!有任何想法吗?非常感谢。我敢打赌,我忽略了一个非常简单的解决方案。我很高兴听到它。
谢谢&祝你有美好的一天
垫
编辑: 阅读更多内容表明python本身会将PYTHONPATH的内容添加到sys.path中,但这既不会发生在交互式python shell中,也不会发生在运行python.exe时。
如果我使用sys.path.insert(1,os.environ ['PYTHONPATH'])在exe中手动执行此操作,那么我将获得我想要的功能
答案 0 :(得分:0)
我认为在初始化过程中会读取pythonpath以在sys.path中添加路径,请参阅sys.path() and PYTHONPATH issues中的一些示例。
所以你需要更新的变量实际上只是sys.path - 当python已经初始化时,更新os.environ太晚了[' PYTHONPATH']