我正在新位置上运行一个工作项目。
我认为虚拟环境是在其中创建的:
$head bm3.py
#!/usr/bin/env /opt/bm3_venv/bin/python3
bm3_venv是使用requirements.txt创建的环境名称(使用virtualenv?) $ ls -la / usr / bin / env -rwxr-xr-x。 1根root 28992 2016年6月30日/ usr / bin / env
bm3.py可能在整个项目中都使用python3,不仅是从bm3.py的上述第一行开始,而且在其他使用python3语法print('asdf')的python脚本中也可以看到。
但是我在项目中确实看到python2语法打印'asdf',即
/data/cloudera/parcels/CDH-5.12.0-1.cdh5.12.0.p0.29/bin/../lib/impala-shell/impala_shell.py
用于执行bm3.py,而impala-shell.py是用python2语法编写的。
这意味着,在当前的工作项目中,运行bm3.py时,它使用的是python3,但在同一运行中的python2中也被使用了。
这怎么可能?
顺便说一句,我在哪里可以下载CDH-5.12.0-1.cdh5.12.0.p0.29包裹的impala-shell.py的原始副本?
非常感谢您。
更新:
在现有环境中,bm3.py的第一行是:
/usr/bin/env /opt/al2_venv/bin/python3
这在此bm3.py中指定使用python3
在现有环境中使用的impala-shell.py中,第一行是:
/usr/bin/env /usr/bin/env python
这在此impala-shell.py中指定使用python2
现在,问题变成/usr/bin/env
在这里如何工作?
如果在现有环境中运行它,则会得到如下所示的变量设置列表:
> XDG_SESSION_ID=224064 SELINUX_ROLE_REQUESTED= TERM=xterm
> SHELL=/bin/bash HISTSIZE=1000 SSH_CLIENT=192.168.103.81 50182 22
> PATH=/usr/lib64/qt-3.3/bin:/home/xxxx/perl5/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/tableau/tabcmd/bin:/home/rxie/.local/bin:/home/rxie/bin
> PWD=/home/xxxx JAVA_HOME=/usr/java/latest LANG=en_US.UTF-8
> KDEDIRS=/usr SELINUX_LEVEL_REQUESTED= HISTCONTROL=ignoredups
> KRB5CCNAME=FILE:/tmp/krb5cc_1377008653_sw88z6 SHLVL=1 HOME=/home/xxxx
> PERL_LOCAL_LIB_ROOT=:/home/xxxx/perl5 LOGNAME=xxxx
> QTLIB=/usr/lib64/qt-3.3/lib SSH_CONNECTION=192.168.103.81 50182
> 192.168.101.231 22 LESSOPEN=||/usr/bin/lesspipe.sh %s XDG_RUNTIME_DIR=/run/user/1377008653
> QT_PLUGIN_PATH=/usr/lib64/kde4/plugins:/usr/lib/kde4/plugins
> PERL_MM_OPT=INSTALL_BASE=/home/rxie/perl5
> _=/usr/bin/env
此env的作用是什么,如何使用它?谢谢。
答案 0 :(得分:0)
我认为您正在运行python 2
,可以在Bash中使用python -V
进行验证,现在如何使用python3 print()
是通过在第一行中使用from __future__ import print_function
的代码,从python 2.6+端口/使python3到python2的打印功能变得不可行。
答案 1 :(得分:0)
我想我现在有了答案:
我相信这是设计使python允许任何python脚本(尽管其python语法)可以在脚本的第一行中以#!开头指定解释器的版本,例如
bm3.py中的#!/usr/bin/env /opt/bm3_venv/bin/python3
,表示整个脚本是用python 3编写的;同时,在作业运行过程中使用impala-shell.py时,impala-shell.py中的第一行指定了python解释器- python 2.6.6 -在Cloudera的CDH中的python中。