存在结构问题的部署

Posted

技术标签:

【中文标题】存在结构问题的部署【英文标题】:deployment with fabric issues 【发布时间】:2020-01-05 14:24:23 【问题描述】:

您好,我无法理解包管理器,例如 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,我不明白为什么

我已经阅读了文档,但它真的很晦涩,我找不到我的问题的答案

任何帮助将不胜感激, 谢谢


更新1:

所以当我运行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 我的问题会得到解决吗?

【问题讨论】:

在您的终端中运行:which python 以查看您使用的是哪个 python 版本。还有哪个操作系统 - 听起来像 linux? 感谢您的回答which python 指向/usr/bin/python 是Linux 我确实尝试了alias python=python3,因为我试图使用python3作为默认python版本 你能用你的脚本内容更新帖子吗?还有你如何运行它。 是的,已经更新了 【参考方案1】:

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

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

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

Source

    请注意,您的系统上安装了两个版本的 Python。 python2.7python3.6。当您调用pip install PACKAGE_NAME 时,它默认调用与ptyhon2.7 关联的pip。 要确定使用哪一个,请键入以下命令 pip --version。我猜它会返回类似pip x.x.x from /usr/lib/python2.7/site-packages (python 2.7) 的东西。因此,您必须在系统上为python3.6 安装pip。请注意,您必须使用pip3 而不是pip

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

    使用新安装的pip3 install fabric>=2.4.0安装fabric2 从部署脚本所在的目录运行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')

【讨论】:

以上是关于存在结构问题的部署的主要内容,如果未能解决你的问题,请参考以下文章

Spark HA高可用部署

C# EF 代码首先部署到 Godaddy

IIS7.5 网站部署问题

关于Servlet部署的问题,求助,急!!!

Springboot 热部署中存在冲突的问题

ASP.NET Linux部署 Mono 遇到的问题