Python can';t修复导入错误:没有名为请求错误的模块

Python can';t修复导入错误:没有名为请求错误的模块,python,importerror,Python,Importerror,嗨,我正在尝试学习网页抓取,但这段代码给了我一个错误,我查了一下为什么,并尝试了他们说的,但仍然不起作用。我的mac电脑里也有一个windows,我在那里试过,它可以工作,但在macOS上就不行了 好的,这是我试图执行的代码: #!/usr/bin/env python3 import bs4 as bs import urllib.request sauce = urllib.request.urlopen("https://pythonprogramming.net/parsememc

嗨,我正在尝试学习网页抓取,但这段代码给了我一个错误,我查了一下为什么,并尝试了他们说的,但仍然不起作用。我的mac电脑里也有一个windows,我在那里试过,它可以工作,但在macOS上就不行了

好的,这是我试图执行的代码:

#!/usr/bin/env  python3

import bs4 as bs
import urllib.request

sauce = urllib.request.urlopen("https://pythonprogramming.net/parsememcparseface/").read()

soup = bs.BeautifulSoup(sauce, "lxml")

print(soup)
这是我得到的错误:

`Traceback (most recent call last):
 File "/Users/aaa/Desktop/import bs4 as bs.py", line 4, in <module>
 import urllib.request
 ImportError: No module named request
 [Finished in 0.4s with exit code 1]
 [shell_cmd: python -u "/Users/aaa/Desktop/import bs4 as bs.py"]
 [dir: /Users/aaa/Desktop]
`回溯(最近一次呼叫最后一次):
文件“/Users/aaa/Desktop/import bs4 as bs.py”,第4行,在
导入urllib.request
ImportError:没有名为request的模块
[完成时间为0.4s,退出代码为1]
[shell\u cmd:python-u”/Users/aaa/Desktop/import bs4 as bs.py”]
[目录:/Users/aaa/桌面]
[路径:/Library/Frameworks/Python.framework/Versions/3.8/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin] `

我查了一下,试了试他们说的话

但终端机说:

Requirement already satisfied: requests in 
 /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (2.23.0)
 Requirement already satisfied: idna<3,>=2.5 in 
 /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (from 
 requests) (2.9)
 Requirement already satisfied: certifi>=2017.4.17 in 
 /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (from 
 requests) (2019.11.28)
 Requirement already satisfied: chardet<4,>=3.0.2 in 
 /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (from 
 requests) (3.0.4)
 Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in 
 /Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages (from 
 requests) (1.25.8)
已满足要求:中的请求
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages(2.23.0)
已满足要求:idna=2.5英寸
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages(来自
请求(2.9)
已满足要求:certifi>=2017.4.17英寸
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages(来自
请求(2019.11.28)
已满足要求:chardet=3.0.2英寸
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages(来自
(3.0.4)
已满足要求:urllib3=1.25.0,!=1.25.1,=1.21.1英寸
/Library/Frameworks/Python.framework/Versions/3.8/lib/python3.8/site-packages(来自
(1.25.8)
我删除了这个
#/usr/bin/env python3
从我的代码中删除,并重试,但仍然说同样的话


几个月前,我可能会因为一次意外而弄乱这些“路径”的东西。(我当时正试图解决一个bug或smt,我复制并粘贴了一些东西到终端上,而一些人说我不应该这样做,我可能会弄错smt。但我还没有注意到任何东西,我不确定那是什么东西)我甚至不知道这意味着什么,我是编程新手。我真的不知道这可能是问题所在。

您似乎有两个Python版本(3.7、3.8),因此当您安装
request
时,它可能位于两个位置中的任何一个。 我安装并设置了
pyenv
,并在顶部安装了
virtualenvwrapper
,以解决类似问题;这是一个长期的解决方案,但得到了回报

查看您的
.bashrc
(或Mac/Windows上的类似软件)。在更改路径和其他环境变量时,您可能需要小心。 如果它是一个独立的应用程序,那么你的shebang
#就可以了/usr/bin/env python3

urllib在哪里 这个库似乎是内置的,所以可能是Python安装的问题

如果您有特定的文件,请查找:

ls /home/USER/.pyenv/versions/3.7.0/lib/python3.7/urllib/  # On Linux with pyenv
# For me, it lists "request.py" and others
在Python命令行(以及我当前的环境)上,我得到了以下结果:

>>> import urllib as ur
>>> ur.__path__
['/home/USER/.pyenv/versions/3.7.0/lib/python3.7/urllib']
>>> import urllib.request as rq
>>> dir(rq)
['AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'AbstractHTTPHandler', ..., 'urlsplit', 'urlunparse', 'warnings']

您似乎有两个Python版本(3.7、3.8),因此当您安装
request
时,它可能位于两个位置中的任何一个。 我安装并设置了
pyenv
,并在顶部安装了
virtualenvwrapper
,以解决类似问题;这是一个长期的解决方案,但得到了回报

查看您的
.bashrc
(或Mac/Windows上的类似软件)。在更改路径和其他环境变量时,您可能需要小心。 如果它是一个独立的应用程序,那么你的shebang
#就可以了/usr/bin/env python3

urllib在哪里 这个库似乎是内置的,所以可能是Python安装的问题

如果您有特定的文件,请查找:

ls /home/USER/.pyenv/versions/3.7.0/lib/python3.7/urllib/  # On Linux with pyenv
# For me, it lists "request.py" and others
在Python命令行(以及我当前的环境)上,我得到了以下结果:

>>> import urllib as ur
>>> ur.__path__
['/home/USER/.pyenv/versions/3.7.0/lib/python3.7/urllib']
>>> import urllib.request as rq
>>> dir(rq)
['AbstractBasicAuthHandler', 'AbstractDigestAuthHandler', 'AbstractHTTPHandler', ..., 'urlsplit', 'urlunparse', 'warnings']

这回答了你的问题吗?这回答了你的问题吗?我可以删除其中一个版本吗?像3.7一样,可以吗?删除之前,运行
pip freeze
查看您安装了哪些软件包。版本删除可能会有所帮助,但我认为更重要的是路径配置(先备份)。(你在mac上工作吗?-我主要在Linux上工作)是的,是mac。我在你发布之前删除了3.8,哈哈。我只是一个编程新手,所以我希望我现在没事了?哈哈,我希望我没有再做错什么。我的路径看起来像这样/Library/Frameworks/Python.framework/Versions/3.8/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbi如果删除了3.8,您的路径可能类似于:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbinca我可以删除其中一个版本吗?像3.7一样,可以吗?删除之前,运行
pip freeze
查看您安装了哪些软件包。版本删除可能会有所帮助,但我认为更重要的是路径配置(先备份)。(你在mac上工作吗?-我主要在Linux上工作)是的,是mac。我在你发布之前删除了3.8,哈哈。我只是一个编程新手,所以我希望我现在没事了?哈哈,我希望我没有再做错什么。我的路径看起来像这样/Library/Frameworks/Python.framework/Versions/3.8/bin:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/usr/sbin:/sbi如果删除了3.8,您的路径可能类似于:/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin