5

我的一个 Python 脚本以交互模式运行,但从命令行运行时失败。不同之处在于,当从命令行运行时,它会从一个错误的 .egg 文件中导入模块,而当交互式运行时,它会使用我在当前目录中的固定(解压缩)版本。

我的问题有两个:a)为什么 Python 从这些位置运行时加载模块的方式不同,以及 b)我有哪些解决方法?

4

4 回答 4

2

在 UNIX 系统和 Mac OS-X 上:

  • 你有~/.python-eggs目录吗?

独立于操作系统:

  • 您确定在这两种情况下都使用相同的 Python 实例吗?

  • 您可以在每种情况下打印sys.path并查看模块搜索路径中哪个包目录排在第一位吗?

于 2009-11-22T03:05:42.463 回答
2

我不明白在交互模式下运行脚本是什么意思,所以我不能准确地说。但是在交互模式下查找模块(sys.path[0])的第一个地方是当前目录(即使调用os.chdir()也会影响导入),而对于脚本,它是脚本所在的目录(派生自sys.argv[0])。请注意,当脚本从它所在的目录运行时,它们实际上是相同的,但在其他情况下可能会有所不同。希望这可以帮助。

于 2009-11-22T06:08:45.277 回答
1

a) 为什么 Python 从这些位置运行时加载模块的方式不同 b) 我有哪些解决方法?

检查您的环境变量 PYTHONPATH。当 python 导入模块时,它会搜索这些目录。解决问题的一种方法是将本地文件夹“当前目录中的(解压缩的)版本”添加到 PYTHONPATH 的开头,以便python首先找到它。

于 2009-11-22T07:25:26.433 回答
0

这对我有用:

import sys

sys.path[0]=''
于 2018-12-15T04:13:00.817 回答