【问题标题】:How to start python programs with appropriate python version?如何使用适当的 python 版本启动 python 程序?
【发布时间】:2011-06-09 19:26:13
【问题描述】:

给定一组python程序:

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

存储在共享网络目录中,在混合环境(Solaris 和不同风格的 Linux)中执行,并且都需要特定的 python 版本,该版本可能不在用户 $PATH 中,也可能不会安装在同一个环境中在不同类型的机器上的位置。

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

我考虑过的替代方案:

  1. 每个 python 程序中的一个 shebang,引用一个 python 包装器,该包装器为当前类型的机器启动一个适当的 python 解释器。但是 execve 不允许将包装器可执行文件实现为 shell 脚本,并且为每台机器编译本机可执行文件需要大量维护。

  2. 为每个 python 程序制作一个启动 shell 脚本。所有的 shell 脚本在选择 python 解释器时可能共享相同的逻辑,但如果可能的话,我想避免为每个 python 程序使用单独的 shell 脚本。

  3. 进行某种 hack,使每个程序都可以作为 shell 脚本和 python 程序运行,类似于:

"""exec" /tool/python_wrapper "$0" "$@" """#"
def foo():
print "foo"
foo()

您还有其他想法吗?

【问题讨论】:

    标签: python bash wrapper shebang execve


    【解决方案1】:

    我知道这不是您要寻找的答案,但我只需确保 python 可执行文件位于 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!"
    

    【讨论】:

      【解决方案2】:

      我会选择选项 3。它的启动延迟会很小,但它是最灵活的选项。

      1. 一个行不通,因为您在混合环境中运行,正确设置所有内容将是一场噩梦。

      2. 可以,但正如您所说,您需要同时维护 .py 程序和 shell 脚本。也和 3 没有太大区别。

      【讨论】:

        【解决方案3】:

        我会执行选项#1 并使用env 来绕过解释器限制。请注意,Python 可能已经在 /usr/bin 中创建了特定于版本的二进制文件(它在我的系统上创建了):

        #!/usr/bin/env python2.4
        

        或者

        #!/usr/bin/env python2.6
        

        【讨论】:

          【解决方案4】:

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

          python2.6 /tool/a.py
          
          python2.4 /tool/b.py
          

          为您要使用 virtualenv 的每个工具维护不同的 Python 环境和不同的依赖项(Python 鸡蛋或本机扩展):

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2019-01-01
            • 2020-08-20
            • 2021-12-11
            • 1970-01-01
            • 2010-09-19
            • 2019-12-12
            • 2019-04-15
            • 2018-12-09
            相关资源
            最近更新 更多