【问题标题】:no module named urllib.parse (How should I install it?)没有名为 urllib.parse 的模块(我应该如何安装它?)
【发布时间】: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

【问题讨论】:

    标签: python django urllib


    【解决方案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:

        1. yum install centos­-release­-SCL
        2. yum install python33
        3. 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】:
                【解决方案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 作为依赖项,但也不是解决问题的正确方法。
                  猜你喜欢
                  • 1970-01-01
                  • 2019-09-28
                  • 2018-07-13
                  • 2021-10-26
                  • 2021-04-19
                  • 1970-01-01
                  • 2022-07-29
                  • 1970-01-01
                  • 1970-01-01
                  相关资源
                  最近更新 更多