Python 从命令行在_umain__u; py.py中运行函数

Python 从命令行在_umain__u; py.py中运行函数,python,Python,我得到了以下_umain__uu.py文件: def all(): print "hello world!" if __name__ == "__main__": print "bar" 如何从命令行运行函数all?以下各项似乎不起作用: python -c "import __main__; __main__.all()" python . 不允许我修改_umain__uu.py文件。 (这是针对我正试图参与的FLOSS项目)模块始终是包的一部分。导入时包括程序包名称:

我得到了以下_umain__uu.py文件:

def all():
    print "hello world!"

if __name__ == "__main__":
    print "bar"
如何从命令行运行函数
all
?以下各项似乎不起作用:

python -c "import __main__; __main__.all()"
python .
不允许我修改_umain__uu.py文件。
(这是针对我正试图参与的FLOSS项目)

模块始终是包的一部分。导入时包括程序包名称:

python -c 'from package.__main__ import all; all()'
演示:

$mkdir测试包
$touch testpackage/\uuuu init\uuuuu.py
$cat testpackage/\uuuuu main\uuuuuuuu.py
>def all():
>打印“你好,世界!”
>如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
>全部()
>EOF
$python测试包
你好,世界!
$python-c'来自testpackage.\uuuu main\uuuuu导入全部;全部()
你好,世界!

您可能不想这样做,但如果工作目录中有
\uuuu main\uuuuu.py

python -c "import imp; trick = imp.load_source('__main__', './__main__.py'); trick.all()"
如果您的文件位于类似
foo/\uuuuuu main\uuuuuuu.py
的目录中,则可以执行以下操作

python -c "import imp; trick = imp.load_source('foo.__main__', 'foo/__main__.py'); trick.all()"

另请参见和

如果使用
setup.py
安装此软件包,则可以为
all
功能添加命令行入口点:

from setuptools import setup

setup(
    name='mypackage',
    version='1.0',
    packages=['mypackage'],
    entry_points={
        'console_scripts': [
            'mypackage_all = mypackage.__main__:all',
        ],
    },
)
运行
python setup.py develope
python setup.py install
后,您将能够使用
mypackage\u all
调用
all
函数:

$ mypackage_all
hello world!
它应该说
foo()
而不是
all()
?你是对的,它是all(),而不是foo()。我以为这个名字不重要。我将编辑我的问题。
$ mypackage_all
hello world!