【问题标题】:How to specify python version in a conda virtual env如何在 conda 虚拟环境中指定 python 版本
【发布时间】:2019-02-21 03:15:13
【问题描述】:

我正在新职位上运行一个工作项目。

如我所见,我相信在其中创建了虚拟环境:

$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 根 28992 2016 年 6 月 30 日 /usr/bin/env

bm3.py 大概在整个项目中都使用了 python3,不仅从上面 bm3.py 的第一行来看,而且在其他一些使用 print('asdf') 的 python 脚本中也看到了,这是一个 python3 语法。

但是我确实在项目中看到有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

这个环境是做什么用的,我该如何使用它?谢谢。

【问题讨论】:

    标签: python-3.x python-2.x


    【解决方案1】:

    我认为您正在运行 python 2,您可以在 Bash 中使用 python -V 进行验证,现在如何使用 python3 print() 在代码的第一行中使用 from __future__ import print_function,该代码来自 python 2.6 + ports/makes python3 到 python2 的打印功能。

    【讨论】:

    • 感谢您的意见。但是,我认为是相反的情况,#!/usr/bin/env /opt/bm3_venv/bin/python3 明确指定它使用的是 python3,impala-shell.py 使用的是 python2。
    • @mdivk 在看到问题中的编辑后,我唯一的回答是基于意见而不是确定,我会尝试进行更多调查,得出结论,同时如果你想要固执己见回答,让我知道。
    【解决方案2】:

    我想我现在有了答案:

    我相信这是设计使 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 中。

    【讨论】:

      猜你喜欢
      • 2020-03-28
      • 2017-12-30
      • 2023-01-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-18
      • 2020-10-21
      • 1970-01-01
      相关资源
      最近更新 更多