(テキストエディターとして)Emacsで堅牢なPython IDEを作成する方法


56

Emacsは優れたエディターですが、最初にIDEを必要とするプログラムを作成する」と言われています。そのため、最新のIDEのすべての機能を備えたPYTHON用の広範囲にカスタマイズ可能なEmacsでIDEをどのように構築しますか?コードを効果的にデバッグ、実行、コンパイル、および管理できるようにしたい。これまでに、Elpyパッケージをインストールしたテーマについて読み上げましたが、これを可能にするために他に何を知って何をする必要があるのか​​はわかりません。


4
もっと詳しく教えていただけますか?「IDE」は、あらゆる種類の機能の流行語とグラブバッグになっています。
-wasamasa

私はあなたがEmacsに不慣れであり、私のHelmHelm Projectileのガイドを見たいと思うかもしれません。
火ド

2
「EmacsのPythonのIDE」のためのGoogle検索ではヒットのかなりの数を示します。すでに試したことと、まだ満足できないものを明確にできますか?
ダン

1
この質問はあまりに広すぎるため、トピック外としてこの質問を終了することを決めています。
ドリュー

4
IDEは役に立つかもしれませんが、「最初にIDEを必要とするプログラムを作成する」ことは馬鹿げています。IDEができる前にたくさんの良いコードが書かれました。
offby1

回答:


57

EmacsのデフォルトのPythonモードには、劣ったPythonシェルに基づくコード補完を含む多くの機能があり、パッケージを追加せずに基本的なIDEとして使用できます。他のコアEmacs関数もPythonで使用できます。たとえば、M-x compile/ M-x recompileはテストの実行に使用できます。M-x pdbPythonデバッガーを実行でき、Emacsのgud環境と統合されるため、実際にインラインブレークポイントを取得できます。

それを拡張するために、Emacsには3つの主要なパッケージがあり、より機能的なPython IDEを(アルファベット順に)実装しようとしています。

それらはすべてほぼ同じ機能を提供します。

  • オートコンプリートまたは企業モードを使用したコード補完
  • コードナビゲーション、つまり定義/使用法に移動
  • ElDocを使用した関数シグネチャの表示
  • ポイントのシンボルに関するドキュメントのイントロスペクション
  • flymakeまたはflycheckを使用した構文チェック
  • そしてそれらのいくつか(少なくともElpy)には基本的なリファクタリングのサポートがあります

これらを超えて、Emacsは多くのワークフローを支援することもできますが、単一のワークフローを規定するものではありません。したがって、次のステップは、Pythonの使用方法に大きく依存します。ここでの最善のアプローチは、優れたPythonワークフローを見つけ出し、それからワークフローのステップで具体的に役立つEmacsパッケージを見つけることです。

たとえば、virtualenvで動作する複数のパッケージがあり(Elpy、これはpyvenvに付属しています)、おそらく使用するはずです。Emacs-Jediには、便利なコードブラウジング用の付随モードがあります。IPythonを頻繁に使用している場合は、Emacs用のIPython Notebookがあります。Django開発などの特別なサポートモードがあります。http://melpa.org/にアクセスし、Pythonを検索していくつかのアイデアを得ることができます。

Python以外では、一般的な開発に役立つ追加のEmacsパッケージの恩恵を受けることができます。Projectileはプロジェクト管理用の汎用パッケージであり、プロジェクトの検索やテストと実装間の移動など、多くの興味深い機能を提供します。選択したIDEパッケージから依存関係としてまだインストールされていない場合は、コード生成用のインテリジェントスニペットを提供するYASnippetを使用することもできます。デフォルトのスニペットコレクションには、Pythonのスニペットも多数あります。

ただし、上記のメインIDEパッケージを使用すると、健全な環境が得られます。次のステップは、特定のワークフローに大きく依存します。

(完全開示:私はElpyの著者であるため、上記を読むときはそれを考慮してください。)


1
このような包括的な対応に感謝します。数え切れないほどの記事にはない方法で、広範囲に役立つことが証明されました。
シリアル交換機

2
@Jorgenに感謝します。Pythonデバッガーを実行できelpyます」とあなたが言うとき、私は毎日使用し、あなたの答えについて簡単な質問がありますが、これは正確にどうですか?Pythonバッファーがあります。そうすると、ミニバッファーにと表示されるプロンプトが表示されます。私は押したとき:これは私を与えるだけピップでPDBをアップグレードした後、最新のPython 3.4、である私は「:pdb.pdbという名前のモジュールのPDBはパッケージではありませんはImportError」を取得M-x pdbM-x pdb"Run pdb (like this): pdb my_file.py"RET$ pip freeze | grep pdb => pdb==0.1
アメリオバスケス-レイナ

1
PdbにはPythonが付属しています。なぜ見つからないのかわからない、怖い。:-(
ヨルゲンシェーファー

@JorgenSchäferif pdbが見つからないが、pythonローカルで見つかった場合はM-x pdb、「Run pdb(like this):python -m pdb my_file.py`
ChrisFreeman

また、sphinx-docパッケージはdocstringを書くのに役立ちます。
aadcg

17

evil-emacsユーザーにはspacemacsを試してみることをお勧めします。

すばらしいPythonレイヤーがあります。詳細はこちらをご覧くださいhttps : //github.com/syl20bnr/spacemacs/tree/master/layers/! lang/python

現在、以下が含まれています。

  • anaconda-modeを使用した自動補完
  • anaconda-modeを使用したコードナビゲーション
  • anaconda-modeおよびpylookupを使用したドキュメント検索
  • nose.elまたはpytestを使用したテストランナー
  • pyvenvを使用した仮想環境
  • セマンティックモードが有効になっています
  • ポニーモードによるDjangoのサポート

インストールはとてつもなく簡単で、次の行をに追加するだけ~/.spacemacsです:

(setq-default dotspacemacs-configuration-layers '(python))

好奇心から、正確に.spacemacsでこれを追加する必要がありますか?トップは大丈夫ですか?before(defun dotspacemacs / layers()...?
user391339

というリストがありdotspacemacs-configuration-layersます。そこにそれを追加します:)
不愉快な猫

4

purpose-modeを使用します。これにより、非常に堅牢な環境を定義できます。

、、およびを使用するelpypydocneotreeかなり堅牢な環境になります(エラーが発生してもウィンドウが奇妙なことをしないという意味で)。これはgud-pdbデバッグにも非常に有効です。

neotree、python-mode、pydoc、および劣等Python(elpyを使用)を使用したPythonのemacs目的のセットアップ


4

ここに包括的なガイドがあります:http : //wikemacs.org/wiki/Pythonすぐに使用できるソリューション(Prelude スターターキット、Spacemacs、データサイエンス向けソリューションなど)、便利な大きなパッケージ(Elpy)もリストされています。環境を改善するために必要なすべてのパッケージとして。概要は次のとおりです。

リファクタリング

これは最も「IDE固有の」機能です。Rope pythonライブラリのおかげで、Emacsにいくつかの可能性があります。最も簡単なインストールと使用方法は、MELPAemacs-traadパッケージです。とりわけ以下の機能があります。

  • メソッドシグネチャを変更する:クロスプロジェクトリファクタリング(もちろん)を使用して、引数を追加/削除します。
  • 何でも名前を変更し、
  • 定義を見つける、…

ロープもElpyに含まれています。

より簡単なコード操作

リファクタリングやコード操作に役立つ簡単なツールがあります:http : //wikemacs.org/wiki/Python#Other_Python_.22refactoring.22_tools

たとえば、Projectileは優れています(他の回答を参照)。デコレータ追加するツール、引数を追加/削除/編集するメソッド、名前を変更する/コピー/コメント/メソッドを削除する、コード生成ツールなどもあります…

コードナビゲーション

タグとcscopeを使用してIDEとしてナビゲートできます。これを呼び出す関数を見つける、出現を見つけるなど。

Emacsには、imenu(helm-imenu)、helm- swoop(バッファー内の対話型grep)、emacs-helm-ag(プロジェクト内の対話型シルバーサーチャー)などの優れたパッケージもあります。

テストを実行する

テストを実行するための優れたサポートを提供するのはElpyです(djangoランナー、elpy、または別のものを使用)。現在実行中のユニットテストのみを実行することもできます。非常に便利です。そのため、これを支援するHydraがあります(エラー間のサイクル、pythonプロンプトに切り替えます…)。

サポートする

これはPython固有ではないEmacsパッケージです。しかし、プロジェクト内のどこからでもmakeターゲットを実行し、完了してmakeコマンド選択できるようにますリンク

インデントに対処する

少しパッケージ、ありますインデント-ツールインデントブロックを直接操作するためのコマンドを与え、:移動インデントの次-前の子・親ブロックに、インデント/ deindent /コメント/コピーが/殺す/現在のブロックを折ります、など。yamlやPythonにも最適です。Doc and GIF Demo

Djangoのサポート

Djangoを参照してください。Elpyはdjangoランナーをサポートしています。elpy django docを参照してください。django-mode(melpa)には、テンプレートの強調表示、クイックコマンド、管理コマンドの完了、…

また重要:Git、Github、Gitlabの優れたサポート

magithubはgithub PRを作成できます。問題をフェッチし、コミットメッセージに参照を挿入できます。magitは素晴らしいです。http://wikemacs.org/wiki/Gitを参照してください


特に大規模なプロジェクトやばらばらのプロジェクトでは、リファクタリングは何かを壊さないために非常に重要です。Spacemacsでemacs-traadをセットアップする方法を知っている人はいますか?
thinwybk

1

ここでの答えは、spacemacsが提供する重要な機能のほとんどを提供しましたが、見つけられない機能が常に1つありました-デバッグ(ごく最近までspacemacsでうまくいく適切なデバッグツールは見つかりませんでした)

では、spacemacsのデバッグワークフローをどのように設定しましたか?

開発中の機能ブランチには、realgud.elパッケージを使用してspacemacsのデバッグエクスペリエンスのようなIDEに近い機能を提供するものがあります。https://github.com/CeleritasCelery/spacemacs このブランチを.emacsにプルするだけです。 dディレクトリに移動し、〜/ .emacs.d / layers / + lang / python / packages.elファイルに変更を加えます

spacemacsをデバッグ用にセットアップする詳細な手順(深呼吸をします)

  1. 端末に次のコマンドを1つずつ入力します。これにより、「debug-layer」という名前の別のブランチにCeleritaCeleryのspacemacsの変更が追加されます。これは、何かが台無しになった場合、いつでもmasterブランチと出来上がりをチェックアウトできることを意味します!元のspacemacsが帰ってきました!

remote add debug-layer https://github.com/CeleritasCelery/spacemacs fetch debug-layer checkout --track debug-layer/debug-layer branch -a

  1. ここで〜/ .emacs.d / layers / + lang / python / packages.elを ;; configure trepan3k as the python debugger to be used with realgud (defun python/pre-init-realgud() (dolist (mode '(anaconda-mode)) ;; bind trepan3k with anaconda mode (spacemacs|add-realgud-debugger mode "trepan3k"))) 開き、ファイルの最後に以下の関数を追加します。 この関数はpythonデバッガーとしてtrepan3kデバッガーを使用します。値をpdbまたはipdb、または任意のデバッガーに変更できます。trepan3kを使用する予定がある場合sudo pip install trepan3kは、pythonディストリビューションにプリインストールされていないため、必ずpipで インストールしてください。

  2. .spacemacsファイルを開き、次のようなdotspacemacs-configuration-layers内の「debug」レイヤーを開きます。 dotspacemacs-configuration-layers '( (python :variables python-enable-yapf-format-on-save t flycheck-disabled-checkers '(python-flake8) flycheck-checker 'python-pylint ) debug )

  3. 次に、spacemacsを再起動し、Pythonファイルを開きます。Mx realgud:trepan3kと入力してデバッグを開始できます。

これによりデバッグセッションが開始され、ここで説明するrealgudキーバインドを使用してブレークポイントを追加、削除できます:https : //github.com/realgud/realgud#source-window-commands

完了です!


上記のclytonの答え、gitリポジトリはgithub.com/CeleritasCelery/debug-layerである必要があります。このためのPRは現在github.com/syl20bnr/spacemacs/pull/9246で
Oddbodbloke

(評判が悪いためコメントできません)上記はspacemacsの開発ブランチに統合されているため、ステップ1は無視できます。
オッドボドブローク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.