带.py扩展名的Python文件无法导入模块,但无扩展名的文件可以

0 投票
1 回答
626 浏览
提问于 2025-04-16 14:14

我的Python文件里有一个“from .. import”的语句,用来引入位于C:\Python27\Lib\site-packages下的包。
如果我的文件名没有扩展名(比如叫foo),那么运行“python foo”是可以正常工作的。
但是如果我把文件名从foo改成foo.py,那么在foo.py里的“from .. import”语句就会出错了:

try:
    from my_package.System.prefix import ...
except ImportError:
    print "ERROR: Could not import modules."

我的设置是:
PYTHONPATH=C:\Python27\Lib\site-packages
环境:Windows XP/ Python 2.7

1 个回答

1

我来猜一下:你的文件名是不是和你想要导入的包名一样(比如你例子中的my_package)?

我通过创建一个名为django.py的文件,里面有from django.db import models这行代码,复现了你描述的情况。当我运行python django.py时,出现了ImportError: No module named db的错误。后来我把代码移到一个叫django(没有.py后缀)的文件里,删除了django.pyc文件,然后运行python django,这次导入成功了。

Python在尝试导入django模块时,会先在执行程序的目录里查找django.py文件。在第一个情况下,它导入了我创建的django.py文件,而不是安装在site-packages里的django模块。在第二个情况下,因为我把文件重命名为django,Python在我的文件所在目录找不到django.py,所以就正确地从site-packages导入了django模块。

撰写回答