Fabric: "Aucune idée de ce que *quelque chose* est !" après avoir exécuté fabric2

Créé le 16 août 2018  ·  18Commentaires  ·  Source: fabric/fabric

Je suis nouveau sur le tissu et j'ai du mal à le faire fonctionner. Je l'ai d'abord installé via pip3 lorsque j'ai essayé de l'exécuter, j'obtenais la commande 'fab' introuvable, je l'ai finalement trouvée dans /home/me/.local/bin/fab2.

Est-ce le bon endroit ?

Deuxièmement, chaque fois que je le lance comme ça

/home/me/.local/bin/fab2 version

Je reçois

(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)

Est-ce que /home/moi/.local/bin/fab2 est le bon emplacement ?
Qu'est-ce que 'Aucune idée de ce qu'est la 'version' !' pourquoi s'affiche-t-il ?

Commentaire le plus utile

@ajmcateer , j'ai aussi eu ce problème. Le problème est que la nouvelle méthode de tâche de tissu (comme discuté ici - http://docs.fabfile.org/en/1.14/usage/tasks.html) consiste à utiliser le décorateur @task . L'exemple équivalent "Hello World" est :

from fabric import task

<strong i="8">@task</strong>
def hello(ctx):
  print("Hello World")

L'exécution de "fab hello" donne la sortie attendue.

Tous les 18 commentaires

Il recherche une fonction de tâche nommée "version" dans un fichier fab et n'en trouve pas. fab --version fait ce que vous voulez là-bas.

$HOME/.local/bin/ est l'endroit où pip installe des "points d'entrée" exécutables lorsque vous pip install --user ... - vous pouvez ajouter $HOME/.local/bin à votre PATH (par exemple dans votre ~/.bash_profile ou ~/.bashrc ). Si vous faisiez sudo pip install Fabric (sans --user ), cela mettrait le point d'entrée exécutable dans /usr/local/bin/ qui est probablement déjà dans votre PATH . Ou vous pouvez probablement python -m fabric <fab args> la place.

Salut merci tissu -- la version a très bien fonctionné

J'ai changé le script pour ressembler à ceci

def hello():
    print("Hello world!")

Je reçois toujours 'Aucune idée de ce qu'est 'bonjour' !'

Existe-t-il un tutoriel pour le tissu 2? J'ai beaucoup de mal à faire fonctionner quoi que ce soit. J'ai trouvé le tutoriel pour fabric 1.14 mais ce n'est pas vraiment utile pour le moment car aucune des importations ne fonctionne. Je suppose que le tissu 2 le gère différemment.

si je cours avec fab ou fab2 j'obtiens la même erreur

J'ai du tissu dans /home/moi/tissu

@ajmcateer , j'ai aussi eu ce problème. Le problème est que la nouvelle méthode de tâche de tissu (comme discuté ici - http://docs.fabfile.org/en/1.14/usage/tasks.html) consiste à utiliser le décorateur @task . L'exemple équivalent "Hello World" est :

from fabric import task

<strong i="8">@task</strong>
def hello(ctx):
  print("Hello World")

L'exécution de "fab hello" donne la sortie attendue.

J'ai à la fois from fabric import task et @task décorateur.
Je reçois toujours l'erreur "Aucune idée ..".

Détails supplémentaires :

$ 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 , je peux confirmer que cela a fonctionné pour moi, même si j'ai une tâche dans fabfile.py (il pense que c'est le problème dans votre env) et j'utilise la ligne suivante pour appeler
$ construction fabuleuse

il pense que c'est le problème dans votre env

Comment puis-je dépanner ? Quelles données supplémentaires souhaitez-vous ?

Quels fichiers avez-vous à cet emplacement ? Je pense que build() devrait être dans le fichier fabfile.py, s'il est là, peut-être que votre fab récupère le mauvais fichier...

@mandarvaze dans votre commande fab build -f tasks.py il y a plusieurs confusions.

  • les arguments pour fab lui-même doivent venir avant le premier nom de tâche, comme fab -f tasks.py build
  • le drapeau -f est pour un fichier de configuration, pas pour une collection de tâches, c'est le drapeau -c , comme fab -c tasks build (pas d'extension ".py" !)
  • Pour inv (invoke), si le fichier avec les tâches est tasks.py dans le répertoire courant, vous n'avez pas besoin de le spécifier. Pour fab (fabric), si le fichier avec les tâches est fabfile.py dans le répertoire courant, vous n'avez pas besoin de le spécifier.

@ploxiln fab -c tasks build fonctionne. 👍
Merci.

@ajmcateer , j'ai aussi eu ce problème. Le problème est que la nouvelle méthode de tâche de tissu (comme discuté ici - http://docs.fabfile.org/en/1.14/usage/tasks.html) consiste à utiliser le décorateur @task . L'exemple équivalent "Hello World" est :

from fabric import task

<strong i="9">@task</strong>
def hello(ctx):
  print("Hello World")

L'exécution de "fab hello" donne la sortie attendue.

désolé pour la question stupide, mais pourquoi avons-nous besoin de l'argument 'ctx' ? Qu'est-ce que c'est?

dans fabric 2, vous avez besoin de ce ctx pour exécuter des commandes sur le bon système, par exemple ctx.run("hostname")

Si votre problème est que vous recevez cette erreur pour un argument de tâche, il se peut que vous ne passiez pas l'argument dans son format correct, mais comme vous avez nommé votre tâche.

fab mytask --task-name value

ne pas

fab mytask --task_name value

Je me rends compte que ce n'est pas le problème, mais puisque je me suis retrouvé ici, je laisserai cela à quiconque a le même problème.

dans fabric 2, vous avez besoin de ce ctx pour exécuter des commandes sur le bon système, par exemple ctx.run("hostname")

Tout d'abord merci pour l'info !!

Malheureusement, je dois dire que Fabric 2 est complètement obtus. La logique de 2.x est très contre-intuitive et il ne semble vraiment pas y avoir beaucoup de bons tutoriels de base sur la façon de l'utiliser. Par exemple, il me manque peut-être quelque chose, mais regardez la logique de 1.x et la qualité de ce tutoriel 1.x : https://docs.fabfile.org/en/1.14/tutorial.html. Ensuite, cherchez un tutoriel équivalent pour 2.x ....

Pas étonnant qu'il existe un port non officiel de 1.x et qu'ils l'appellent - assez audacieusement - 3.x

Juste un FYI général que _aucun_ de ce détail autour de la nécessité du décorateur @task , devant passer un objet de contexte, etc. sont présents dans la section "Vue d'ensemble et didacticiel" de la documentation publique de Fabric : https://docs .fabfile.org/en/1.8/tutorial.html

J'étais un gros utilisateur de Fabric 1 et je supposais naïvement que cette procédure pas à pas m'enseignait une nouvelle sémantique pour Fabric 2 avant de trouver ce ticket de problème. Cela pourrait vraiment décourager l'adoption car les documents sont essentiellement trompeurs pour les personnes qui s'intègrent.

Je ne sais pas comment vous vous êtes retrouvé sur cette page, vous devriez regarder https://docs.fabfile.org/en/2.5/getting-started.html

Merci pour ça! Peut-être que cela aiderait les futurs voyageurs à ajouter un gros en-tête "OBSOLÈTÉ" sur les documents de la série 1. Je suis à peu près sûr d'avoir navigué vers cela à partir d'un résultat Google supérieur ou des documents officiels du site Web Fabric, et dans les deux cas, je pense que même si le premier n'est pas quelque chose que l'équipe Fabric peut contrôler, je soupçonne que de nombreux adoptants potentiels encourent cette frustration et pourrait bénéficier d'être alerté de la nécessité de trouver les documents à jour (les documents officiels Python hébergés suivent un modèle similaire iirc).

Cela pourrait vraiment décourager l'adoption car les documents sont essentiellement trompeurs pour les personnes qui s'intègrent.

Nouvel utilisateur de Fabric. J'ai googlé "Fabric Python", et cliqué sur le lien qui disait "Vue d'ensemble et tutoriel". Oui, j'ai trouvé cela vraiment déroutant et je suis assez surpris d'avoir pu me tromper de chemin si tôt dans le processus.

Je soupçonne que de nombreux adopteurs potentiels subissent cette frustration et pourraient bénéficier d'être alertés de la nécessité de trouver les documents à jour (les documents officiels hébergés en Python suivent un modèle similaire iirc).

Oui.

Notez également qu'il s'agit de la page de résultats :

Screenshot from 2020-11-16 22-43-32

Ces liens en retrait peuvent être configurés si vous contrôlez le domaine. Il est peut-être possible de purger les éléments 1.x des résultats de la recherche en plus d'y ajouter un en-tête "OBSOLÈTÉ".

Je viens de tomber sur celui-ci et j'ai enfin pu le réparer. Rien ne va pas avec le tissu.
Voici ce que j'ai fait.

╰─$ fab --version
Fabric 2.5.0
Paramiko 2.7.2
Invoke 1.4.1

Dans mon fabfile.py :

from fabric.tasks import task

<strong i="11">@task</strong>
def test(ctx, title):
    print("ctx:", ctx)
    print("title:", title)

Si je lance simplement la tâche :

╰─$ fab test                                                                                                                                                                                                                      
'test' did not receive required positional arguments: 'title'

Cela signifie qu'il attend le title comme argument.
Alors, passez l'argument:

fab test title="hello world"

Sortir:

ctx: <your current context. Don't worry about it>
title: title=hello world

Mais sachez que l'argument passé sera une chaîne. Assurez-vous de diviser avec = .

Par example:

<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])

Cours:

fab test title="hello world"

Sortir:

ctx: ...
title type: <class 'str'>
title: title=hello world
title value: hello world

Cette page vous a été utile?
0 / 5 - 0 notes

Questions connexes

jamesob picture jamesob  ·  3Commentaires

Grazfather picture Grazfather  ·  4Commentaires

amezin picture amezin  ·  5Commentaires

supriyopaul picture supriyopaul  ·  4Commentaires

bitprophet picture bitprophet  ·  6Commentaires