Python:运行时shebang问题

Python:运行时shebang问题,python,shebang,Python,Shebang,这是我试图解决的问题。我在标题中没有具体的问题,因为我甚至不知道我需要什么 我们有一个古老的Hadoop计算集群,安装了非常旧的Python版本。我们所做的是将一个新版本(2.7.9)安装到一个对整个集群可见的本地目录(我们在该目录上安装了perms),并安装了一个带有我们需要的软件包的virtualenv。我们将此路径称为/n/2.7.9/venv/ 我们正在使用Hadoopy在集群上分发Python作业。Hadoopy将python代码(映射器和还原器)分发到集群,这些代码被认为是可执行的,

这是我试图解决的问题。我在标题中没有具体的问题,因为我甚至不知道我需要什么

我们有一个古老的Hadoop计算集群,安装了非常旧的Python版本。我们所做的是将一个新版本(2.7.9)安装到一个对整个集群可见的本地目录(我们在该目录上安装了perms),并安装了一个带有我们需要的软件包的virtualenv。我们将此路径称为
/n/2.7.9/venv/

我们正在使用Hadoopy在集群上分发Python作业。Hadoopy将python代码(映射器和还原器)分发到集群,这些代码被认为是可执行的,并附带一个shebang,但它不做任何类似于激活virtualenv的事情

如果我将.py文件中的shebang硬编码为
/n/2.7.9/venv/
,则一切正常。但是我想把.py文件放在一个库中;这些文件应该有一些通用的shebang,比如
#/usr/bin/env python
。但我尝试了这个方法,但它不起作用,因为在运行时virtualenv没有被脚本“激活”,因此它会出现导入错误

因此,如果有人对如何解决这个问题有任何想法,我将不胜感激。基本上我想要
#/usr/bin/env python
解析为
/n/2.7.9/venv/
,而
/n/2.7.9/venv/
不处于活动状态,或者其他一些无法硬编码shebang的解决方案


目前,我正在解决这个问题,在库中有一个
run
函数,并在主代码(调用库)中围绕这个函数放置一个包装器,其中包含硬编码的shebang。这不那么令人讨厌,因为硬编码的shebang在主代码中是有意义的,但它仍然很混乱,因为我必须在我想从库中运行的每个函数周围都有一个可执行的包装文件

我会更改环境变量,也会更改环境变量。将
PYTHONPATH
指向您的虚拟环境,并将
PATH
指向包含新python可执行文件的目录,确保python可执行文件的路径位于第一位。

我将更改环境变量和环境变量。将
PYTHONPATH
指向您的虚拟环境,并将
PATH
指向包含新python可执行文件的目录,确保python可执行文件的路径位于第一位。

我将更改环境变量和环境变量。将
PYTHONPATH
指向您的虚拟环境,并将
PATH
指向包含新python可执行文件的目录,确保python可执行文件的路径位于第一位。

我将更改环境变量和环境变量。将
PYTHONPATH
指向您的虚拟环境,并将
PATH
指向包含新python可执行文件的目录,确保python可执行文件的路径位于第一位。

我接受了John Schmitt的答案,因为它引导我找到了解决方案。不过,我现在发布的是我实际做的事情,因为它可能对其他Hadoopy用户有用

我实际上做的是:

args['cmdenvs']=['export VIRTUAL_ENV=/n/2.7.9/ourvenv','export PYTHONPATH=/n/2.7.9/ourvenv','export PATH=/n/2.7.9/ourvenv/bin:$PATH']


并将
args
传递到Hadoopy的
launch
函数中。在可执行文件.py中,我将通用的
#/usr/bin/env python
shebang

我接受了约翰·施密特的答案,因为它引导我找到了解决方案。不过,我现在发布的是我实际做的事情,因为它可能对其他Hadoopy用户有用

我实际上做的是:

args['cmdenvs']=['export VIRTUAL_ENV=/n/2.7.9/ourvenv','export PYTHONPATH=/n/2.7.9/ourvenv','export PATH=/n/2.7.9/ourvenv/bin:$PATH']


并将
args
传递到Hadoopy的
launch
函数中。在可执行文件.py中,我将通用的
#/usr/bin/env python
shebang

我接受了约翰·施密特的答案,因为它引导我找到了解决方案。不过,我现在发布的是我实际做的事情,因为它可能对其他Hadoopy用户有用

我实际上做的是:

args['cmdenvs']=['export VIRTUAL_ENV=/n/2.7.9/ourvenv','export PYTHONPATH=/n/2.7.9/ourvenv','export PATH=/n/2.7.9/ourvenv/bin:$PATH']


并将
args
传递到Hadoopy的
launch
函数中。在可执行文件.py中,我将通用的
#/usr/bin/env python
shebang

我接受了约翰·施密特的答案,因为它引导我找到了解决方案。不过,我现在发布的是我实际做的事情,因为它可能对其他Hadoopy用户有用

我实际上做的是:

args['cmdenvs']=['export VIRTUAL_ENV=/n/2.7.9/ourvenv','export PYTHONPATH=/n/2.7.9/ourvenv','export PATH=/n/2.7.9/ourvenv/bin:$PATH']


并将
args
传递到Hadoopy的
launch
函数中。在可执行文件.py中,我将通用的
#/usr/bin/env python
shebang

您是否尝试在服务器上将usr/bin/env符号链接到/n/2.7.9/venv?你能详细说明一下吗?(您问题的答案是否定的)请注意,我没有在主群集上安装任何东西的权限,这意味着/usr等。我需要在本地驱动器空间中安装解决方案(如
/n
)是的,我刚刚检查过,无法执行此操作。我可以将
/n/任何东西
符号链接到它,但这基本上就像在库中对shebang进行硬编码一样。您是否尝试在服务器上将usr/bin/env符号链接到/n/2.7.9/venv?你能详细说明一下吗?(您问题的答案是否定的)请注意,我没有在主群集上安装任何东西的权限,这意味着/usr等。我需要在本地驱动器空间中安装解决方案(如
/n
)是的,我刚刚检查过,无法执行此操作。我可以将
/n/任何东西
符号链接到它,但这本质上就像硬代码一样