如何在#中标识Python版本!使用环境变量

我有一个问题,这是由我们的封装设计引起的。到目前为止,我们的许多脚本都是用bash编写的,因此#!/bin/bash总是很简单。如何在#中标识Python版本!使用环境变量

但是现在我们正在用python重写我们的脚本,这有点困难。我们提供了特定版本的python(以避免客户端安装环境中的版本差异破坏我们的实现)。由于python的特定版本位于已安装的目录结构中,我需要路由到它。

但是我不认为#!语句可以接受执行该文件的shell的环境变量(尝试并得到一个糟糕的解释器)。

如:

foo.py#!$dirloc/wherepythonlives/python

在bash shell中我执行的文件,并得到了坏的解释。 有没有一种方法潜入一个环境变量到#!行?或者我将不得不依赖明确的路径?我们希望在一个环境中支持多种版本的软件(这可能意味着多个Python版本),所以我希望以某种方式将Python的!#语句保存在我们安装的目录级别内。

回答:

一种常见的方式做,这是使用env程序:

#!/usr/bin/env python 

这将导致env沿着一个名为python二进制PATH环境看。

回答:

这一难题的最佳解决方案是使用的distutils(setup.py,这对于你自动创建正确存根,对于一些给定的“控制台入口点”)和的virtualenv(处理“分离的多个安装”的一部分)。

回答:

我不知道能够在shebang中使用环境变量。您可以使用相对路径虽然

#! ../../usr/bin/python 

编辑: 你总是可以使用ENV指定要使用特定版本。那么,如果该版本可在$ PATH中找到它会以其他方式使用该脚本将失败

#! /usr/bin/env python2.7 

或者你可以做的入口点一个通用脚本来代替。

#! /usr/bin/env bash 

if [[ $MYPYTHON ]]

then

$MYPYTHON main.py

else

echo error message

fi

回答:

我想这一切都取决于你的脚本将如何以及在何种环境中调用。您可以使用#!/usr/bin/env python来调用您的脚本,这将允许您通过操纵环境的PATH来控制使用哪个python。

你总是可以指定一个包装脚本解释器,运行相对脚本位置蟒蛇可执行文件:

FOO。潘岳:

#!/bin/pyselector 

import sys

sys.exit(0)

pyselector:

#!/bin/sh 

SCRIPT_PATH="$(readlink -f $1)"

SCRIPT_DIR="$(dirname "$SCRIPT_PATH")"

"${SCRIPT_DIR}/my/local/python" "[email protected]"

以上是 如何在#中标识Python版本!使用环境变量 的全部内容, 来源链接: utcz.com/qa/257873.html

回到顶部