带.py扩展名的Python文件无法导入模块,但无扩展名的文件可以
我的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
模块。