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