我的一个Python脚本在交互模式下运行正常,但从命令行运行时失败。不同之处在于,当从命令行运行时,它会从一个错误的.egg文件中导入模块,而在交互模式下运行时,则使用当前目录中修复后的(未压缩的)版本。
我的问题有两个方面:a)为什么Python在这些位置运行时加载模块的方式不同,b)我有哪些选项可以解决这个问题?
我的一个Python脚本在交互模式下运行正常,但从命令行运行时失败。不同之处在于,当从命令行运行时,它会从一个错误的.egg文件中导入模块,而在交互模式下运行时,则使用当前目录中修复后的(未压缩的)版本。
我的问题有两个方面:a)为什么Python在这些位置运行时加载模块的方式不同,b)我有哪些选项可以解决这个问题?
sys.path[0]
)的第一个位置是当前目录(即使调用os.chdir()
也会影响导入),而对于脚本来说,则是脚本所在的目录(从sys.argv[0]
派生)。请注意,当从脚本所在的目录运行脚本时,它们实际上是相同的,但在其他情况下可能会有所不同。希望这可以帮到你。在 UNIX 系统和 Mac OS X 上:
~/.python-eggs
目录?与操作系统无关:
您确定两种情况下使用的是同一个 Python 实例吗?
您可以在每种情况下打印 sys.path
并查看哪个包目录在您的模块搜索路径中排在第一位吗?
a) Python为什么在不同的位置运行时会以不同的方式加载模块? b) 我有哪些选项可以解决这个问题?
检查您的环境变量PYTHONPATH。当Python导入模块时,它会搜索这些目录。解决问题的一种方法是将您的本地文件夹“当前目录中的(未压缩的)版本”添加到PYTHONPATH的开头,这样Python就会首先找到它。
import sys
sys.path[0]=''