没有名为 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.parseurllib.requesturllib.error

如果由于某种原因无法更改导入,我建议您快速查看 CentOS 中的软件集合。 你可以像这样引入 Python 3.3:

    yum install centos­-release­-SCL yum install python33 scl enable python33

查看this 页面以获取有关 SCL 的更多信息

【讨论】:

【参考方案4】:

python3 支持urllib.parsepython2 支持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) &lt;= 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 的模块(我应该如何安装它?)的主要内容,如果未能解决你的问题,请参考以下文章

Python-urllib库parse模块解析链接常用方法

URL编码与解码(使用 Python3 urllib.parse) 与 贴吧小爬虫案例

urllib库详解

Python 的 urllib.parse 库解析 URL

urllib模块

爬虫--urllib模块