没有名为 urllib.parse 的模块(我应该如何安装它?)
Posted
技术标签:
【中文标题】没有名为 urllib.parse 的模块(我应该如何安装它?)【英文标题】:no module named urllib.parse (How should I install it?) 【发布时间】:2015-06-04 04:31:03 【问题描述】:我正在尝试在 CentOS 7 上运行 REST API,我读到 urllib.parse 在 Python 3 中,但我使用的是 Python 2.7.5,所以我不知道如何安装这个模块。
我安装了所有需求,但仍然无法运行该项目。
当我在寻找一个 URL 时,我得到了这个(我使用的是可浏览界面):
输出:
ImportError at /stamp/
No module named urllib.parse
【问题讨论】:
【参考方案1】:如果您需要编写兼容 Python2 和 Python3 的代码,可以使用以下导入
try:
from urllib.parse import urlparse
except ImportError:
from urlparse import urlparse
【讨论】:
【参考方案2】:你想要使用 python2 进行 urlparse:
from urlparse import urlparse
【讨论】:
【参考方案3】:根据您提供的信息,最好的选择是使用 Python 3.x。
您的错误表明代码可能是为 Python 3 编写的,因为它正在尝试导入 urllib.parse
。如果您已经编写了软件并且可以控制其源代码,您应该将导入更改为:
from urlparse import urlparse
urllib
在 Python 3 中被拆分为 urllib.parse
、urllib.request
和 urllib.error
。
如果由于某种原因无法更改导入,我建议您快速查看 CentOS 中的软件集合。 你可以像这样引入 Python 3.3:
yum install centos-release-SCL
yum install python33
scl enable python33
查看this 页面以获取有关 SCL 的更多信息
【讨论】:
【参考方案4】:python3
支持urllib.parse
和python2
支持urlparse
如果您希望两者兼容,那么以下代码可以提供帮助。
import sys
if ((3, 0) <= sys.version_info <= (3, 9)):
from urllib.parse import urlparse
elif ((2, 0) <= sys.version_info <= (2, 9)):
from urlparse import urlparse
更新:更改 if 条件以支持更高版本if (3, 0) <= sys.version_info:
。
【讨论】:
这会在 Python 3.10 中中断 ;)【参考方案5】:安装six,Python 2 和 3 兼容库:
$ sudo -H pip install six
使用它:
from six.moves.urllib.parse import urlparse
(编辑:我删除了另一个答案)
【讨论】:
大声笑,q:“没有名为 urllib.parse 的模块”a:安装第三方库来做 try..除了你 xD 。有史以来最糟糕的答案 国际海事组织,这是正确的答案。 Six 是一个非常有用的模块,用于编写兼容 python2/3 的代码。你可以有四行和一个丑陋的 try/catch,或者你可以只使用六行。 @Reishin Six 是 2015 年下载量排名第六的 Python 包 - 只有 setuptools、requests、virtualenv、distribute 和 boto 的下载频率更高(请参阅 my analysis)。有经验的 Python 开发人员很有可能已经安装了这个。 下载最多的原因是 90% 的“开发人员”在不了解最佳实践的情况下盲目地从这里复制粘贴食谱。好吧,最后,“开发”选择用 3d 派对库过度拥挤他的产品,他只使用一个函数,这可以通过本机 python 轻松完成,但它会导致糟糕的应用程序具有数千个依赖项和糟糕的优化。 @Reishin - 任何时候您在开发软件时,都必须在添加依赖项时权衡您的决定。在 Native Python 中做任何事情都是有风险的,因为它会创建更多的代码,你必须管理、调试、单元测试等。引入模块是有风险的,因为你相信其他包的维护者会正确地维护它们。并且很有可能,如果您尝试编写与 python2/3 兼容的代码,那么您将使用的不仅仅是这六个。我在很多地方都使用它。【参考方案6】:对于python 3 点安装 urllib
在 %PYTHON_HOME%\Lib\site-packages\solrcloudpy\utils.py 中找到 utils.py
把import urlparse
改成
from urllib import parse as urlparse
【讨论】:
【参考方案7】:对于 Python 3,请使用以下命令:
import urllib.parse
【讨论】:
【参考方案8】:Python 2.7.11 中的 urlparse 在 Python 3 中被重命名为 urllib.parse。 所以,如果你有这样的代码 from urlparse import urlparse,我建议你把它改成 from urllib.parse import urlparse 由于您使用的是 python 2.7.5,因此使用以下内容将解决您的问题
from urlparse import urlparse
而不是from urllib.parse import urlparse
【讨论】:
【参考方案9】:手动包含 urllib.parse:https://docs.python.org/3.3/library/urllib.parse.html#module-urllib.parse
【讨论】:
【参考方案10】:问题是因为我的 Django (1.4.10) 版本较低,所以 Django Rest Framework 至少需要 Django 1.4.11 或更高版本。感谢他们的回答!
这里是Django Rest需求的链接:http://www.django-rest-framework.org/
【讨论】:
【参考方案11】:pip install -U websocket
我只是用它来解决我的问题
【讨论】:
我在某处看到了这个答案,即使这确实解决了问题,因为 urlparse 作为依赖项,但也不是解决问题的正确方法。以上是关于没有名为 urllib.parse 的模块(我应该如何安装它?)的主要内容,如果未能解决你的问题,请参考以下文章