Python在交互式与非交互式运行时导入模块的行为不同
我有一个Python脚本,在交互模式下可以正常运行,但从命令行运行时却出错。原因是从命令行运行时,它会从一个有问题的.egg文件中导入模块,而在交互模式下,它会使用我在当前目录下修复过的(解压缩的)版本。
我有两个问题:a) 为什么Python在这两种情况下加载模块的方式不同?b) 我有什么办法可以解决这个问题?
4 个回答
1
a) 为什么在不同的地方运行Python时,它加载模块的方式会不一样?
b) 我有什么办法可以解决这个问题?
你可以检查一下你的环境变量PYTHONPATH。当Python导入模块时,它会在这些目录里寻找。解决你问题的一种方法是把你本地的文件夹(也就是当前目录下解压后的版本)添加到PYTHONPATH的最前面,这样Python就会优先找到它。
2
在UNIX系统和Mac OS-X上:
- 你有没有一个叫
~/.python-eggs
的文件夹?
与操作系统无关:
你确定在这两种情况下使用的是同一个Python环境吗?
你能在每种情况下打印出
sys.path
吗?看看哪个包的文件夹在你的模块搜索路径中排在最前面?
3
我不太明白你说的在交互模式下运行脚本是什么意思,所以我不能确切回答。不过,在交互模式下,查找模块的第一个地方是当前目录(即使调用 os.chdir()
也会影响导入),而对于脚本来说,查找模块的地方是脚本所在的目录(这个目录是从 sys.argv[0]
得到的)。需要注意的是,当脚本从它所在的目录运行时,这两者实际上是一样的,但在其他情况下可能会不同。希望这能帮到你。