如何通过环境变量识别Python版本#!
我遇到了一个问题,这个问题是因为我们的设计方式造成的。到目前为止,我们写了很多脚本都是用bash,所以开头的#!/bin/bash
都很简单。
但是现在我们要把脚本重写成python,这就有点麻烦了。我们会提供一个特定版本的python(这样可以避免客户的环境中不同版本导致我们的实现出问题)。因为这个特定版本的python是在一个安装好的目录结构里,所以我需要指向它。
不过我觉得#!
这个声明不能接受执行文件的shell中的环境变量(我试过了,结果是坏的解释器)。
比如:
在foo.py
里,我写了#!$dirloc/wherepythonlives/python
然后我在bash shell中执行这个文件,结果出现了坏的解释器错误。
有没有办法把环境变量偷偷放进这个#!
行里呢?
还是说我必须依赖一个明确的路径?我们想在一个环境中支持多个版本的软件(这可能意味着多个python版本),所以我希望能把Python的#!
声明放在我们安装的目录层级里。
4 个回答
0
解决这个问题的最佳方法是使用distutils(setup.py,它会自动为你创建正确的存根,适用于多个给定的“控制台入口点”)和virtualenv(处理“隔离的多个安装”部分)。
1
我不知道在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
6
一种常见的方法是使用 env
程序:
#!/usr/bin/env python
这会让 env
在 PATH
环境变量中查找一个叫 python
的可执行文件。