pyvenv、venv、python-virtualenv、virtualenv 和 python 3

pyvenv、venv、python-virtualenv、virtualenv 和 python 3
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

这是怎么回事?python-virtualenv == pyvenv 吗?这还是有问题吗?原始的虚拟环境还能在 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

这时我放弃了,因为在此之前安装 python3-pip 给了我

Setting up python3-setuptools (3.3-1ubuntu1) ...
Setting up python3-pip (1.5.4-1) ...

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

我读到 Python 3 应该成为未来的默认版本。由于 Python 2.7 和 3.4 都存在,并且有单独的命令,我如何才能确保 Python 3 是我的默认版本,而且我安装的任何东西都会在那里,并被它使用,而不是 2.7?

顺便说一句,我尝试了 sudo apt-get python3-virtualenv 并得到:E:无法找到包 python3-virtualenv

答案1

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

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

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

     sudo apt install virtualenv python3-virtualenv
    
  2. 为 python3 创建一个 Python 虚拟环境。您只能在此 Python 虚拟环境中安装 python3 包。如果您还想安装 Python 2.x 包,则需要创建另一个 Python 虚拟环境。

     virtualenv -p python3 venv  
     source ./venv/bin/activate
    

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

  3. 安装 Python 包。

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

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


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

sudo apt-get install virtualenvwrapper  
gedit .bashrc

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

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

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

cd 
source .bashrc

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

mkvirtualenv py3 -p /usr/bin/python3

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

安装一个包。

cd ~/.virtualenvs/py3
源 bin/激活
python2-m pip 安装包裹名字

答案2

好吧,事情变得复杂了。以下是针对 Ubuntu Xenial(我使用的 Linux Mint 的基础版本)显示的内容。让我们理清一下:

pyvenv

它指的是 Python 3.3+标准库包的包装器脚本。但从 Python 3.6 开始它已被弃用。

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

韦恩

这是 Python 3.3+标准库包其目的是改进和取代 PyPivirtualenv 包(看PEP 405)。但似乎还没有达到这个程度(至少功能还不够完善)。

python-virtualenv 和 virtualenv

$ apt-cache show virtualenv | grep Depends
Depends: python3, python3-virtualenv

如您所见,它在 Python 3 上运行。python-virtualenv软件包的使用方式如下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

如您所见,即使virtualenv包正在使用python3-virtualenv,其默认也是创建 Python 2 环境。

相关内容