【问题标题】:Conda python=2 environment uses Python 3Conda python=2 环境使用 Python 3
【发布时间】:2018-12-03 22:34:07
【问题描述】:

我已经安装了 Miniconda3(Python 3 默认),并使用conda 创建了一个 Python 2 虚拟环境:

~$ conda create -n myenv python=2
...
~$ source activate myenv
(myenv) ~$ conda list
# packages in environment at ~/miniconda3/envs/myenv:
#
# Name                    Version                   Build  Channel
ca-certificates           2018.03.07                    0  
certifi                   2018.10.15               py27_0  
libedit                   3.1.20170329         h6b74fdf_2  
libffi                    3.2.1                hd88cf55_4  
libgcc-ng                 8.2.0                hdf63c60_1  
libstdcxx-ng              8.2.0                hdf63c60_1  
ncurses                   6.1                  he6710b0_1  
openssl                   1.1.1a               h7b6447c_0  
pip                       18.1                     py27_0  
python                    2.7.15               h9bab390_4  
readline                  7.0                  h7b6447c_5  
setuptools                40.6.2                   py27_0  
sqlite                    3.25.3               h7b6447c_0  
tk                        8.6.8                hbc83047_0  
wheel                     0.32.3                   py27_0  
zlib                      1.2.11               h7b6447c_3  

但是,如果我尝试运行 Python,它会使用 Python 3:

(myenv) ~$ python
Python 3.7.1 (default, Oct 23 2018, 19:19:42) 
[GCC 7.3.0] :: Anaconda, Inc. on linux

如果我尝试在环境中使用 Python 2 代码运行脚本,也会发生同样的事情。

(myenv) ~$ python hello2.py
File "hello2.py", line 1
    print "Hello World in Python 2"
                                ^
SyntaxError: Missing parentheses in call to 'print'. Did you mean print("Hello World in Python 2")?

我尝试删除并重新创建环境,但没有任何区别。为什么会这样?

附录

cmets 中要求的其他信息:

(myenv) ~$ which python
~/miniconda3/envs/myenv/bin/python

(myenv) ~$ ls ~/miniconda3/envs/myenv/bin/python -l
lrwxrwxrwx 1 user user 9 Dec  3 22:43 ~/miniconda3/envs/myenv/bin/python -> python2.7

(myenv) ~$ echo $PATH
~/miniconda3/envs/myenv/bin:~/miniconda3/bin:[rest of usual PATH]

(myenv) ~$ alias
[...]
alias python='python3'

【问题讨论】:

  • 试试which pythonecho $PATH
  • 似乎python 2和3都存在于环境中。试试python2 hello2.py
  • @seralouk:是的,python2 可以工作,但是,拥有具有特定设置的虚拟环境有什么意义?
  • 您的$PATH 似乎是正确的。现在试试alias,看看它告诉你什么。
  • 这个问题最近出现了很多。您可以尝试使用conda activate 而不是source activate 来激活您的环境吗?

标签: python conda miniconda


【解决方案1】:

问题是别名:

alias python='python3'

这个别名将被设置在你的 shell 启动脚本的某个地方。如果您使用 bash,则为 .bashrc.bash_profile.profile。找到它并删除它。

别名扩展优先于PATH 查找(别名扩展首先发生)。 如果您找不到设置别名的位置,您可以在.bashrc(或.profile,或两者)中显式取消python 别名:

unalias python

在任何情况下,当您想通过引用 python 令牌来运行 Python 时,您都可以避免使用别名:

\python hello2.py

【讨论】:

  • ~/.bashrc 或 ~/.profile 中没有 Python 别名,也没有 .bash_profile 文件。我尝试在 ~/.bashrc 中添加\python(如果你是这个意思),但结果是每当我打开终端时都会直接进入 Python 2。
  • 这不是我的意思(对不起),但你给了我另一个想法。我已经编辑了答案。
  • 事实证明,Python 别名在 ~/.bash_aliases 中,将其注释掉即可解决问题。
  • 感谢您列出所有常见的.bash 地点!对于任何好奇的人:superuser.com/questions/789448/…
猜你喜欢
  • 1970-01-01
  • 2018-04-08
  • 2023-02-09
  • 1970-01-01
  • 2019-09-10
  • 2019-10-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多