您好,我在理解软件包管理器时遇到了麻烦,例如apt
pip
pip3
我正在尝试使用fabric3
库自动执行shell命令
我正在看一本书,该书告诉我编写以下shell命令pip install fabric3
我的fabfile.py
包含仅在python3上工作的f字符串
当我执行pip list
时,我看到Fabric3 (1.14.post1)
,因此我假设软件包已成功安装,但是当我运行fab
时,找不到fab,并且命令行是告诉我sudo apt install fabric
但是这样做是没有用的,因为fabric
仅与python2.7
一起使用
基本上,我已经想到了两种可能的解决方案:
1-试图使fab
命令使用python3.6
代替python2.7
吗?但是我不知道该怎么办...
2-删除Fabric,并保留Fabric3,但是由于某种原因,我得到了这个'fab' not found
,但我不明白为什么
我已经阅读了文档,但是确实很模糊,我找不到我的问题的答案
任何帮助将不胜感激, 谢谢
Update1:
所以当我运行pip list
asn1crypto (0.24.0)
attrs (17.4.0)
Automat (0.6.0)
bcrypt (3.1.7)
blinker (1.4)
certifi (2018.1.18)
cffi (1.13.2)
chardet (3.0.4)
click (6.7)
cloud-init (19.2)
colorama (0.3.7)
command-not-found (0.3)
configobj (5.0.6)
constantly (15.1.0)
cryptography (2.8)
distro-info (0.18ubuntu0.18.04.1)
Fabric3 (1.14.post1)
httplib2 (0.9.2)
hyperlink (17.3.1)
idna (2.6)
incremental (16.10.1)
Jinja2 (2.10)
jsonpatch (1.16)
jsonpointer (1.10)
jsonschema (2.6.0)
keyring (10.6.0)
keyrings.alt (3.0)
language-selector (0.1)
MarkupSafe (1.0)
netifaces (0.10.4)
oauthlib (2.0.6)
PAM (0.4.2)
paramiko (2.7.1)
pip (9.0.1)
pyasn1 (0.4.2)
pyasn1-modules (0.2.1)
pycparser (2.19)
pycrypto (2.6.1)
pygobject (3.26.1)
PyJWT (1.5.3)
PyNaCl (1.3.0)
pyOpenSSL (17.5.0)
pyserial (3.4)
python-apt (1.6.4)
python-debian (0.1.32)
pyxdg (0.25)
PyYAML (3.12)
requests (2.18.4)
requests-unixsocket (0.1.5)
SecretStorage (2.3.1)
service-identity (16.0.0)
setuptools (39.0.1)
six (1.13.0)
ssh-import-id (5.7)
systemd-python (234)
Twisted (17.9.0)
ufw (0.36)
unattended-upgrades (0.1)
urllib3 (1.22)
wheel (0.30.0)
zope.interface (4.3.2)
Fabric3已正确安装
然后,我运行以下命令将代码部署在服务器上:
fab deploy:host=xxx@yyy
其中xxx
是用户名
而yyy
是域名
我收到以下错误:Command 'fab' not found, but can be installed with: sudo apt install fabric
注意:我尝试了此命令update-alternatives --install /usr/bin/python python /usr/bin/python3.6 10
在此主题Unable to set default python version to python3 in ubuntu
和which python
静止点指向/usr/bin/python
我发现我有/usr/bin/python3.6
您是否认为如果我设法使which python
指向/usr/bin/python3.6
,我的问题就可以解决?
答案 0 :(得分:0)
首先,fabric3是未经授权的分支,如下所示:
不幸的是,PyPI上的fabric3条目是未经授权的 我们无法控制的Fabric1.x。一旦现代Fabric达到3.x, 4.x等,为方便起见,我们可能会继续通过fabric和fabric2分发它;永远不会有任何官方面料3, fabric4等。
换句话说,fabric2纯粹是为了帮助1.x的用户 2.0“重大重写”障碍;未来的主要版本将不会进行大的重写,而只会出现少量的向后不兼容问题。
请注意,您的系统上安装了两个版本的Python。 python2.7
和python3.6
。调用pip install PACKAGE_NAME
时,默认情况下会调用与pip
关联的ptyhon2.7
。
要确保使用哪个命令,请键入以下命令pip --version
。我猜它将返回类似pip x.x.x from /usr/lib/python2.7/site-packages (python 2.7)
的内容。因此,您必须在系统上为pip
安装python3.6
。请注意,然后您必须使用pip3
而不是pip
。
通过执行以下命令来卸载fabri3:pip uninstall fabric3
pip3 install fabric>=2.4.0
fab deploy
。不要忘记为您的函数命名,deploy
就是这样的: from fabric import Connection as connection, task
@task
def deploy(ctx):
with connection(host=host, user=user) as c:
c.run('pwd')