簡體   English   中英

如何使用 entry_point 腳本啟動調試器

[英]How to start debugger with an entry_point script

我在開發模式下安裝了一個包,使用pip install -e ./mylocalpkg

這個包定義了一個entry_points.console_script

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

可以用任何一種方式調用這個腳本

$ python -m mylocalpkg.scriptfile
$ myscript

但是,我無法調試此腳本:

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

如何在調用 entry_point 腳本時使用pdb啟動調試會話?

必須使用 Python 腳本的名稱而不是模塊的名稱來調用pdb模塊。 所以你需要給它一個腳本來運行。

如果您使用的是 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\')()')"

此外,在這種特殊情況下,您想要調試可以通過python -m mylocalpkg.scriptfile加載的模塊,您可以使用更簡單的單行:

python -c "import pdb; pdb.run('import mylocalpkg.scriptfile')"

這里導致問題的原因之一不是源文件的安裝位置,而是用於import語句的語法。

僅限 Python 2:

import submodule2

Python 2 和 3:

from . import submodule2

如果堅持后一種約定,它就“有效”。

最后,強烈推薦pudb進行目標調試。 沒有設置。 只需安裝即可。 (雖然,apt-install python3-pudb 比嘗試將其安裝在適當/相同的 venv 中更容易)

本地安裝的輪子的示例命令行,命令行條目指向此文件,並顯示腳本的參數:

pudb3 /opt/venv/xxx/lib/python3.8/site-packages/xxx/create_xxx.py  arg1 --database param1 --host hostbparam.com -

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM