Fabric: 「*何か*が何であるかわからない!」 fabric2を実行した後

作成日 2018年08月16日  ·  18コメント  ·  ソース: fabric/fabric

私はファブリックに不慣れで、それを機能させるのに苦労しています。 最初に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は正しい場所ですか?
「バージョン」とは何ですか? なぜそれが現れるのですか?

最も参考になるコメント

@ajmcateer 、私もこの問題を抱えていました。 問題は、新しいファブリックタスクメソッド(ここで説明されているように-http://docs.fabfile.org/en/1.14/usage/tasks.html)が@taskデコレータを使用することです。 同等の「HelloWorld」の例は次のとおりです。

from fabric import task

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

'fab hello'を実行すると、期待どおりの出力が得られます。

全てのコメント18件

fabfileで「version」という名前のタスク関数を探していますが、見つかりません。 fab --versionはあなたがそこでやりたいことをします。

$HOME/.local/bin/は、 pip install --user ...のときにpipが実行可能な「エントリポイント」をインストールする場所です。 PATH$HOME/.local/binを追加できます(例: ~/.bash_profileまたは~/.bashrc )。 sudo pip install Fabric--userなし)を実行すると、実行可能エントリポイントが/usr/local/bin/に配置されます。これは、おそらくすでにPATHにあります。 または、代わりにpython -m fabric <fab args>を使用することもできます。

こんにちは、ファブリックに感謝します-バージョンはうまくいきました

スクリプトを次のように変更しました

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

私はまだ「こんにちは」が何であるかわからない!

ファブリック2のチュートリアルはありますか?私はファブリック2で何かを動作させるのに非常に時間がかかっています。 ファブリック1.14のチュートリアルを見つけましたが、インポートが機能しないため、現時点ではあまり役に立ちません。 ファブリック2では処理が異なると思います。

fabまたはfab2で実行すると、同じエラーが発生します

/ home / me / fabricに生地があります

@ajmcateer 、私もこの問題を抱えていました。 問題は、新しいファブリックタスクメソッド(ここで説明されているように-http://docs.fabfile.org/en/1.14/usage/tasks.html)が@taskデコレータを使用することです。 同等の「HelloWorld」の例は次のとおりです。

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にタスクがあり(これはあなたの環境の問題だと思います)、私はそれが私のために働いたことを確認できます、そして私は呼び出すために次の行を使用します
$ fabビルド

これがあなたの環境の問題だと思います

トラブルシューティングするにはどうすればよいですか? どのような追加データが必要ですか?

この場所にはどのファイルがありますか? build()はfabfile.pyにあるべきだと思います。そこにある場合は、おそらくあなたのfabが間違ったファイルを取得します...

コマンドの@mandarvaze fab build -f tasks.py複数の混乱があります。

  • fab自体の引数は、 fab -f tasks.py buildのように、最初のタスク名の前に置く必要があります
  • -fフラグは、タスクコレクションではなく、構成ファイル用です。これは、 fab -c tasks buildのような$ -cフラグです( ".py"拡張子はありません!)
  • inv (invoke)の場合、タスクを含むファイルが現在のディレクトリのtasks.pyである場合、それを指定する必要はありません。 fab (fabric)の場合、タスクを含むファイルが現在のディレクトリのfabfile.pyである場合、それを指定する必要はありません。

@ploxiln fab -c tasks build機能します。 👍
ありがとう。

@ajmcateer 、私もこの問題を抱えていました。 問題は、新しいファブリックタスクメソッド(ここで説明されているように-http://docs.fabfile.org/en/1.14/usage/tasks.html)が@taskデコレータを使用することです。 同等の「HelloWorld」の例は次のとおりです。

from fabric import task

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

'fab hello'を実行すると、期待どおりの出力が得られます。

愚かな質問で申し訳ありませんが、なぜ 'ctx' argが必要なのですか? それは何ですか?

ファブリック2では、正しいシステムで実際にコマンドを実行するには、このctxが必要です(例: ctx.run("hostname")

タスク引数に対してこのエラーが発生することが問題である場合は、引数を正しい形式で渡していない可能性がありますが、タスクに名前を付ける方法として渡されている可能性があります。

fab mytask --task-name value

いいえ

fab mytask --task_name value

これは問題のスポットではないことはわかっていますが、私はここにたどり着いたので、同じ問題を抱えている他の人にこれを任せます。

ファブリック2では、正しいシステムで実際にコマンドを実行するには、このctxが必要です(例: ctx.run("hostname")

まずは情報ありがとうございます!!

残念ながら、Fabric2は完全に鈍感であると言わざるを得ません。 2.xのロジックは非常に直感に反しており、その使用方法に関する優れた基本的なチュートリアルはあまり多くないようです。 たとえば、何かが足りないかもしれませんが、1.xのロジックとこの1.xチュートリアルの品質を見てください: https://docs.fabfile.org/en/1.14/tutorial.html。 次に、2.xの同等のチュートリアルを探します...。

1.xの非公式の移植版があり、それを3.xと呼んでいるのも不思議ではありません。

@taskデコレータの必要性、コンテキストオブジェクトの受け渡しなどに関するこの詳細の_none_は、Fabricの公開ドキュメントの「概要とチュートリアル」セクションにあります: https:// docs .fabfile.org / en / 1.8 / tutorial.html

私はFabric1のヘビーユーザーであり、この問題のチケットを見つける前に、このウォークスルーがFabric2の新しいセマンティクスを教えてくれると素朴に思っていました。 ドキュメントは基本的にオンボーディングの人々にとって誤解を招くため、採用を実際に思いとどまらせる可能性があります。

どのようにしてそのページにたどり着いたのかわかりません。https://docs.fabfile.org/en/2.5/getting-started.htmlをご覧ください。

それをありがとう! おそらく、将来の旅行者が1シリーズのドキュメントに太い「非推奨」ヘッダーを投げるのに役立つでしょう。 トップグーグルの結果または公式のファブリックウェブサイトのドキュメントからこれにナビゲートしたと確信しています。どちらの場合も、前者はファブリックチームが制御できるようなものではないと思いますが、多くの潜在的な採用者が負担していると思いますこのフラストレーションは、最新のドキュメントを見つける必要があることを警告されることで恩恵を受ける可能性があります(公式のPythonホストドキュメントは同様のパターンiircに従います)。

ドキュメントは基本的にオンボーディングの人々にとって誤解を招くため、採用を実際に思いとどまらせる可能性があります。

Fabricの新しいユーザー。 「FabricPython」をグーグルで検索し、「OverviewandTutorial」というリンクをクリックしました。 はい、私はこれが本当に混乱していることに気づき、プロセスの非常に早い段階で間違った方向に進むことができたことにかなり驚いています。

多くの潜在的な採用者がこのフラストレーションを抱えており、最新のドキュメントを見つける必要があることを警告されることで恩恵を受ける可能性があります(公式のPythonホストドキュメントは同様のパターンiircに従います)。

はい。

また、これは結果ページであることに注意してください。

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

ドメインを制御する場合、これらのインデントされたリンクを構成できます。 「DEPRECATED」ヘッダーを追加するだけでなく、検索結果から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

このページは役に立ちましたか?
0 / 5 - 0 評価