导入http.client时遇到Python 3.4.1的导入错误
我正在按照Python在线文档的例子(21.12.3)来练习。当我尝试用运行模块(F5)来运行我的脚本时,总是会出现导入错误。但是如果我直接在IDLE命令行中输入这些代码,Python就不会报错。我不太确定我哪里做错了。
我使用的Python版本是:
Python 3.4.1 (v3.4.1:c0e311e010fc, 2014年5月18日,10:38:22) [MSC v.1600 32位(Intel)] 在win32上
我的脚本是:
import http.client
conn = http.client.HTTPConnection("192.168.1.2", 8080)
conn.request("GET", "/index.html")
r1 = conn.getresponse()
print(r1.status, r1.reason)
conn.close()
错误信息是:
Traceback (most recent call last):
File "<frozen importlib._bootstrap>", line 2218, in _find_and_load_unlocked
AttributeError: 'module' object has no attribute '__path__'
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "D:\User\Downloads\http.py", line 1, in <module>
import http.client
File "D:\User\Downloads\http.py", line 1, in <module>
import http.client
ImportError: No module named 'http.client'; 'http' is not a package
2 个回答
5
我也遇到过同样的问题。在我的情况下,文件夹里有另一个叫做 http.py 的文件。我只需要把它改个名字,问题就解决了。
43
你可能在本地目录里创建了一个叫 http.py
的Python脚本。这个名字和Python 3自带的一个模块重名了,导致了错误。解决这个问题的简单办法就是把你的文件改个不那么常见的名字,这样就不会和Python自带的模块冲突了。
不过如果你还是想用这个名字,可以通过使用绝对导入来消除名字冲突:
from . import http
或者用更不容易混淆的方式:
from . import http as myhttp
或者
from .http import something
在Python 2中,你需要在导入模块的最上面启用绝对导入功能,使用一个future语句,才能使用这个功能:
from __future__ import absolute_import