[英]Python importing modules differently when run interactively/non-interactively
我的一个Python脚本以交互模式运行,但从命令行运行时失败。 不同之处在于,当从命令行运行时,它从坏的.egg文件导入模块,并且当以交互方式运行时,它使用当前目录中的固定(解压缩)版本。
我的问题有两个方面:a)为什么Python在从这些位置运行时加载模块的方式不同,以及b)我可以选择解决哪些问题?
在UNIX系统和Mac OS-X上:
~/.python-eggs
目录吗? OS独立:
您确定在两种情况下都使用相同的Python实例吗?
你能在每种情况下打印sys.path
并查看模块搜索路径中首先出现的软件包目录吗?
我不明白你在交互模式下运行脚本是什么意思,所以我不能完全说出来。 但是,在交互模式下查找模块( sys.path[0]
)的第一个地方是当前目录(甚至调用os.chdir()
将影响导入),而对于脚本,它是脚本所在的目录(派生自sys.argv[0]
)。 请注意,当脚本从其所在的目录运行时,它们实际上是相同的,但在其他情况下可能会有所不同。 希望这可以帮助。
a)为什么Python从这些位置运行时加载模块的方式不同b)我可以选择解决它的哪些方面?
检查您的环境变量PYTHONPATH。 当python导入模块时,它会搜索这些目录。 解决问题的一种方法是将本地文件夹“当前目录中的(解压缩)版本”添加到PYTHONPATH的开头,以便python首先找到它。
这对我有用:
import sys
sys.path[0]=''
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.