コマンドで呼び出すPythonパッケージをデバッグする

2019-06-14

KDE neonを使おう

t f B! P L
PyDevプロジェクトでPythonパッケージを作成する コマンドラインから呼び出すPythonパッケージの作成はPythonモジュールよりちょっと手こずる点がありました。 EclipseでPyDevパースペクティブにします。 File ー> New ...
この記事でインストールしたパッケージをコマンドラインから呼び出したときにPyDevでブレークします。

LibreOfficeのPythonマクロのデバッグについてこれまでの知識を整理しておきます。 前の関連記事: Eclipse: PyDevメモ: ブレークしたところでコマンドを実行する Pythonマクロにブレークポイントを張るまでの手順 1. Eclipseのイ...
手順はLibreOfficeのPythonマクロのデバッグと同じでデバッグコードを仕込んでおいて、EclipseのPyDevのデバッグサーバーに接続させます。

pydevd.pyを探す


まずPyDevのpydevd.pyがどこにインストールされているのかを探します。

EclipseやPyDevのバージョンによってインストール先が異なるようなので、隠しフォルダも含めてあたりをつけてpydevd.pyをガリガリ検索します。

インストーラーのダウンロード Eclipseの起動にはJavaが必要です。 今回はLibreOffceをインストールしたときにインストールされたopenjdk-11-jreを使います。 Eclipse downloads - Select a mir...
この記事の通りインストールしたEclipse 2019-03 (4.11.0)とPyDev 7.2.1の組み合わせでは次のパスのフォルダにpydevd.pyがありました。

~/.p2/pool/plugins/org.python.pydev.core_7.2.1.201904261721/pysrc 

デバッグしたいパッケージを起動するインタープリターのPYTHONPATHにこのパスを追加します。

pydevd.pyをPYTHONPATHに追加する方法


pydevd.pyをPYTHONPATHに追加する方法にはいくつかあります。

シェル変数を使う方法


一番お手軽なのはシェル変数で追加する方法です。

PYTHONPATH=~/.p2/pool/plugins/org.python.pydev.core_7.2.1.201904261721/pysrc pkg1 -h

最後のpkg1 -hというのはデバッグしたいコマンドです。

この方法は毎回シェル変数を渡さないといけないので何回も繰り返すには不向きです。

環境変数を使う方法


export PYTHONPATH=~/.p2/pool/plugins/org.python.pydev.core_7.2.1.201904261721/pysrc

exportで環境変数にしてしまうとそのシェルでは毎回PYTHONPATHを渡す必要がなくなります。

~/.bashrcにこのコマンドを書いてしまえばすべてのシェルにPYTHONPATHが設定されます。

sites.pthを使う方法


sites.pthを使うとインタープリターに紐付けてPYTHONPATHが設定できます。

/home/pq/.p2/pool/plugins/org.python.pydev.core_7.2.1.201904261721/pysrc

sites.pthファイルにはpydevd.pyのあるフォルダへの絶対パスを書くだけです。

このsites.pthファイルをどこに置くかで効果が変わってきます。

特定のインタープリターだけにPYTHONPATHを追加したい時


インタープリターのモジュール検索パスのうちlib/pythonX.Y/site-packagesフォルダにsites.pthを置きます。

例えばPython3.6のpipenvの仮想環境へのパスが~/.local/share/virtualenvs/PkgExample-Wio1Xr3Oのときは、/home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/lib/python3.6/site-packagesにsites.pthを置きます。

PYTHONPATHが通っていることはsys.pathで確認できます。
pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ pipenv shell
Launching subshell in virtual environment…
pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$  . /home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/bin/activate
(PkgExample) pq@pq-VirtualBox:~/eclipse-workspace/PkgExample$ python
Python 3.6.8 (default, Jan 14 2019, 11:02:34) 
[GCC 8.0.1 20180414 (experimental) [trunk revision 259383]] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.path
['', '/home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/lib/python36.zip', '/home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/lib/python3.6', '/home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/lib/python3.6/lib-dynload', '/usr/lib/python3.6', '/home/pq/.local/share/virtualenvs/PkgExample-Wio1Xr3O/lib/python3.6/site-packages', '/home/pq/.p2/pool/plugins/org.python.pydev.core_7.2.1.201904261721/pysrc']
>>> import pydevd
>>> 
pydevdのインポートもできています。

pipenvのインタープリターすべて共通にモジュール検索するsite-packagesフォルダはないのでそれぞれにsites.pthを置かないといけませんね。

環境を切り分けるのがpipenvの働きなので当然のことですけども。

ブレークポイントを張る


pydevd.pyへのパスが通せたらブレークしたいところにデバッグコードを挿入します。

import pydevd; pydevd.settrace(stdoutToServer=True, stderrToServer=True)

このコードのところでブレークされます。

EclipseでデバッグパースペクティブにしてPydev ー> Start Debug Server。

シェルからコマンドでパッケージを呼び出します。


これでブレークできました。

-eオプションを付けずにインストールしたパッケージでも同様にブレークできます。

Eclipseで設定したブレークポイントでもちゃんと止まります。

ブログ検索 by Blogger

Translate

最近のコメント

Created by Calendar Gadget

QooQ