Я новичок в тканях и у меня проблемы с тем, чтобы заставить его работать. Сначала я установил его через pip3, когда пытался запустить, я получал команду «fab», не найденную, в конце концов я нашел ее в /home/me/.local/bin/fab2.
Это правильное место?
Во-вторых, когда я запускаю его так
/home/me/.local/bin/fab2 version
я получил
(2, 3, 1)
2.3.1
No idea what 'version' is!
import fabric
if hasattr(fabric, '__version__'):
# For fabric2
print(fabric.__version_info__)
print(fabric.__version__) # for a version tuple
else:
# for fabric1
from fabric.api import *
print(env.version)
Является ли /home/me/.local/bin/fab2 правильным местоположением?
Что такое «Понятия не имею, что такое «версия»!» почему оно появляется?
Он ищет функцию задачи с именем «версия» в fabfile и не находит ее. fab --version
делает там то, что вы хотите.
$HOME/.local/bin/
— это место, где pip устанавливает исполняемые «точки входа», когда вы pip install --user ...
— вы можете добавить $HOME/.local/bin
к PATH
(например, в ~/.bash_profile
или ~/.bashrc
). Если бы вы сделали sudo pip install Fabric
(без --user
), это поместило бы исполняемую точку входа в /usr/local/bin/
, которая, вероятно, уже находится в ваших PATH
. Или вы можете вместо этого python -m fabric <fab args>
.
Привет, спасибо, ткань -- версия сработала отлично
Я изменил сценарий, чтобы он выглядел так
def hello():
print("Hello world!")
Я все еще получаю сообщение «Понятия не имею, что такое «привет»!»
Есть ли учебник для ткани 2? У меня чертовски много времени, чтобы заставить что-нибудь работать в нем. Я нашел учебник по ткани 1.14, но на данный момент он не очень полезен, так как ни один из импортов не работает. Я предполагаю, что ткань 2 справляется с этим по-другому.
если я запускаю с fab или fab2, я получаю ту же ошибку
У меня есть ткань в /home/me/fabric
@ajmcateer , у меня тоже была эта проблема. Проблема в том, что новый метод задачи ткани (как обсуждалось здесь - http://docs.fabfile.org/en/1.14/usage/tasks.html) заключается в использовании декоратора @task . Эквивалентный пример «Hello World»:
from fabric import task
<strong i="8">@task</strong>
def hello(ctx):
print("Hello World")
Запуск «fab hello» дает ожидаемый результат.
У меня есть как from fabric import task
, так и декоратор @task
.
Тем не менее я получаю сообщение об ошибке «Понятия не имею..».
Дополнительные детали :
$ fab --version
Fabric 2.3.1
Paramiko 2.4.1
Invoke 1.1.1
$ python --version
Python 3.6.2
$ more tasks.py
#!/usr/bin/env python
from fabric import task
<strong i="10">@task</strong>
def build(c):
import pdb; pdb.set_trace()
print("Building!")
$ fab build -f tasks.py
No idea what 'build' is!
@mandravaze , я могу подтвердить, что это сработало для меня, хотя у меня есть задача в fabfile.py (она думает, что это проблема в вашей среде), и я использую следующую строку для вызова
$ потрясающая сборка
он думает, что это проблема в вашей среде
Как я могу устранить неполадки? Какие дополнительные данные вы хотели бы получить?
Какие файлы у вас есть в этом месте? Я думаю, что build() должен быть в fabfile.py, если он там есть, возможно, ваш fab подбирает неправильный файл...
@mandarvaze в вашей команде fab build -f tasks.py
есть несколько путаниц.
fab -f tasks.py build
-f
предназначен для файла конфигурации, а не для набора задач, это флаг -c
, например fab -c tasks build
(без расширения «.py»!)inv
(вызов), если файл с задачами — tasks.py в текущем каталоге, указывать его не нужно. Для fab
(ткань), если файл с задачами — fabfile.py в текущей директории, указывать его не нужно.@ploxiln fab -c tasks build
работает. 👍
Спасибо.
@ajmcateer , у меня тоже была эта проблема. Проблема в том, что новый метод задачи ткани (как обсуждалось здесь - http://docs.fabfile.org/en/1.14/usage/tasks.html) заключается в использовании декоратора @task . Эквивалентный пример «Hello World»:
from fabric import task <strong i="9">@task</strong> def hello(ctx): print("Hello World")
Запуск «fab hello» дает ожидаемый результат.
извините за глупый вопрос, но зачем нам аргумент ctx? что это?
в Fabric 2 вам нужно это ctx
для фактического запуска команд в правильной системе, например, ctx.run("hostname")
Если ваша проблема заключается в том, что вы получаете эту ошибку для аргумента задачи, возможно, вы передаете аргумент не в его правильном формате, а в том виде, в котором вы назвали свою задачу.
fab mytask --task-name value
нет
fab mytask --task_name value
Я понимаю, что это не то место по проблеме, но, поскольку я оказался здесь, я оставлю это для всех, у кого есть такая же проблема.
в Fabric 2 вам нужно это
ctx
для фактического запуска команд в правильной системе, например,ctx.run("hostname")
Прежде всего спасибо за информацию!!
К сожалению, я должен сказать, что Fabric 2 совершенно тупой. Логика 2.x очень нелогична, и кажется, что действительно не так много хороших базовых руководств о том, как ее использовать. Например, возможно, я что-то упускаю, но посмотрите на логику 1.x и качество этого туториала по 1.x: https://docs.fabfile.org/en/1.14/tutorial.html. Тогда поищите аналогичный туториал для 2.x....
Неудивительно, что существует неофициальный порт 1.x, и они довольно смело называют его 3.x.
Просто к вашему сведению, что _ни одна_ из этих подробностей о необходимости декоратора @task
, необходимости передачи объекта контекста и т. д. присутствует в разделе «Обзор и руководство» общедоступной документации для Fabric: https://docs .fabfile.org/en/1.8/tutorial.html
Я был активным пользователем Fabric 1 и наивно полагал, что это пошаговое руководство учит меня новой семантике для Fabric 2, прежде чем я нашел этот билет задачи. Это может действительно препятствовать принятию, поскольку документы по существу вводят людей в заблуждение.
Я не уверен, как вы оказались на этой странице, вам следует посмотреть https://docs.fabfile.org/en/2.5/getting-started.html.
Спасибо за это! Возможно, это поможет будущим путешественникам добавить толстый заголовок «УСТАРЕЛО» в документах 1-й серии. Я почти уверен, что перешел к этому либо из лучших результатов Google, либо из официальной документации веб-сайта Fabric, и в любом случае я думаю, что, хотя первое не является чем-то, что команда Fabric может контролировать, я подозреваю, что многие потенциальные последователи несут это разочарование, и может быть полезно получить предупреждение о необходимости найти актуальную документацию (официальные документы, размещенные на Python, следуют аналогичному шаблону iirc).
Это может действительно препятствовать принятию, поскольку документы по существу вводят людей в заблуждение.
Совершенно новый пользователь Fabric. Я погуглил «Fabric Python» и щелкнул ссылку «Обзор и руководство». Да, я нашел это действительно запутанным и очень удивлен, что смог пойти неправильным путем так рано в процессе.
Я подозреваю, что многие потенциальные последователи испытывают это разочарование и могли бы извлечь пользу из предупреждения о необходимости найти актуальную документацию (официальная документация, размещенная на Python, следует аналогичному шаблону iirc).
да.
Также обратите внимание, что это страница результатов:
Эти ссылки с отступом можно настроить, если вы управляете доменом. Возможно, можно очистить результаты поиска от материалов 1.x, добавив к ним заголовок «УСТАРЕЛО».
Я просто наткнулся на это и, наконец, смог это исправить. С тканью все в порядке.
Вот что я сделал.
╰─$ fab --version
Fabric 2.5.0
Paramiko 2.7.2
Invoke 1.4.1
В моем fabfile.py
:
from fabric.tasks import task
<strong i="11">@task</strong>
def test(ctx, title):
print("ctx:", ctx)
print("title:", title)
Если я просто запускаю задачу:
╰─$ fab test
'test' did not receive required positional arguments: 'title'
Это означает, что он ожидает title
в качестве аргумента.
Итак, передайте аргумент:
fab test title="hello world"
Вывод:
ctx: <your current context. Don't worry about it>
title: title=hello world
Но имейте в виду, что переданный аргумент будет строкой. Не забудьте разделить с помощью =
.
Например:
<strong i="28">@task</strong>
def test(ctx, title):
print("ctx:", ctx)
print("title type:", type(title))
print("title:", title)
print("title value:", title.split("=")[1])
бегать:
fab test title="hello world"
Вывод:
ctx: ...
title type: <class 'str'>
title: title=hello world
title value: hello world
Самый полезный комментарий
@ajmcateer , у меня тоже была эта проблема. Проблема в том, что новый метод задачи ткани (как обсуждалось здесь - http://docs.fabfile.org/en/1.14/usage/tasks.html) заключается в использовании декоратора @task . Эквивалентный пример «Hello World»:
Запуск «fab hello» дает ожидаемый результат.