有没有一种方法可以将包作为脚本执行?例如:
[~]# easy_install /path/to/foo.egg
...
[~]# python -m foo --name World
Hello World
我试图在包中创建一个__main__.py
文件,但它没有被执行(我使用的是Python 2.6)。出现以下错误:
foo is a package and cannot be directly executed
我的包裹结构如下:
foo/
setup.py
foo/
__init__.py
__main__.py
运行python -m foo.__main__ --name World
如预期的那样工作,但我更喜欢前一种执行方式。这可能吗?
我认为这可能是Python2.6的一个限制。我已经测试过了,使用
-m
选项执行一个包(在.
中或从一个带有easy_install的egg中安装)在2.7中可以正常工作,但在2.6中不行。例如,在我的系统(Ubuntu)上,当前目录中有一个名为pkg_exec
的测试包,其中__main__.py
只打印sys.argv
:另外,根据the 2.7 docs:
只要包在python路径上, 在脚本末尾添加。
将运行模块,例如
这是Python2.6中的回归。见issue2571:
您有几个选项,可以始终指定main来运行它:
或者可以编写一个shell脚本包装器来检测python版本,然后以不同的样式执行它。
或者,您可以在命令行上执行代码,该命令行将导入并运行模块,然后可能将其放入shell脚本中:
在我自己的命令行项目中,我既有捕获错误(未安装python等)的shell脚本,也有执行导入代码并检测是否安装了必要的模块并提示错误(带有有用的链接或安装文本)。
相关问题 更多 >
编程相关推荐