上述解决方案在 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 中手动执行此操作,那么我将获得我想要的功能