-
Notifications
You must be signed in to change notification settings - Fork 1
/
elpy.html
386 lines (337 loc) · 15 KB
/
elpy.html
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>emacsにelpyを導入する — Daydreaming in Greater Boston</title>
<meta name="author" content="Kyos">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link href="/favicon.png" rel="icon">
<link href="/theme/css/main.css" media="screen, projection"
rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic"
rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic"
rel="stylesheet" type="text/css">
</head>
<body>
<header role="banner"><hgroup>
<h1><a href="/">Daydreaming in Greater Boston</a></h1>
</hgroup></header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
</ul>
<ul class="main-navigation">
<li><a href="/pages/about.html">About Me</a></li>
<li >
<a href="/category/blog.html">Blog</a>
</li>
<li >
<a href="/category/english.html">English</a>
</li>
<li >
<a href="/category/linux.html">Linux</a>
</li>
<li class="active">
<a href="/category/python.html">Python</a>
</li>
<li >
<a href="/category/tech.html">Tech</a>
</li>
</ul></nav>
<div id="main">
<div id="content">
<div>
<article class="hentry" role="article">
<header>
<h1 class="entry-title">emacsにelpyを導入する</h1>
<p class="meta">
<time datetime="2020-08-14T00:00:00-04:00" pubdate>Fri 14 August 2020</time> </p>
</header>
<div class="entry-content"><div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org6e7affa">1. はじめに</a></li>
<li><a href="#org179421f">2. emacsの嫌いなところ</a></li>
<li><a href="#org7974012">3. elpyとは</a></li>
<li><a href="#org5de55e9">4. elpyの導入</a>
<ul>
<li><a href="#orgd486a33">4.1. melpaリポジトリの追加</a></li>
<li><a href="#orgc6018bf">4.2. パッケージを読み込む</a></li>
<li><a href="#org9a513ae">4.3. パッケージをactivateする</a></li>
<li><a href="#org14d3aea">4.4. pipでインストールするパッケージを持ってくる</a></li>
<li><a href="#org726bc7c">4.5. 確認する</a></li>
</ul>
</li>
<li><a href="#org0451bd9">5. 終わりに</a></li>
</ul>
</div>
</div>
<div id="outline-container-org6e7affa" class="outline-2">
<h2 id="org6e7affa"><span class="section-number-2">1</span> はじめに</h2>
<div class="outline-text-2" id="text-1">
<p>
私は以前、elpyの導入に失敗しています。elpyはemacsをPythonの統合環境(IDE)化するパッケージです。
</p>
<p>
原因がよくわかりませんが、どう頑張っても動かなかったのです。3日くらい試行錯誤して断念しました。実力も無いのにemacsを使うのが悪いという話もありますが、指が慣れてしまっているので他の環境には移れないのです。
</p>
<p>
最近Pythonに再入門してから、普通のエディタとしてemacsを使ってPythonのコードを書いてきました。IDEの自動補完機能を使う同僚を横目で見て、いつもうらやましく思っていました。そこで、一念発起して、再度elpyの導入にチャレンジしました。
</p>
<p>
この記事は<a href="https://realpython.com/emacs-the-best-python-editor/">Real Pythonの導入記事</a>を <del>丸写し</del> 参考にしています。
</p>
</div>
</div>
<div id="outline-container-org179421f" class="outline-2">
<h2 id="org179421f"><span class="section-number-2">2</span> emacsの嫌いなところ</h2>
<div class="outline-text-2" id="text-2">
<p>
いきなりですが、emacsの嫌いなところです。emacs使いはいろいろな意味で上級者が多いです。初級者向けの導入記事はあまり無いか、あっても高度すぎて理解できないことがよくあります。
</p>
<p>
設定ファイルの.emacs.d/init.elを書き換える時はいつも緊張します。導入記事のアドバイスの通り書いているはずなのに、意味不明のエラーをたくさん吐いて、emacsが使い物にならなくなるのです。
</p>
<p>
emacs使いはきっと <del>マゾ</del> 辛いことが好きなんだと思います。
</p>
<p>
そんな訳で、emacsではいろいろな冒険ができないところが嫌いです。現状維持圧力を感じます。この10年でした冒険と言えば、org-modeを使い始めたことと、今回のelpy導入くらいです。
</p>
</div>
</div>
<div id="outline-container-org7974012" class="outline-2">
<h2 id="org7974012"><span class="section-number-2">3</span> elpyとは</h2>
<div class="outline-text-2" id="text-3">
<p>
話を戻して、elpyについてです。elpyはEmacs Python Development Environmentのことで、次のようなPythonのIDE機能を提供します。
</p>
<ul class="org-ul">
<li>自動インデント(これは標準のpython-modeにもある)</li>
<li>シンタックスハイライト</li>
<li>自動補完</li>
<li>シンタックスチェック</li>
<li>Python REPL統合</li>
<li>仮想環境サポート</li>
</ul>
<p>
更に、elpyと連動して動くパッケージを入れると、あなたのemacsがそのへんのIDEに負けない立派なIDEに変身します。
</p>
</div>
</div>
<div id="outline-container-org5de55e9" class="outline-2">
<h2 id="org5de55e9"><span class="section-number-2">4</span> elpyの導入</h2>
<div class="outline-text-2" id="text-4">
</div>
<div id="outline-container-orgd486a33" class="outline-3">
<h3 id="orgd486a33"><span class="section-number-3">4.1</span> melpaリポジトリの追加</h3>
<div class="outline-text-3" id="text-4-1">
<p>
早速ですが、例のinit.elを編集します。
elpyはmelpaとかいうemacsのパッケージリポジトリから持ってくるため、emacsがmelpaを見に行くようにしなくてはいけません。この部分の私の設定は次のようになっています。
</p>
<pre class="example">
(require 'package)
(setq package-archives
'(("gnu" . "http://elpa.gnu.org/packages/")
("melpa" . "http://melpa.org/packages/")
("org" . "http://orgmode.org/elpa/")))
(package-initialize)
(when (not package-archive-contents)
(package-refresh-contents))
</pre>
<p>
大事なのはこの部分です。
</p>
<pre class="example">
("melpa" . "http://melpa.org/packages/")
</pre>
</div>
</div>
<div id="outline-container-orgc6018bf" class="outline-3">
<h3 id="orgc6018bf"><span class="section-number-3">4.2</span> パッケージを読み込む</h3>
<div class="outline-text-3" id="text-4-2">
<p>
次は、melpa他から必要なパッケージを持ってきます。
このやり方はReal Pythonからいただいてきたのですが、なかなか良いです。
まずmyPackagesとして必要なパッケージを定義しておいて、その後インストールされていなかったらインストールまで自動でやってくれます。
</p>
<pre class="example">
(defvar myPackages
'(better-defaults
elpy
flycheck ;; On the fly syntax checking
py-autopep8 ;; Run autopep8 on save
blacken ;; Black formatting on save
material-theme
)
)
(mapc #'(lambda (package)
(unless (package-installed-p package)
(package-install package)))
myPackages)
</pre>
<p>
elpyの他にいろいろなパッケージを読んでいますが、簡単に説明します。
</p>
<ul class="org-ul">
<li>better-defaults - emacsのデフォルト設定でいまいちなところを改善してくれるようです。今のところ、何が変わったのかわかりませんが、なんとなく入れておきます。</li>
<li>flycheck - オンザフライで文法チェックをしてくれます</li>
<li>py-autopep8 - セーブ時にpep8準拠チェックをして勝手に修正してくれます</li>
<li>blacken - セーブ時にBlackのフォーマットチェックをして勝手に修正してくれます</li>
<li>material-theme - このテーマはなかなかいい感じだったので、これまで使っていたものから乗り換えました</li>
</ul>
</div>
</div>
<div id="outline-container-org9a513ae" class="outline-3">
<h3 id="org9a513ae"><span class="section-number-3">4.3</span> パッケージをactivateする</h3>
<div class="outline-text-3" id="text-4-3">
<p>
そして、パッケージを有効化します。
こちらもReal Pythonから念仏のように写経しただけですが、うまく動いてくれたようです。なお、ここでは一気に全て入れていますが、エラーが出るとどこが悪いのかわからなくなるので、少しずつ動かしながら足していくのがよいと思います。
</p>
<pre class="example">
(load-theme 'material t)
;; elpy
(elpy-enable)
(setq elpy-rpc-virtualenv-path 'current)
;; Flycheck
(when (require 'flycheck nil t)
(setq elpy-modules (delq 'elpy-module-flymake elpy-modules))
(add-hook 'elpy-mode-hook 'flycheck-mode))
;; autopep8
(require 'py-autopep8)
(add-hook 'elpy-mode-hook 'py-autopep8-enable-on-save)
</pre>
<p>
1カ所注意があります。私は人気のvirtualenvではなくてvenvを使っているので、最初出ていたエラーメッセージに従って、次のようにしました。もし副作用があったらごめんなさい。
</p>
<pre class="example">
(setq elpy-rpc-virtualenv-path 'current)
</pre>
<p>
そしてこれをしたことで、~/.local/binを環境変数PATHに入れるよう言われたので、~/.zshrc(macOSです)を修正しました。
</p>
<pre class="example">
export PATH="$HOME/.local/bin:$PYENV_ROOT/bin:$PATH"
</pre>
</div>
</div>
<div id="outline-container-org14d3aea" class="outline-3">
<h3 id="org14d3aea"><span class="section-number-3">4.4</span> pipでインストールするパッケージを持ってくる</h3>
<div class="outline-text-3" id="text-4-4">
<p>
melpaから持ってこられないパッケージをpipを使って持ってきます。
</p>
<pre class="example">
pip3 install jedi flake8 autopep8 yapf black
</pre>
<p>
こんな感じだったと思います。実際は一つずつインストールしたので、historyを見て書きました。
</p>
</div>
</div>
<div id="outline-container-org726bc7c" class="outline-3">
<h3 id="org726bc7c"><span class="section-number-3">4.5</span> 確認する</h3>
<div class="outline-text-3" id="text-4-5">
<p>
pythonの.pyファイルを開いてM-x elpy-configと入れ、リターンキーを押します。
<img src="./images/elpy-config.png" alt="elpy-config.png" />
</p>
<p>
今回はうまくいきました。持ってきたパッケージは一通り認識されていました。
</p>
</div>
</div>
</div>
<div id="outline-container-org0451bd9" class="outline-2">
<h2 id="org0451bd9"><span class="section-number-2">5</span> 終わりに</h2>
<div class="outline-text-2" id="text-5">
<p>
上でも挙げた<a href="https://realpython.com/emacs-the-best-python-editor/">Real Pythonの導入記事</a>はemacsの説明から始まるので、うっかり見落とすところでしたが、さんざん検索した中で一番役に立った記事でした。初級者向けのemacs記事は少ないのでありがたいです。Real Pythonさん、どうもありがとうございます。
</p>
</div>
</div>
</div>
<footer>
<p class="meta">
<span class="byline author vcard">
Posted by <span class="fn">
きょうす
</span>
</span>
<time datetime="2020-08-14T00:00:00-04:00" pubdate>Fri 14 August 2020</time> <span class="categories">
<a class='category' href='/category/python.html'>Python</a>
</span>
<span class="categories">
<a class="category" href="/tag/python.html">Python</a>, <a class="category" href="/tag/emacs.html">emacs</a> </span>
</p><div class="sharing">
</div> </footer>
</article>
</div>
<aside class="sidebar">
<section>
<h1>Recent Posts</h1>
<ul id="recent_posts">
<li class="post">
<a href="/tello.html">アメリカ格安SIMをSpeedtalkからTelloに変えました</a>
</li>
<li class="post">
<a href="/improve_eng2.html">上級者向け英語学習法(実践編)</a>
</li>
<li class="post">
<a href="/improve_eng1.html">上級者向け英語学習法(考察編)</a>
</li>
<li class="post">
<a href="/vocabulary.html">オススメのボキャビル方法</a>
</li>
<li class="post">
<a href="/emacs_build.html">Rokcy LinuxとM1 MacBook上でemacsをソースからビルドしてみる</a>
</li>
</ul>
</section>
<section>
<h1>Categories</h1>
<ul id="recent_posts">
<li><a href="/category/blog.html">Blog</a></li>
<li><a href="/category/english.html">English</a></li>
<li><a href="/category/linux.html">Linux</a></li>
<li><a href="/category/python.html">Python</a></li>
<li><a href="/category/tech.html">Tech</a></li>
</ul>
</section>
<section>
<h1>Tags</h1>
<a href="/tag/blog.html">Blog</a>, <a href="/tag/amerikasheng-huo.html">アメリカ生活</a>, <a href="/tag/tech.html">Tech</a>, <a href="/tag/ying-yu.html">英語</a>, <a href="/tag/emacs.html">emacs</a>, <a href="/tag/sekiyuritei.html">セキュリティ</a>, <a href="/tag/investment.html">Investment</a>, <a href="/tag/python.html">Python</a>, <a href="/tag/english.html">English</a>, <a href="/tag/linux.html">Linux</a>, <a href="/tag/mac.html">Mac</a>, <a href="/tag/toraburu.html">トラブル</a>, <a href="/tag/game.html">game</a>, <a href="/tag/vacation.html">Vacation</a>, <a href="/tag/ying-yu-jiao-yu.html">英語教育</a>, <a href="/tag/ying-jian.html">英検</a> </section>
<section>
<h1>Social</h1>
<ul>
<li><a href="#" target="_blank">You can add links in your config file</a></li>
<li><a href="#" target="_blank">Another social link</a></li>
</ul>
</section>
<section>
<h1>Blogroll</h1>
<ul>
<li><a href="https://getpelican.com/" target="_blank">Pelican</a></li>
<li><a href="https://www.python.org/" target="_blank">Python.org</a></li>
<li><a href="https://palletsprojects.com/p/jinja/" target="_blank">Jinja2</a></li>
<li><a href="#" target="_blank">You can modify those links in your config file</a></li>
</ul>
</section>
</aside> </div>
</div>
<footer role="contentinfo"><p>
Copyright © 2020–2024 Kyos —
<span class="credit">Powered by <a href="http://getpelican.com">Pelican</a></span>
</p></footer>
<script src="/theme/js/modernizr-2.0.js"></script>
<script src="/theme/js/ender.js"></script>
<script src="/theme/js/octopress.js" type="text/javascript"></script>
</body>
</html>