Python import error :No module named Fabric.api?

Python import error :No module named Fabric.api?

我收到以下错误:

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 没有 linked 到 python 安装,即它不识别 fabric 是由 pip 安装的。 我正在使用 osx 默认的 python 版本 2.7。 我如何 link 结构安装到 python?

你将不得不更加明确。我创建了一个新的 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 ...

PS。在 virtualenv/pyenv 中完成所有 tests/projects 真的很好,这样您就不会与 current/future 项目发生冲突。

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

PIP install and Python path

我必须添加我的包的位置(安装不在 sys.path)所以我必须手动添加它们 使用 pip show 找到包的位置并将它们添加到 .bash_profile 正如@Javier Buzzi 所说,我会采纳建议以及 运行 来自 virtualenv 的 python 代码。

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

As of the 2.0 release line, Fabric 2 is not at 100% feature parity with 1.x! Some features have been explicitly dropped, but others simply have not been ported over yet,

Regarding fabric.api - 它不再存在:

  • Import everything via fabric.api
  • Removed
  • All useful imports are now available at the top level, e.g. from fabric import Connection.

建议将fabfile.py从1.x升级到2.xfor lot of reasons (e.g. Python 3 compatibility - specifically, we now support 2.7 and 3.4+), but if you still don't want to upgrade, you could uninstall 2.x and install 1.x,例如

pip uninstall fabric
pip install 'fabric<2.0'

经过一些研究,我发现当您 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.

的分支
pip uninstall fabric
pip install fabric3

请注意,fabric3 分支已 deprecated by the maintainer, so you should consider making the code updates required to upgrade 到 fabric v2。