我有以下__main__.py文件:
def all():
print "hello world!"
if __name__ == "__main__":
print "bar"
如何从命令行运行函数all
?以下似乎不起作用:
python -c "import __main__; __main__.all()"
python .
我不允许修改__main__.py文件。 (这是我正在尝试贡献的FLOSS项目)
答案 0 :(得分:3)
__main__
模块始终是包的一部分。导入时包括包名称:
python -c 'from package.__main__ import all; all()'
演示:
$ mkdir testpackage
$ touch testpackage/__init__.py
$ cat << EOF > testpackage/__main__.py
> def all():
> print "Hello world!"
> if __name__ == '__main__':
> all()
> EOF
$ python testpackage
Hello world!
$ python -c 'from testpackage.__main__ import all; all()'
Hello world!
答案 1 :(得分:0)
您可能不希望这样做但是__main__.py
在您的工作目录中:
python -c "import imp; trick = imp.load_source('__main__', './__main__.py'); trick.all()"
如果您的文件位于foo/__main__.py
这样的目录中,那么您可以
python -c "import imp; trick = imp.load_source('foo.__main__', 'foo/__main__.py'); trick.all()"
另请参阅What is __main__.py?和How to import a module given the full path?