よくある質問

ユーザーが直面する最も一般的な質問と問題がこのFAQに集約されています。

なぜスペースなのですか?タブの方が好きです

PEP 8ではタブよりもスペースが推奨されており、Pythonコミュニティのほとんどで使用されています。Blackはインデントスタイルを設定するオプションを提供しておらず、そのようなオプションのリクエストは考慮されません。

ただし、タブを使用することはアクセシビリティの問題でもあると認識しています。オプションがBlackに追加されることはありませんが、視覚障碍のある開発者は、Pythonプロジェクトに貢献する際に、expand/unexpand(Linuxの場合)などの変換ツールが役立つ場合があります。ワークフローは、例えば、適切なpre-commitおよびpost-merge gitフックを設定し、Blackを適用した後にunexpandを実行するスクリプトを作成することで構成される場合があります。

BlackにはAPIがありますか?

まだありません。Blackは基本的にコマンドラインツールです。多くの統合が提供されていますが、Pythonインターフェイスはその一つではありません。シンプルなAPIは計画中です。

Blackは安全に使用できますか?

はい。Blackは厳密にフォーマットのみを対象としており、それ以外のことには関与しません。Blackは、フォーマット後、ASTがチェックされることを保証するよう努めており、コードが異なることが許容される特別なケースは限られています。問題が見つかった場合はエラーが発生し、ファイルは変更されません。# noqaのようなリンターや他のツールに影響を与えるマジックコメントは、Blackによって移動される可能性があります。詳細については以下を参照してください。

Blackのスタイルはどの程度安定していますか?

安定しています。Blackは1つのスタイルのみを適用することを目指しており、実用的な余地も残しています。詳細については、Blackのコードスタイルを参照してください。

2022年以降、フォーマット出力は、同じ年にリリースされたものに対しては安定しています(意図しないバグを除く)。毎年年初に、最初のリリースで安定したスタイルが変更されます。--previewフラグを使用して、最新のフォーマットスタイルをオプトインすることができます。

なぜファイルがフォーマットされないのですか?

おそらく.gitignoreで無視されているか、設定で除外されているためです。詳細については、ファイル収集と検出を参照してください。

なぜJupyter Notebookのセルがフォーマットされないのですか?

BlackはJupyter Notebookのフォーマットに慎重です。次のいずれかを含むセルはフォーマットされません

  • automagics (例: pip install black)

  • Python以外のセルマジック (例: %%writefile)。これらは--python-cell-magicsフラグで追加できます。例: black --python-cell-magics writefile hello.ipynb

  • 複数行のマジック。例:

    %timeit f(1, \
            2, \
            3)
    
  • IPythonTransformerManagerがマジックを変換するコード。例:

    get_ipython().system('ls')
    
  • 構文エラー。実行中のIPythonカーネルがない場合、automagicsと安全に区別できないため。

なぜFlake8が警告を報告するのですか?

Flake8の一部のルールはBlackのスタイルと競合します。これらのルールを無効にすることをお勧めします。他のツールとBlackを使用するを参照してください。

BlackはどのPythonバージョンをサポートしていますか?

現在、ランタイムにはPython 3.8〜3.11が必要です。フォーマットは、Python 3.3〜3.11の構文を含むファイルでサポートされています。私たちは、少なくとも寿命を迎えていないすべてのPythonバージョンをサポートすることを約束します。これは、Blackの実行とコードのフォーマットの両方に当てはまります。

Python 2コードのフォーマットサポートはバージョン22.0で削除されました。古いPython 3マイナーバージョンのサポートをすぐに停止する予定はありませんが、これらのサポートも、廃止期間なしに将来削除される可能性があります。

3.7のランタイムサポートはバージョン23.7.0で削除されました。

コードをフォーマットした後、なぜリンターや型チェッカーが不満を言うのですか?

一部のリンターやその他のツールは、マジックコメント(例:# noqa# type: ignore)を使用して動作に影響を与えます。Blackはこのようなコメントを認識し、正しい場所に残すように最善を尽くしますが、この検出は完全ではなく、完全であることもできません。したがって、Blackでコードベースをフォーマットした後、これらのコメントを手動で正しい場所に移動する必要がある場合があります。

PyPyでBlackを実行できますか?

はい、PyPy 3.8以降がサポートされています。

なぜBlackはコード内の構文エラーを検出しないのですか?

Blackは自動フォーマッタであり、Pythonリンターやインタプリタではありません。すべての構文エラーを検出することは目標ではありません。CPythonによって受け入れられるすべてのコードをフォーマットできます(そうでない例が見つかった場合は、バグを報告してください!)。ただし、CPythonが受け入れないコードもフォーマットする場合があります。

バージョン出力にあるcompiled: yes/noとは何ですか?

Blackは確かに純粋なPythonプロジェクトですが、mypycを使用してBlackをC Python拡張機能にコンパイルし、通常はパフォーマンスを2倍に向上させます。これらのコンパイルされたホイールは、サポートされているすべてのCPythonバージョンで、Windows、Linux(manylinux標準経由)、macOSの64ビットバージョンで利用できます。

muslベースおよび/またはARM Linuxディストリビューション、およびARM Windowsを含むプラットフォームは現在サポートされていません。これらのプラットフォームは、PyPIで利用可能な低速の純粋なPythonホイールにフォールバックします。

非常に奇妙な問題やセグメンテーション違反が発生している場合は、pip installの呼び出しに--no-binary blackを渡してみてください。このフラグは(純粋なPythonホイールを含む)すべてのホイールを除外するため、このコマンドはsdistを使用します。