导入http.client时遇到Python 3.4.1的导入错误

11 投票
2 回答
19476 浏览
提问于 2025-04-18 14:13

我正在按照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

撰写回答