pyvenv vs venv vs python-virtualenv vs virtualenv и python 3


13
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? Разве это еще не сломано? Оригинальный virtualenv все еще работает с питоном? если 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 по умолчанию будет использоваться по умолчанию. Поскольку есть и 2.7, и 3.4, и они имеют отдельные команды, как мне не только убедиться, что Python 3 используется по умолчанию, но что все, что я устанавливаю, идет туда и используется им вместо 2.7?

Кстати, я попробовал sudo apt-get python3-virtualenv и получил: E: Невозможно найти пакет python3-virtualenv


1
Я все еще хотел бы знать, в чем разница - если таковая имеется - между всеми этими различными, но одинаково названными пакетами виртуальной среды.
Малик А. Руми

Я использую 14.04, поэтому этот ответ мне помог.
FriendFX

Ответы:


4

Способ установки пакетов Python 3.x в виртуальной среде Python заключается в создании виртуальной среды Python с использованием создателя виртуальной среды Python 3 ( python3-virtualenv ). python3-virtualenv находится в репозиториях Ubuntu по умолчанию в Ubuntu 14.10 и более поздних версиях.

Установите пакеты Python 3.x в виртуальной среде Python в 16.04 и более поздних версиях.

  1. Установите создатель виртуальной среды Python 3

    sudo apt install virtualenv python3-virtualenv
  2. Создайте виртуальную среду Python для python3. Вы можете устанавливать пакеты Python3 только внутри этой виртуальной среды Python. Если вы также хотите установить пакеты Python 2.x, вам нужно создать другую виртуальную среду Python.

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

    Новая виртуальная среда Python для python3 будет создана в envкаталоге, который находится в текущем каталоге.

  3. Установите пакеты Python.

    cd / path / to / env / # env - это каталог виртуальной среды python3
    Исходный бин / активировать
    pip3 установить имя первого пакета имя следующего пакета имя последнего пакета

Это новая виртуальная среда python3 с последней версией pip3, поэтому установка пакетов Python в ней будет работать отлично.


Установите пакеты Python 3.x в виртуальной среде Python в Ubuntu 14.04

sudo apt-get install virtualenvwrapper  
gedit .bashrc

Добавьте следующую строку в конец .bashrc.

source /usr/share/virtualenvwrapper/virtualenvwrapper.sh

Сохраните изменения в .bashrc и закройте gedit. Поставьте ваш .bashrc, чтобы изменения вступили в силу.

cd 
source .bashrc

Создайте виртуальную среду Python для python3. Вы можете устанавливать пакеты Python3 только внутри этой виртуальной среды Python. Если вы также хотите установить пакеты Python 2.x, вам нужно создать другую виртуальную среду Python.

mkvirtualenv py3 -p /usr/bin/python3

Новая виртуальная среда Python для python3 будет создана в ~/.virtualenvs/py3каталоге. .virtualenvsскрытая папка

Установите пакет.

cd ~ / .virtualenvs / py3
Исходный бин / активировать
pip3 установить имя пакета

4
Это не кажется правильным. Vivid (15.04) имеет python3-virtualenvи python3-venvпакеты доступны. Я предполагаю, что python3-venvэто правильный пакет, и в этом случае я понятия не имею, какой цели python3-virtualenvслужит.
вязать

Неправильно. Вы можете использовать virtualenv(исполняемый) для создания среды с произвольным интерпретатором, в том числе PyPy, просто отлично. Например virtualenv -p python3 newenv.
saaj

0

Ну, это становится сложным. Ниже показано Ubuntu Xenial (базовый выпуск для Linux Mint, который я использую). Давайте разберемся:

pyvenv

Он ссылается на скрипт- обертку пакета Python 3.3+ stdlib . Но это не рекомендуется с Python 3.6.

Это также пакет PyPi , который является переключателем виртуальной среды.

venv

Это пакет Python 3.3+ stdlib , целью которого было улучшить и заменить пакет PyPi virtualenv (см. 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.


Я также заметил то же самое на моей машине, на которой в то время работала Ubuntu 14.04. - «Как вы можете видеть, хотя пакет virtualenv использует python3-virtualenv, по умолчанию он создает среду Python 2».
Карел
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.