部署时遇到结构问题

时间:2020-01-05 14:24:23

标签: python deployment fabric

您好,我在理解软件包管理器时遇到了麻烦,例如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,我的问题就可以解决?

1 个答案:

答案 0 :(得分:0)

首先,fabric3是未经授权的分支,如下所示:

不幸的是,PyPI上的fabric3条目是未经授权的 我们无法控制的Fabric1.x。一旦现代Fabric达到3.x, 4.x等,为方便起见,我们可能会继续通过fabric和fabric2分发它;永远不会有任何官方面料3, fabric4等。

换句话说,fabric2纯粹是为了帮助1.x的用户 2.0“重大重写”障碍;未来的主要版本将不会进行大的重写,而只会出现少量的向后不兼容问题。

Source

  1. 请注意,您的系统上安装了两个版本的Python。 python2.7python3.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

  2. 通过执行以下命令来卸载fabri3:pip uninstall fabric3

  3. 使用新安装的pip3 install fabric>=2.4.0
  4. 安装fabric2
  5. 从拥有部署脚本的目录中运行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')