Python 导入请求导致 Traceback -“部分初始化的模块‘请求’没有属性‘发布’”

Rüd*_*ger 7 python python-requests

我正在尝试通过 python 触发 http 帖子。该requests模块是通过安装的pip3 install requests- 现在它也说“要求满足”,所以它被安装了。

我正在使用 Python 版本3.8.0

编码:

import requests as r
headers = {'Accept' : 'application/json', 'Content-Type' : 'application/json'}
url = 'http://localhost:8083/push/message'
jsons = {"test"}
r.post(url, json=jsons, headers=headers)
Run Code Online (Sandbox Code Playgroud)

错误:

Traceback (most recent call last):
  File "http.py", line 1, in <module>
    import requests as r
  File "C:\User\name\AppData\Local\Programs\Python\Python38\lib\site-packages\requests\__init__.py", line 43, in <module>
    import urllib3
  File "C:\User\name\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\__init__.py", line 7, in <module>
    from .connectionpool import HTTPConnectionPool, HTTPSConnectionPool, connection_from_url
  File "C:\User\name\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\connectionpool.py", line 11, in <module>
    from .exceptions import (
  File "C:\User\name\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\exceptions.py", line 2, in <module>
    from .packages.six.moves.http_client import IncompleteRead as httplib_IncompleteRead
  File "<frozen importlib._bootstrap>", line 991, in _find_and_load
  File "<frozen importlib._bootstrap>", line 975, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 655, in _load_unlocked
  File "<frozen importlib._bootstrap>", line 618, in _load_backward_compatible
  File "C:\User\name\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\packages\six.py", line 199, in load_module
    mod = mod._resolve()
  File "C:\User\name\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\packages\six.py", line 113, in _resolve
    return _import_module(self.mod)
  File "C:\User\name\AppData\Local\Programs\Python\Python38\lib\site-packages\urllib3\packages\six.py", line 82, in _import_module
    __import__(name)
  File "C:\scripts\http.py", line 5, in <module>
    r.post(url, json=jsons, headers=headers)
AttributeError: partially initialized module 'requests' has no attribute 'post' (most likely due to a circular import)
Run Code Online (Sandbox Code Playgroud)

当我关闭命令行并启动一个新命令行然后进入时,python我可以导入它:

C:\Windows\system32>python
Python 3.8.0 (tags/v3.8.0:fa919fd, Oct 14 2019, 19:37:50) [MSC v.1916 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import requests
>>> requests.post
<function post at 0x000001A4F7B9D310>
>>>
Run Code Online (Sandbox Code Playgroud)

当我执行脚本时会发生同样的事情(仅有时) - 有时它确实有效。(顺便说一句,当它工作时,它也会像它应该的那样发布到服务器)

有没有人遇到过类似的问题并可能想出解决方案?顺便说一句,Python 3 是我在这台机器上安装的唯一 Python 版本 - 但在其他机器上也面临类似的问题!

ASA*_*EED 15

感谢 Unixia,您的回答以某种方式帮助了我:)

但是我有一些改进,我遇到了同样的错误,这是因为我将文件命名为requests.py与原始请求库发生冲突


uni*_*xia 13

你的脚本可能还有其他我没有检查过的问题,但你得到的错误是因为你的文件名为http.py. 似乎它正在其他地方使用,并且您遇到了循环导入问题。更改文件名。


Tus*_*har 13

循环依赖:当两个或多个模块相互依赖时就会发生循环依赖。这是因为每个模块都是根据另一个模块来定义的。

如果您收到类似于以下请求模块错误的循环导入错误。

AttributeError: partially initialized module 'requests' has no attribute 'post' (most likely due to a circular import)
Run Code Online (Sandbox Code Playgroud)

Please try to rename the file.此错误通常是由于与您尝试导入requests模块的文件名冲突所致。

我也遇到了同样的问题,我的文件名在哪里email.py,我试图导入请求模块。所以,它与 发生了一些冲突email.parser。因此,我将文件名从 更改为email.pyemail1.py成功了。

有关循环依赖的更多信息:https ://stackabuse.com/python-circular-imports/