我有几个Python脚本(由于导入)必须使用python
' -m
选项调用。
我想为他们制作快捷脚本,这就像代理一样。
例如,当用户运行命令
时./train.py arg1 arg2 ...
脚本应该与
完全相同python -m some.path.train arg1 arg2 ...
会做的。
答案 0 :(得分:0)
-m
开关使用了一些黑客(如setting sys.argv[0]
to -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
脚本导入该函数:
from some.path.train.__main__ import main
您可以使用setuptools
entry points从函数生成train
控制台脚本:
setup(
# other arguments here...
entry_points={
'console_scripts': [
'train = some.path.train:main',
],
}
)
或使用
'train = some.path.train.__main__:main',
如果您将该功能放在__main__.py
模块中。
答案 1 :(得分:0)
我找到了一个非常简单的解决方案。
在train.py
中,我在下面写了一行:
from some.path import train
它没有将__name__
设置为'__main__'
,但我从未检查过,所以在我的情况下这不是问题。