2011-06-09 17 views
1

给定一组蟒程序:如何用适当的python版本启动python程序?

/tool/a.py 
/tool/b.py 
/tool/c.py 
/tool/d.py 
... 

存储在共享的网络目录,在混合环境中执行(Solaris和Linux的不同口味),并且所有需要特定蟒版本可能不在用户$ PATH中,并且可能不安装在不同类型机器的相同位置。

程序如何指定要使用的Python解释器?

替代我已经考虑:

  1. 在每个Python程序认领,裁判到启动当前类型的机器的适当python解释一个python包装。但是execve不允许将包装器可执行文件作为shell脚本来实现,并且为每台机器编译本机可执行文件都需要大量的维护。

  2. 为每个python程序创建一个启动shell脚本。所有的shell脚本可以共享相同的逻辑来选择python解释器,但是我希望避免为每个python程序分配一个shell脚本(如果可能的话)。

  3. 制造某种黑客攻击,使每个程序可能都既作为一个shell脚本和Python程序,类似于运行:

"""exec" /tool/python_wrapper "$0" "[email protected]" """#" 
def foo(): 
print "foo" 
foo() 

你有一些其他的想法?

回答

1

我会选择3.它会有一个小的启动延迟,但它是最灵活的选择。

  1. 一个人不会工作,因为你在混合环境中运行,这将是一个噩梦,设置正确的一切。

  2. 可以工作,但是,正如您所说的,您需要同时维护.py程序和shell脚本。此外,它是没有太大的不同,那么3

4

我知道这是不太你正在寻找的答案,但我只是确保蟒蛇执行程序在PATH,然后用env来找到他们。从长远来看,我认为这将少得多的维护和头痛。例如。

#!/usr/bin/env python2.5 
print "Hello from python 2.5!" 

 

#!/usr/bin/env python2.6 
print "Hello from python 2.6!" 

 

#!/usr/bin/env python2.7 
print "Hello from python 2.7!" 
1

我会做选项#1和使用env避开解释限制。需要注意的是Python的可能/usr/bin已经创建特定版本的二进制文件(它没有我的系统上):

#!/usr/bin/env python2.4 

或者

#!/usr/bin/env python2.6 
1

您可以直接强制Python解释器通过给.py文件参数的Python的二进制:

python2.6 /tool/a.py 

python2.4 /tool/b.py 

为了维护您要使用virtuale每个工具不同的Python环境和不同的依存关系(Python的蛋或原生扩展) nv:

http://pypi.python.org/pypi/virtualenv

相关问题