pyvenv vs venv vs python-virtualenv vs virtualenv 和 python 3

Mal*_*umi 14 python apt virtualenv pip

malikarumi@Tetouan2:~$ pip install virtualenv
    Collecting virtualenv
    Downloading virtualenv-12.0.7-py2.py3-none-any.whl (1.8MB)
    100% |################################| 1.8MB 330kB/s 

malikarumi@Tetouan2:~$ pip freeze
    (a lot of stuff, but not virtualenv)

malikarumi@Tetouan2:~$ virtualenv testvenv1
    The program 'virtualenv' is currently not installed. You can install it by typing:
    sudo apt-get install python-virtualenv
Run Code Online (Sandbox Code Playgroud)

这里发生了什么?是 python-virtualenv == pyvenv 吗?那不是还坏了吗?原来的 virtualenv 仍然适用于 python 吗?如果 venv(名称变体太多!!!)是标准库https://docs.python.org/3/library/venv.html 的一部分,为什么我被告知要安装它?

当我尝试安装它时,我得到了:

malikarumi@Tetouan2:~$ sudo apt-get install python-virtualenv
    Reading package lists... Done
    Building dependency tree       
    Reading state information... Done
    The following extra packages will be installed:
    python-colorama python-distlib python-html5lib python-pip python-setuptools
Run Code Online (Sandbox Code Playgroud)

那时我中止了,因为在这之前安装 python3-pip 给了我

Setting up python3-setuptools (3.3-1ubuntu1) ...
Setting up python3-pip (1.5.4-1) ...
Run Code Online (Sandbox Code Playgroud)

而且我不确定额外的包是否会覆盖它们或进入 python 2.7。

我读到 python 3 应该是默认的。由于 2.7 和 3.4 都在那里,并且有单独的命令,我如何不仅确保 Python 3 是我的默认值,而且我安装的任何东西都在那里并被它而不是 2.7 使用?

顺便说一句,我试过 sudo apt-get python3-virtualenv 并得到:E: Unable to locate package python3-virtualenv

kar*_*rel 4

在 Python 虚拟环境中安装 Python 3.x 包的方法是使用 Python 3 虚拟环境创建器 ( python3-virtualenv ) 创建 Python 虚拟环境。python3-virtualenv 位于 Ubuntu 14.10 及更高版本的默认 Ubuntu 存储库中。

在 16.04 及更高版本中的 Python 虚拟环境中安装 Python 3.x 包

  1. 安装Python 3虚拟环境创建器

     sudo apt install virtualenv python3-virtualenv
    
    Run Code Online (Sandbox Code Playgroud)
  2. 为python3创建Python虚拟环境。您只能在此 Python 虚拟环境中安装 python3 软件包。如果你还想安装Python 2.x包,那么你需要创建另一个Python虚拟环境。

     virtualenv -p python3 venv  
     source ./venv/bin/activate
    
    Run Code Online (Sandbox Code Playgroud)

    python3 的新 Python 虚拟环境将在venv当前目录中的目录中创建。

  3. 安装 Python 包。

    cd /path/to/venv/ # venv是python3虚拟环境的目录
     源文件箱/激活
     python3 -m pip install第一个包名称 下一个包名称 最后一个包名称

这是一个新的 python3 虚拟环境,具有最新版本的 pip3,因此在其中安装 Python 包会很好用。


在 Ubuntu 14.04 的 Python 虚拟环境中安装 Python 3.x 包

sudo apt-get install virtualenvwrapper  
gedit .bashrc
Run Code Online (Sandbox Code Playgroud)

将以下行添加到 .bashrc 的末尾。

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh
Run Code Online (Sandbox Code Playgroud)

将更改保存到 .bashrc 并关闭 gedit。获取您的 .bashrc 以使更改生效。

cd 
source .bashrc
Run Code Online (Sandbox Code Playgroud)

为python3创建Python虚拟环境。您只能在此 Python 虚拟环境中安装 python3 软件包。如果你还想安装Python 2.x包,那么你需要创建另一个Python虚拟环境。

mkvirtualenv py3 -p /usr/bin/python3
Run Code Online (Sandbox Code Playgroud)

将在该目录中创建 python3 的新 Python 虚拟环境~/.virtualenvs/py3.virtualenvs是一个隐藏文件夹。

安装一个包。

cd ~/.virtualenvs/py3
源文件箱/激活
python2 -m pip install包名

  • 这似乎不正确。Vivid (15.04) 有可用的 `python3-virtualenv` 和 `python3-venv` 软件包。我假设 `python3-venv` 是正确的包,在这种情况下我不知道 `python3-virtualenv` 的用途是什么。 (4认同)

saa*_*aaj 0

嗯,事情变得复杂了。以下是针对 Ubuntu Xenial(这是我使用的 Linux Mint 的底层版本)的显示。我们来整理一下:

pyvenv

它指的是Python 3.3+ stdlib 包的包装脚本。但自 Python 3.6 以来它已被弃用。

它也是一个PyPi包,它是一个虚拟环境切换器。

维尼夫

它是 Python 3.3+ stdlib 包,其目的是改进和替换 PyPi virtualenv 包(请参阅PEP 405)。但似乎还没有(至少功能不完整)。

python-virtualenv 和 virtualenv

$ apt-cache show virtualenv | grep Depends
Depends: python3, python3-virtualenv
Run Code Online (Sandbox Code Playgroud)

正如您所看到的,它在 Python 3 上运行python-virtualenv。package 的用途就像python2 -m virtualenv py2. 让我们看看virtualenv在新版 Ubuntu Xenial ( docker run --rm -it ubuntu:xenial) 上如何工作:

$ virtualenv
bash: virtualenv: command not found
$ apt-get update
...
$ apt-get install --yes --no-install-recommends virtualenv
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  ca-certificates dh-python libexpat1 libmpdec2 libpython3-stdlib
  libpython3.5-minimal libpython3.5-stdlib libsqlite3-0 libssl1.0.0
  mime-support openssl python-pip-whl python3 python3-minimal
  python3-pkg-resources python3-virtualenv python3.5 python3.5-minimal
Suggested packages:
  libdpkg-perl python3-doc python3-tk python3-venv python3-setuptools
  python3.5-venv python3.5-doc binutils binfmt-support
Recommended packages:
  file
The following NEW packages will be installed:
  ca-certificates dh-python libexpat1 libmpdec2 libpython3-stdlib
  libpython3.5-minimal libpython3.5-stdlib libsqlite3-0 libssl1.0.0
  mime-support openssl python-pip-whl python3 python3-minimal
  python3-pkg-resources python3-virtualenv python3.5 python3.5-minimal
  virtualenv
...
$ virtualenv test
The executable python2 (from --python=python2) does not exist
$ virtualenv -p python3 py3 
Already using interpreter /usr/bin/python3
Using base prefix '/usr'
New python executable in /py3/bin/python3
Also creating executable in /py3/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
$ . py3/bin/activate
(py3) $ python --version
Python 3.5.2
(py3) $ deactivate
$ apt-get install --yes --no-install-recommends python    
Reading package lists... Done
Building dependency tree       
Reading state information... Done
The following additional packages will be installed:
  libffi6 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib
  python-minimal python2.7 python2.7-minimal
Suggested packages:
  python-doc python-tk python2.7-doc binutils binfmt-support
The following NEW packages will be installed:
  libffi6 libpython-stdlib libpython2.7-minimal libpython2.7-stdlib python
  python-minimal python2.7 python2.7-minimal
...
$ virtualenv py2 
Running virtualenv with interpreter /usr/bin/python2
New python executable in /py2/bin/python2
Also creating executable in /py2/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
$ . py2/bin/activate
(py2) $ python --version
Python 2.7.12
Run Code Online (Sandbox Code Playgroud)

正如你所看到的,即使virtualenv包使用的是python3-virtualenv,它的默认设置是创建 Python 2 环境。