只有Python3的Virtualenv

只有Python3的Virtualenv,python,ubuntu,virtualenv,Python,Ubuntu,Virtualenv,我有两个不同的Ubuntu虚拟机,第一个是14.04秒,第二个是16.04秒。在第一个例子中,由于某种原因,我使用pyhton3创建virtualenv时也安装了python27 user@ubuntu:~/venv$ virtualenv --python=python3 --no-site-packages py3-venv Already using interpreter /usr/bin/python3 Using base prefix '/usr' New python exec

我有两个不同的Ubuntu虚拟机,第一个是14.04秒,第二个是16.04秒。在第一个例子中,由于某种原因,我使用pyhton3创建virtualenv时也安装了python27

user@ubuntu:~/venv$ virtualenv  --python=python3 --no-site-packages py3-venv
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/user/venv/py3-venv/bin/python3
Also creating executable in /home/user/venv/py3-venv/bin/python
Installing setuptools, pip, wheel...done.
user@ubuntu:~/venv$ source py3-venv/bin/activate
(py3-venv) user@ubuntu:~/venv$ python -V
Python 2.7.12
在第二个虚拟机上执行相同的操作可以按预期工作

user@my-box:~/venv$ virtualenv -p /usr/bin/python3 py3-venv
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /home/user/venv/py3-venv/bin/python3
Also creating executable in /home/user/venv/py3-venv/bin/python
Installing setuptools, pip, wheel...done.
user@my-box:~/venv$ source py3-venv/bin/activate
(py3-venv) user@my-box:~/venv$ which python
/home/user/venv/py3-venv/bin/python
(py3-venv) user@my-box:~/venv$ python -V
Python 3.5.2
我需要virtualenv来运行python3,即使我键入python命令。有什么办法吗

[更新]

这是我见过的最奇怪的事情

(py3-venv) user@ubuntu:~/venv$ which python
/home/user/venv/py3-venv/bin/python
(py3-venv) user@ubuntu:~/venv$ python -V
Python 2.7.12
(py3-venv) user@ubuntu:~/venv$ ./py3-venv/bin/python -V
Python 3.4.3
[更新2]

我完全迷路了。。。甚至
stracepython
命令也指向正确的文件

(py3-venv) user@ubuntu:~/venv$ strace python
execve("/home/user/venv/py3-venv/bin/python", ["python"], [/* 24 vars */]) = 0
brk(0)                                  = 0x204f000
[更新3]

如果从
路径
中删除除
/home/user/venv/py3-venv/bin
以外的所有内容,python命令将无法执行。。。请帮忙

(py3-venv) user@ubuntu:~$ export PATH=/home/user/venv/py3-venv/bin
(py3-venv) user@ubuntu:~$ echo $PATH
/home/user/venv/py3-venv/bin
(py3-venv) user@ubuntu:~$ python -V
Command 'python2.7' is available in the following places
 * /usr/bin/python2.7
 * /usr/local/bin/python2.7
The command could not be located because '/usr/bin:/usr/local/bin' is not included in the PATH environment variable.
python2.7: command not found

您需要在.bashrc文件(别名python='/usr/local/bin/python3.5')或任何python版本中添加别名

将其附加到.bashrc文件:

$ echo "alias python='/usr/local/bin/python3.5'" >> .bashrc
您可以看到我现在退出/注销。当我再次使用ssh时,python--version--别名会将我带到python3:

[vagrant@localhost ~]$ exit
logout
Connection to 127.0.0.1 closed.
rhubarb:scratch milesd$ vagrant ssh
Last login: Fri Jun  2 18:15:57 2017 from 10.0.2.2
[vagrant@localhost ~]$ python --version
Python 3.5.0
[vagrant@localhost ~]$

我同意虚拟环境的观点。您可以做一些其他事情:

首先我删除了.bashrc中的python别名(从另一个答案中)

然后我创建了一个Python 3虚拟环境:

$ mkdir venv
[vagrant@localhost ~]$ cd venv
[vagrant@localhost venv]$ virtualenv -p python3 python3_virtualenv
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local'
New python executable in /home/vagrant/venv/python3_virtualenv /bin/python3
Also creating executable in /home/vagrant/venv/python3_virtualenv/bin/python
Installing setuptools, pip, wheel...done.
[vagrant@localhost venv]$ source ~/venv/python3_virtualenv/bin/activate
(python3_virtualenv) [vagrant@localhost venv]$
Python3已作为virtualenv成功安装

  • 您可以将以下行添加到.bash_配置文件中:

    source~/venv/python3\u virtualenv/bin/activate

  • 我现在将注销,然后再次登录:

    $ vagrant ssh
    Last login: Sat Jun  3 00:01:21 2017 from 10.0.2.2
    (python3_virtualenv) [vagrant@localhost ~]$ python
    Python 3.5.0 (default, Jun  2 2017, 18:10:55)
    [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    
    source~/venv/python3\u virtualenv/bin/activate命令已经自动运行,当我键入python时,会找到python3.5.0


    第二个选项是创建到python 3的python符号链接:

  • 第二个选项是在/usr/local/bin中添加python符号链接。这将覆盖python(在/usr/bin目录中) 我在/usr/local/bin目录中手动安装了Python3

    Python 2位于/usr/bin目录中:

    $ vagrant ssh
    Last login: Sat Jun  3 00:39:12 2017 from 10.0.2.2
    
    [vagrant@localhost ~]$ which python3
    /usr/local/bin/python3
    
    [vagrant@localhost ~]$ which python2
    /usr/bin/python2
    [vagrant@localhost ~]$ cd /usr/local/bin/
    
    我创建我的符号链接:

    [vagrant@localhost bin]$ sudo ln -s python3 ./python
    
    I注销:

    [vagrant@localhost bin]$ exit
    logout
    Connection to 127.0.0.1 closed.
    
    I再次登录:

    rhubarb:scratch milesd$ vagrant ssh
    Last login: Sat Jun  3 00:41:11 2017 from 10.0.2.2
    
    在/usr/local/bin中的python现在“首先在路径中拾取”:


    我发现我的虚拟环境出了什么问题。显然,有人在用户的主目录中创建了一个
    .bash\u alias
    文件,并在执行
    python
    命令时创建了alias以使用python27,这覆盖了我的venv的python

    (py3-venv) user@ubuntu:~$ python -V
    Python 3.4.3
    

    哪条python
    echo$PATH
    说了什么?@cricket\u 007-
    (py3-venv)user@ubuntu:~/venv$which python
    /home/user/venv/py3-venv/bin/python
    (py3-venv) user@ubuntu:~/venv$echo$PATH
    /home/user/venv/py3-venv/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/usr/games:/usr/local/games
    我看没问题。。。你第二次说你“做了同样的事情”,但你的命令实际上是不同的。具体来说,
    --python3
    vs
    -p/usr/bin/python3
    @cricket\u 007-片段来自不同的尝试,但我尝试了所有方法,结果都一样。对我来说,最重要的一行是
    已经在使用解释器/usr/bin/python3
    行您是否给命令“python”加了别名?这违背了创建虚拟环境的目的。您想使用虚拟环境中的python,而不是系统python我同意Dennis的观点,它违背了拥有虚拟环境的目的,但尽管如此,我尝试了建议的解决方案,但也失败了
    (py3-venv)user@ubuntu:~
    cat.barshrc | grep python
    别名python=“/usr/bin/python3”
    (py3-venv)user@ubuntu:~python-V
    python 2.7.12
    确实有效。您的中有一个拼写错误。它是.bashrc-not.barshrc
    (py3-venv) user@ubuntu:~$ python -V
    Python 3.4.3