[英]How to add an entry_point/console script to setup.py that uses arguments
[英]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
語句的語法。
import submodule2
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.