[英]How to execute code in `if __name__ == "__main__"` from another python file
[英]How to execute a file from Python module as __main__ (python -m path.to.file) programatically?
我有幾個Python腳本(由於導入),必須使用python
的-m
選項調用。
我想為他們制作快捷方式腳本,就像代理一樣。
例如,當用戶運行命令時
./train.py arg1 arg2 ...
該腳本應做與
python -m some.path.train arg1 arg2 ...
會做。
-m
開關使用了一些技巧(例如將sys.argv[0]
設置為-c
); 不要試圖模仿。
相反,讓您的腳本和__main__.py
使用相同的函數; 不要將所有功能都放在__main__.py
。
因此,在__main__.py
,執行以下操作:
import sys
from some.path.train import main
main(*sys.argv[1:])
在您的train.py
腳本中執行完全相同的操作:
import sys
from some.path.train import main
main(*sys.argv[1:])
如果您必須將代碼放在__main__.py
,我仍將其train.py
一個函數,然后可以為您的train.py
腳本導入該函數:
from some.path.train.__main__ import main
您可以使用setuptools
入口點從一個函數生成train
控制台腳本:
setup(
# other arguments here...
entry_points={
'console_scripts': [
'train = some.path.train:main',
],
}
)
或使用
'train = some.path.train.__main__:main',
如果將該函數放在__main__.py
模塊中。
我找到了一個非常簡單的解決方案。
在train.py
我將代碼行放在下面:
from some.path import train
它沒有將__name__
設置為'__main__'
但是我從沒有檢查過,所以在我看來這不是問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.