![pyvenv、venv、python-virtualenv、virtualenv 和 python 3](https://linux22.com/image/870369/pyvenv%E3%80%81venv%E3%80%81python-virtualenv%E3%80%81virtualenv%20%E5%92%8C%20python%203.png)
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 软件包
安装 Python 3 虚拟环境创建器
sudo apt install virtualenv python3-virtualenv
为 python3 创建一个 Python 虚拟环境。您只能在此 Python 虚拟环境中安装 python3 包。如果您还想安装 Python 2.x 包,则需要创建另一个 Python 虚拟环境。
virtualenv -p python3 venv source ./venv/bin/activate
venv
将在当前目录的目录中创建针对 python3 的新 Python 虚拟环境。安装 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 环境。