【问题标题】:Python import error :No module named Fabric.api?Python 导入错误:没有名为 Fabric.api 的模块?
【发布时间】:2015-10-15 12:39:59
【问题描述】:

我收到以下错误:

Traceback (most recent call last):
  File "drayd.py", line 2, in <module>
    from fabric.api import *
**ImportError: No module named fabric.api**

我正在运行我的程序:

python drayd.py

这些是我的导入:

import os,pprint
from fabric.api import *
import time
import argparse
import ConfigParser

我没有其他答案建议的名为 fabric 的文件。我使用 pip 安装了fabric,但它仍然无法正常工作,有什么建议吗? 我正在使用 OSX 终端。

注意:我意识到我安装的fabric 没有链接到python 安装,即它不识别fabric 是由pip 安装的。 我正在使用osx默认的python 2.7版。 如何将结构安装链接到 python?

【问题讨论】:

    标签: python fabric importerror


    【解决方案1】:

    经过一番研究,我发现当你pip install fabric 时,它会安装fabric v2。这个版本introduced“几乎完全重新实现和重组软件”。您的代码是为 fabric v1 编写的,需要重写以与 fabric v2 兼容。

    Python 2.7

    根据 Robert Lujo 的回答,您可以将 fabric 降级到 v1。

    pip install 'fabric<2.0'
    

    Python 3

    Fabric v1 与 Python 3 不兼容,因此您可以安装一个名为 fabric3 的 fork。

    pip uninstall fabric
    pip install fabric3
    

    请注意,fabric3 fork 已被维护者deprecated,因此您应该考虑将upgrade 所需的代码更新到fabric v2。

    【讨论】:

    • 哇,你是怎么发现fabric是fabric2不兼容的?
    • 嘿@Timo 你可以做些什么来检查任何安装/库的任何版本是 - pip show fabric 它会向你显示 pip 为其安装的当前版本。
    【解决方案2】:

    如果您的 fabfile.py 基于较旧的结构版本(即 1.x),则会出现类似问题。目前fabric最新版本是2.x is not backward compatible:

    从 2.0 版本开始,Fabric 2 的功能还没有达到 100% 1.x!某些功能已被明确删除,但其他功能 只是还没有被移植过来,

    Regarding fabric.api - 它不再存在:

    • 通过fabric.api导入所有东西
    • 已移除
    • 现在所有有用的导入都在顶层可用,例如从面料进口连接。

    建议将 fabfile.py 从 1.x 升级到 2.x for lot of reasons例如 Python 3 兼容性 - 具体来说,我们现在支持 2.7 和 3.4+),但如果您仍然不想升级,可以卸载2.x和install 1.x,例如

    pip uninstall fabric
    pip install 'fabric<2.0'
    

    【讨论】:

      【解决方案3】:

      我的问题的答案就在这里:

      PIP install and Python path

      我必须添加我的包的位置(这些包没有安装在 sys.path 中)所以我必须手动添加它们 使用pip show 查找包的位置并将它们添加到.bash_profile 正如@Javier Buzzi 所说,我会接受建议并从 virtualenv 运行我的 python 代码。

      【讨论】:

        【解决方案4】:

        您将不得不更加明确。我创建了一个新的virtualenv,安装了fabric,一切都很好。您需要粘贴更多来源或有关您的环境的更多信息。

        $ cd /tmp
        $ virtualenv test && source test/bin/activate
        $ pip install fabric
        ...
        Successfully installed fabric-1.10.2
        $ python
        >>> from fabric.api import *
        >>> 
        

        让我们看看你有什么:

        $ python
        >>> import pkgutil
        >>> [name for _, name, _ in pkgutil.iter_modules()]
        ... paste THIS output somewhere ...
        

        附言。在 virtualenv/pyenv 中完成所有测试/项目真的很好,这样您就不会与当前/未来的项目发生冲突。

        【讨论】:

        • 我是fabric和python的新手,我应该发布什么其他信息?
        • 我必须在我的计算机上的远程服务器上运行我的 python 代码,我的计算机上安装了 python 2.7,我正在使用终端
        • 我确实 pip install fabric 并且很好,当我运行 fab 时它说:致命错误:找不到任何 fabfiles!请记住 -f 可用于指定 fabfile 路径,并使用 -h 获取帮助。中止。
        • 您是直接运行文件还是使用fab?如果你想做$ fab &lt;name of operation&gt; 你必须有一个fabfile.py。我的意思是粘贴整个源。以及你是如何运行它的。请确保从源代码中删除所有机密/密码/密钥。
        • 坦率地说。我会添加一个virtualenv 并在其中运行您的代码。您始终可以确保所有模块都在您安装它的 pip 中。
        猜你喜欢
        • 2015-02-09
        • 1970-01-01
        • 2016-07-11
        • 2013-03-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-09-14
        相关资源
        最近更新 更多