развертывание с проблемами fabri c - PullRequest
0 голосов
/ 05 января 2020

Здравствуйте, у меня проблемы с пониманием менеджера пакетов, например apt pip pip3

Я пытаюсь автоматизировать команду оболочки с использованием fabric3 library

после книги, которая говорит мне написать следующую команду оболочки pip install fabric3

My fabfile.py содержит f-строки, которые работают только на python3

, когда я выполняю pip list I см. Fabric3 (1.14.post1), поэтому я предполагаю, что пакет успешно установлен, но когда я запускаю свой fab, я получаю fab not found, и командная строка сообщает мне sudo apt install fabric

Но это так бесполезно, потому что fabric работает только с python2.7

В принципе, я подумал о двух возможных решениях моей проблемы:
1- Попытка заставить команду fab использовать вместо нее python3.6 python2.7? Но я не знаю, как это сделать ...
2- Удаление Fabri c и сохранение 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, найденную в этой топи c Не удалось установить python версию по умолчанию python3 в Ubuntu

и which python неподвижные точки указывают на /usr/bin/python

Я обнаружил, что у меня есть /usr/bin/python3.6 Как вы думаете, если мне удастся указать which python, указывающий на /usr/bin/python3.6, моя проблема будет решена?

1 Ответ

0 голосов
/ 14 января 2020

Прежде всего fabric3 - это неавторизованная вилка fabri c, как указано здесь:

к сожалению, запись fabric3 в PyPI - это неавторизованная вилка Fabri c 1.x, которую мы делаем не контроль Как только современные Fabri c получат до 3.x, 4.x и c, мы, вероятно, продолжим распространять их через fabri c и fabric2 для удобства; никогда не будет никакого официального fabric3, fabric4 et c.

Другими словами, fabric2 исключительно для того, чтобы помочь пользователям 1.x преодолеть барьер «переписывания» 2.0; будущие основные версии не будут большими переписанными и будут иметь только небольшие наборы обратной несовместимости.

Источник

  1. Обратите внимание, что в вашей системе установлено две версии 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.

  2. Удалите fabri3, выполнив следующую команду: pip uninstall fabric3

  3. Установите fabric2 с помощью только что установленного pip3 install fabric>=2.4.0
  4. Run 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')

...