2017-08-29 8 views
3

開発モードでパッケージをインストールしました。pip install -e ./mylocalpkgです。entry_pointスクリプトでデバッガを起動する方法

このパッケージには、このスクリプトは、しかし、私はこのスクリプトをデバッグすることはできませんいずれかの方法

$ python -m mylocalpkg.scriptfile 
$ myscript 

で呼び出すことができますentry_points.console_script

setup(
    name='mylocalpkg', 
    ... 
    entry_points={ 
     'console_scripts': [ 
      'myscript = mylocalpkg.scriptfile:main' 
     ] 
    }, 
    ... 
) 

を定義しています

$ python -m pdb mylocalpkg.scriptfile 
Error: mylocalpkg.scriptfile does not exist 
$ python -m pdb myscript 
Error: myscript does not exist 

はどのようにして開始することができますentry_pointスクリプトを呼び出している間にpdbのデバッグセッション?

答えて

2

モジュールpdbモジュールは、モジュールではなくPythonスクリプトの名前で呼び出す必要があります。だからあなたは何とかそれを実行するスクリプトを与える必要があります。

あなたは、Linux/UNIX/Mac上でなら、あなたはこれらのオプションのいずれかを使用できるようmyscriptが、実際にはPythonスクリプトなので、あなたは、運がいい:

python -m pdb `which myscript` 
# or 
python -m pdb $(which myscript) 

これらはの場所を見つけることをmyscriptを入力し、pdbモジュールに渡します。また、そのことを知っている場合は、myscriptの位置を直接指定することもできます。

Windowsの場合は、entry_pointをロードしてデバッグするスクリプトを作成する必要があります。ここで仕事をすることができ、短いスクリプトがあります:

# run_myscript.py 
import pkg_resources 
myscript = pkg_resources.load_entry_point('mylocalpkg', 'console_scripts', 'myscript') 
myscript() 

次に、あなたは、このコマンドを経由してデバッグすることができます。

python -m pdb run_myscript.py 

または、任意のプラットフォーム上で、あなたはこの醜いワンライナーを使用することができます。

python -c "import pdb, pkg_resources; pdb.run('pkg_resources.load_entry_point(\'mylocalpkg\', \'console_scripts\', \'myscript\')()')" 
+0

私はWindows上ですが、あなたの答えも同様に適用されます。私は相対的なパスで試してみました。あなたの答えは、Pythonが '__path__'属性を使ってモジュールの場所を見つけることができると思っていたので、pdbはモジュールファイルを直接見つけることができました。あなたの答えをお寄せいただきありがとうございます – Overdrivr

+0

嬉しいです。また、いくつかのWindowsオプションを追加しました。 –

+0

ありがとう、その1つのライナーは、私が探していたものと全く同じでした – Overdrivr

関連する問題