PyDevプロジェクトでPythonパッケージを作成する コマンドラインから呼び出すPythonパッケージの作成はPythonモジュールよりちょっと手こずる点がありました。 EclipseでPyDevパースペクティブにします。 File ー> New ...
LibreOfficeのPythonマクロのデバッグについてこれまでの知識を整理しておきます。 前の関連記事: Eclipse: PyDevメモ: ブレークしたところでコマンドを実行する Pythonマクロにブレークポイントを張るまでの手順 1. Eclipseのイ...
pydevd.pyを探す
まずPyDevのpydevd.pyがどこにインストールされているのかを探します。
EclipseやPyDevのバージョンによってインストール先が異なるようなので、隠しフォルダも含めてあたりをつけてpydevd.pyをガリガリ検索します。
インストーラーのダウンロード Eclipseの起動にはJavaが必要です。 今回はLibreOffceをインストールしたときにインストールされたopenjdk-11-jreを使います。 Eclipse downloads - Select a mir...
~/.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の働きなので当然のことですけども。
環境を切り分けるのがpipenvの働きなので当然のことですけども。
ブレークポイントを張る
pydevd.pyへのパスが通せたらブレークしたいところにデバッグコードを挿入します。
import pydevd; pydevd.settrace(stdoutToServer=True, stderrToServer=True)
このコードのところでブレークされます。
EclipseでデバッグパースペクティブにしてPydev ー> Start Debug Server。
シェルからコマンドでパッケージを呼び出します。
これでブレークできました。
-eオプションを付けずにインストールしたパッケージでも同様にブレークできます。
Eclipseで設定したブレークポイントでもちゃんと止まります。
0 件のコメント:
コメントを投稿