【问题标题】:Python DNS module import errorPython DNS模块导入错误
【发布时间】:2014-03-05 16:30:57
【问题描述】:

我一直在使用 python dns 模块。我试图在新的 Linux 安装上使用它,但模块没有被加载。 我已尝试清理并安装,但安装似乎无法正常工作。

$蟒蛇--版本 Python 2.7.3 $ sudo pip 安装 dnspython 下载/解压 dnspython 下载 dnspython-1.11.1.zip (220Kb):下载了 220Kb 为包 dnspython 运行 setup.py egg_info 安装收集的包:dnspython 为 dnspython 运行 setup.py install 成功安装dnspython 打扫干净... $蟒蛇 Python 2.7.3(默认,2013 年 9 月 26 日,20:03:06) [GCC 4.6.3] 在 linux2 上 输入“帮助”、“版权”、“信用”或“许可”以获取更多信息。 >>> 导入 dns 回溯(最近一次通话最后): 文件“”,第 1 行,在 ImportError:没有名为 dns 的模块

python 版本和 pip 版本命令的更新输出

$哪个蟒蛇 /usr/bin/python $蟒蛇--版本 Python 2.7.3 $点子--版本 来自 /usr/lib/python2.7/dist-packages 的 pip 1.0 (python 2.7)

非常感谢您的帮助。

注意:- 我在新机器上安装了防火墙。我不确定它是否会影响导入。但我已经尝试禁用它,但它似乎仍然不起作用。

【问题讨论】:

  • 很可能 dnspython 是为您系统上的另一个 Python 版本安装的。例如,某些系统默认安装了 Python 2.4。
  • 您可以尝试其他 SO 问题的两个最佳答案之一:stackoverflow.com/q/2812520/42346
  • 谢谢@bernie。我尝试了其他堆栈溢出的答案,但我认为我没有安装多个版本的 python。安装的 pip 也与 python 的版本相匹配。我已经编辑了上面的答案以显示 pip 版本和 python 版本。

标签: python python-2.7 module resolver


【解决方案1】:

我在使用 dnspython 时遇到了同样的问题。

我的解决方案是从他们的官方 GitHub 项目构建源代码。

所以我的步骤是:

git clone https://github.com/rthalley/dnspython
cd dnspython/
python setup.py install

完成此操作后,我能够导入 dns 模块。

编辑

似乎 pip install 不适用于此模块。按照说明从源安装。

【讨论】:

  • 感谢@DanGar 我能够构建包并安装它现在它可以工作了。但是,您知道这是因为模块还是我的设置中的安装问题。
  • 很高兴它起作用了 :) 这很可能是我们安装设置的问题,因为我已经在其他开发机器上使用了您的方法。
  • 对于 Debian 中的 python3 sudo apt-get install python3-dnspython
【解决方案2】:

我通过卸载然后使用 PIP 重新安装 dnspython 模块解决了这个问题。

$ pip uninstall dnspython

在 pycache 中的一长串文件之后,键入 y 继续卸载。完成输入后:

$ pip install dnspython

然后我运行我的脚本并解决了错误。

【讨论】:

    【解决方案3】:

    您也可以使用以下命令通过 pip 安装软件包:

    pip install git+https://github.com/rthalley/dnspython

    【讨论】:

    • 这也适用于 zip 文件等。例如:pip install https://github.com/rthalley/dnspython/archive/v1.15.0.zip
    【解决方案4】:

    我使用 pip install dnspython 在我的 Ubuntu 机器上安装了 dnspython 1.11.1。我能够毫无问题地导入 dns 模块

    我在基于 Ubuntu 的服务器上使用 Python 2.7.4。

    【讨论】:

      【解决方案5】:

      在 Debian 7 Wheezy 上,我必须这样做:

      pip install --upgrade dnspython
      

      即使安装了 python-dns 包。

      【讨论】:

        【解决方案6】:

        很可能您正在使用的 pip 版本没有安装到您正在使用的 python 版本。我有一个盒子就是这种情况......

        尝试:

        which python
        
        python --version
        
        pip -V
        

        如果看起来 pip 与您的 python 不匹配,那么您可能有类似我在盒子上找到的多个版本的 python 和 pip...

        [root@sdpipeline student]# locate bin/pip
        
        /home/student/class/bin/pip
        
        /home/student/class/bin/pip-2.7
        
        /usr/bin/pip
        
        /usr/bin/pip-python
        

        只要我使用 /home/student/class/bin/pip(2.7 与我在那个盒子上的 python 版本匹配),那么我的导入就可以正常工作。

        您也可以尝试从源安装 pip:http://www.pip-installer.org/en/latest/installing.html

        可能有更好的方法来做到这一点,我也在学习我的方法,但这就是我解决它的方法——希望它有所帮助!

        【讨论】:

        • 感谢@scottsanchez 我已经更新了上面的帖子以显示 pip 版本和 python 版本的输出。但似乎我只安装了一个python。我将尝试从源代码安装 pip,看看它是如何工作的。
        【解决方案7】:

        这里的一个可能原因可能是你的脚本有错误的 shebang(所以它没有使用你的 virtualenv 中的 python)。我刚刚做了这个改变,它的工作原理:

        -#!/bin/python
        +#!/usr/bin/env python
        

        或者忽略 shebang,只在你的 venv 中使用 python 运行脚本:

        $ python your_script.py
        

        【讨论】:

        • 对我来说就是这种情况,其中 cli python 是 /usr/local/bin/python 但 shebang 是 #!/usr/bin/python3
        【解决方案8】:

        我在使用“import dns.resolver”时遇到错误。我尝试了 dnspython、py3dns 但它们失败了。 dns 不会安装。经过多次尝试后,我安装了 pubdns 模块,它解决了我的问题。

        【讨论】:

          【解决方案9】:

          我遇到了同样的问题并解决了这个问题,如下所述: 由于您已经成功下载并安装了dnspython,所以

          1. 进入文件夹 dnspython
          2. 你会找到dns目录,现在复制它
          3. 然后粘贴到site-packages目录里面

          就是这样。现在你的问题会解决

          如果没有安装 dnspython,你可以这样安装:

          1. 进入你的python安装文件夹site-packages目录
          2. 在此处打开cmd并输入命令: pip install dnspython

          现在,dnspython就安装成功了。

          【讨论】:

            【解决方案10】:

            此问题可能由 Symantec End Point Protection (SEP) 生成。 而且我怀疑大多数 EPP 产品可能会影响您的脚本运行。

            如果 SEP 被禁用,脚本将立即运行。

            因此,您可能需要更新 SEP 策略以不阻止 python 脚本访问内容。

            【讨论】:

              【解决方案11】:

              我从 github 源安装了 DNSpython 2.0.0,但运行 'pip list' 会显示旧版本的 dnspython 1.2.0

              它只有在我运行 'pip uninstall dnspython' 后才起作用,它删除了旧版本,只剩下 2.0.0,然后 'import dns' 运行顺利

              【讨论】:

                【解决方案12】:

                在我的情况下,我已经在名为“dns.py”的文件中编写了代码,它与包冲突,我必须重命名脚本文件名。

                【讨论】:

                  【解决方案13】:

                  可以解决这个问题 首先通过 cmd 使用 pip install dnspython 为 python 安装 dns
                  (如果您使用 conda 首先输入 activate 然后您将进入 base(在 cmd 中),然后输入上面的代码) 它将安装在anaconda站点包中,从cmd复制该站点包文件夹的位置,然后打开它。现在复制所有 dns 文件夹并将它们粘贴到 python 站点包文件夹中。它会解决它。

                  实际上是我们的代码无法在 python\site 包中找到指​​定的包 bcz 它在 anaconda\site 包中。所以你必须复制它(而不是剪切)。

                  【讨论】:

                    【解决方案14】:

                    我在 mac 上导入时遇到了类似的问题。我安装了 python 3.7.3 以下步骤帮助我解决了它:

                    1. pip3 卸载 dnspython
                    2. sudo -H pip3 安装 dnspython

                    导入域名

                    导入 dns.resolver

                    【讨论】:

                      【解决方案15】:

                      如果您没有(或不想)安装pip,还有另一种方法。您可以通过本机 OS 包管理器安装包来解决此问题。

                      例如对于基于 Debian 的系统,这将是命令:

                      apt install python3-dnspython

                      【讨论】:

                        猜你喜欢
                        • 2012-07-14
                        • 2023-03-03
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 1970-01-01
                        • 2018-12-20
                        相关资源
                        最近更新 更多