为什么在Python中会出现“ImportError: No module named py”错误?

23

我是 Python 的新手,请多包涵 :)

我创建了一个名为 test.py 的文件,其内容如下:

test.py
import sys
print sys.platform
print 2 ** 100

我接着在解释器中运行了import test.py文件,以便按照书中的示例进行操作。 但是当我这样做时,最后输出的结果却出现了导入错误。

win32
1267650600228229401496703205376
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ImportError: No module named py

为什么会出现这个错误,我该如何修复它?谢谢!

4个回答

45

不要使用:

import test.py

只需简单地写:

import test

假设test.py与导入它的文件在同一目录下。


8
这个看起来奇怪的错误是由Python导入模块的方式造成的。
Python会看到:
import test.py

Python的思路(稍作简化):

导入模块测试。

  • 在模块搜索路径中搜索test.py文件
  • 执行test.py(输出结果)
  • 将“test”作为名称导入到当前命名空间

导入test.py

  • 在文件搜索路径中搜索test/py.py文件
  • 抛出ImportError(找不到名称为“py”的模块)

因为Python允许点分模块名称,它只是认为您在test模块中有一个名为py的子模块,并尝试查找该模块。它不知道您正在尝试导入一个文件。


我认为技术上术语应该是“test包内名为py模块”。(不过可能有误!) - cdleary

6
您在导入时不需要指定扩展名。只需执行以下操作:
import test

3
正如其他人所提到的,您不需要在导入语句中放置文件扩展名。建议阅读Python教程的模块部分,以了解更多信息。
为了更深入地了解错误背景,解释器认为您正在尝试从test包内导入名为py的模块,因为点表示封装。由于没有这样的模块(而且test甚至不是一个包!),它会引发该错误。
正如有关导入语句更详细的文档中所示,它仍会执行test模块中的所有语句,然后尝试导入py模块,这就是为什么您会得到打印出的值的原因。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接