Используйте другую версию Python с virtualenv

У меня есть система Debian, в настоящее время работающая с Python 2.5.4. У меня virtualenv правильно установлен, все работает нормально. Есть ли вероятность, что я смогу использовать virtualenv с другой версией Python?

Я скомпилировал Python 2.6.2 и хотел бы использовать его с некоторым virtualenv. Достаточно ли перезаписать двоичный файл? Или я должен что-то изменить в отношении библиотек?

42 ответа

Решение

Просто используйте --python (или короткий -p) опция при создании вашего экземпляра virtualenv для указания исполняемого файла Python, который вы хотите использовать, например:

virtualenv --python=/usr/bin/python2.6 <path/to/new/virtualenv/>

NB. Для Python 3.3 или более поздней версии обратитесь к ответу Aelfinn ниже.

ОБНОВЛЕНИЕ: для Python3.6 ниже pyvenv скрипт устарел. Вместо этого Python Docs предлагает создать виртуальную среду с помощью следующей команды:

python3 -m venv <myenvname>

Для python3 (3.3+) используйте либо вышеуказанный метод, либо скрипт pyvenv команда.

pyvenv /path/to/new/virtual/environment

Обратите внимание, что venv не позволяет создавать virtualenv с другими версиями Python. Для этого установите и используйте virtualenv пакет

Это шаги, когда вы находитесь в среде общего хостинга и вам нужно установить и выполнить Python из исходного кода, а затем создать venv из вашей версии Python. Для Python 2.7.9 вы должны сделать что-то вроде этого:

mkdir ~/src
wget http://www.python.org/ftp/python/2.7.9/Python-2.7.9.tgz
tar -zxvf Python-2.7.9.tgz
cd Python-2.7.9
mkdir ~/.localpython
./configure --prefix=$HOME/.localpython
make
make install

виртуальная среда

cd ~/src
wget https://pypi.python.org/packages/5c/79/5dae7494b9f5ed061cff9a8ab8d6e1f02db352f3facf907d9eb614fb80e9/virtualenv-15.0.2.tar.gz#md5=0ed59863994daf1292827ffdbba80a63
tar -zxvf virtualenv-15.0.2.tar.gz
cd virtualenv-15.0.2/
~/.localpython/bin/python setup.py install
virtualenv ve -p $HOME/.localpython/bin/python2.7
source ve/bin/activate   

Естественно, это может быть применимо к любой ситуации, когда вы хотите воспроизвести точную среду, в которой вы работаете и в которой развертываете.

Есть более простой способ,

virtualenv venv --python=python2.7

Благодаря комментарию это работает, только если у вас установлен python2.7 на системном уровне (например, /usr/bin/python2.7).

В противном случае, если вы используете homebrew, вы можете использовать путь, чтобы дать вам то, что вы хотите.

virtualenv venv --python=/usr/local/bin/python

Вы можете найти путь к вашей установке Python с помощью

which python

Это также будет работать с питоном 3.

which python3
>> /usr/local/bin/python3
virtualenv venv --python=/usr/local/bin/python3

В конечном итоге уплотняется до:

virtualenv venv -p `which python`
virtualenv venv -p `which python3`
virtualenv --python=/usr/bin/python2.6 <path/to/myvirtualenv>

Под Windows для меня это работает:

virtualenv --python=c:\Python25\python.exe envname

без python.exe я получил WindowsError: [Error 5] Access is denied У меня установлен Python2.7.1 с virtualenv 1.6.1, и я хотел python 2.5.2.

Mac OSX 10.6.8 (Snow Leopard):

1) Когда вы делаете pip install virtualenv, команда pip связана с одной из ваших версий Python, и virtualenv устанавливается в эту версию Python. Ты можешь сделать

 $ which pip   

чтобы увидеть, что это за версия Python. Если вы видите что-то вроде:

 $ which pip
 /usr/local/bin/pip

затем сделайте:

$ ls -al /usr/local/bin/pip
lrwxrwxr-x  1 root  admin  65 Apr 10  2015 /usr/local/bin/pip ->
../../../Library/Frameworks/Python.framework/Versions/2.7/bin/pip

Вы можете увидеть версию Python в выводе.

По умолчанию это будет версия python, которая используется для любой новой среды, которую вы создаете. Однако вы можете указать любую версию python, установленную на вашем компьютере, для использования в новой среде с -p flag:

$ virtualenv -p python3.2 my_env  
Running virtualenv with interpreter /usr/local/bin/python3.2  
New python executable in my_env/bin/python  
Installing setuptools, pip...done.  

virtualenv my_env создаст в текущем каталоге папку, которая будет содержать исполняемые файлы Python и копию pip [команды], которую вы можете использовать для установки других пакетов.

http://docs.python-guide.org/en/latest/dev/virtualenvs/

virtualenv просто копирует python из папки на вашем компьютере во вновь созданный каталог my_env/bin/.

2) Системный питон находится в /usr/binв то время как различные версии Python, которые я установил, по умолчанию были установлены в:

 /usr/local/bin

3) У разных установленных мной питонов есть имена вроде python2.7 или же python3.2и я могу использовать эти имена, а не полные пути.

======== VIRTUALENVWRAPPER =========

1) У меня были некоторые проблемы с работой virtualenvwrapper. Это то, что я положил в ~/.bash_profile:

export WORKON_HOME=$HOME/.virtualenvs
export PROJECT_HOME=$HOME/django_projects  #Not very important -- mkproject command uses this
#Added the following based on: 
#http://stackru.com/questions/19665327/virtualenvwrapper-installation-snow-leopard-python
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python2.7 
#source /usr/local/bin/virtualenvwrapper.sh
source /Library/Frameworks/Python.framework/Versions/2.7/bin/virtualenvwrapper.sh

2) -p option По-другому работает с virtualenvwrapper: я должен указать полный путь к интерпретатору Python, который будет использоваться в новой среде (когда я не хочу использовать версию Python по умолчанию):

$ mkvirtualenv -p /usr/local/bin/python3.2 my_env
Running virtualenv with interpreter /usr/local/bin/python3
New python executable in my_env/bin/python
Installing setuptools, pip...done.
Usage: source deactivate

removes the 'bin' directory of the environment activated with 'source
activate' from PATH. 

В отличие от virtualenv, virtualenvwrapper создаст среду в месте, указанном переменной среды $WORKON_HOME. Это держит все ваше окружение в одном месте.

[Ноябрь 2019] Мне нужно было установить среду Python 3.7 (env) в моей системе Arch Linux на базе Python 3.8. Python 3.7 больше не был в системе, поэтому я не мог понизить версию Python, чтобы установить необходимый мне пакет.

Кроме того, я хотел использовать этот пакет / Python 3.7 в виртуальной среде (venv). Вот как я это сделал.


Загрузите исходные файлы версии Python:

Я загрузил исходные файлы Python 3.7.4 из

https://www.python.org/downloads/source/

к

/mnt/Vancouver/apps/python_versions/src/Python-3.7.4.tgz

Затем я извлек этот архив (исходные файлы) в

/mnt/Vancouver/apps/python_versions/src/Python-3.7.4/


Установка:

[Примечание: в моей системе env, а не venv.]

cd /mnt/Vancouver/apps/python_versions/src/Python-3.7.4/
time ./configure                 ## 17 sec
time make                        ## 1 min 51 sec
time sudo make install           ## 18 sec
time make clean                  ## 0.3 sec

Изучите установленные версии Python:

$ which python
/usr/bin/python

$ python --version
Python 3.8.0

$ which python3.7
/usr/local/bin/python3.7

$ python    ## Python 3.8 [system / env]
Python 3.8.0 (default, Oct 23 2019, 18:51:26) 
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>>

$ python3.7    ## newly-installed Python 3.7 package
Python 3.7.4 (default, Nov 20 2019, 11:36:53) 
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.version)
3.7.4 (default, Nov 20 2019, 11:36:53) 
[GCC 9.2.0]
>>>

$ python3.7 --version                                                                                                 
Python 3.7.4

Как создать venv для конкретной версии Python:

https://docs.python.org/3/tutorial/venv.html

12.2. СОЗДАНИЕ ВИРТУАЛЬНЫХ СРЕД

Модуль, используемый для создания и управления виртуальными средами, называется venv. venvобычно устанавливает самую последнюю версию Python, которая у вас есть. Если в вашей системе несколько версий Python, вы можете выбрать конкретную версию Python, запустив python3 или любую другую версию, которую хотите.

Чтобы создать виртуальную среду, выберите каталог, в котором вы хотите его разместить, и запустите модуль venv как сценарий с путем к каталогу:

python3 -m venv tutorial-env

Это создаст tutorial-envкаталог, если он не существует, а также создайте внутри него каталоги, содержащие копию интерпретатора Python, стандартную библиотеку и различные вспомогательные файлы....


Создайте Python 3.7 venv [в операционной среде / системе Python 3.8]:

python3.7 -m venv ~/venv/py3.7      ## create Python 3.7-based venv
source ~/venv/py3.7/bin/activate    ## activate that venv
deactivate                          ## deactivate that venv (when done, there)

Добавлен ~/.bashrc:

alias p37='echo "   [Python 3.7 venv (source ~/venv/py3.7/bin/activate)]" && source ~/venv/py3.7/bin/activate'

Тестирование Python 3.7 venv:

$ p37                                                                                                                 
[Python 3.7 venv (source ~/venv/py3.7/bin/activate)]

(py3.7)$ python --version
Python 3.7.4

(py3.7)$ python
Python 3.7.4 (default, Nov 20 2019, 11:36:53) 
[GCC 9.2.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print(sys.version)
3.7.4 (default, Nov 20 2019, 11:36:53) 
[GCC 9.2.0] 
>>>

У вас должна быть установлена ​​эта версия Python. Если он у вас есть, то в основном

С virtualenv,

      virtualenv --python=python3.8 env/place/you/want/to/save/to

с венвом

      python3.8 -m venv env/place/you/want/to/save/to

Приведенные выше примеры относятся к python3.8, вы можете изменить его, чтобы иметь разные версии виртуальных сред, если они установлены на вашем компьютере.

Предположим, у вас в настоящее время установлен python 2.7 в вашей virtualenv. Но хочу использовать python3.2, Вы должны обновить это:

$ virtualenv --python=/usr/bin/python3.2 name_of_your_virtualenv

Затем активируйте свой virtualenv с помощью:

$ source activate name_of_your_virtualenv

а затем сделать: python --version в оболочке, чтобы проверить, обновлена ​​ли ваша версия.

Эти две команды должны нормально работать для новичка

virtualenv -p python2 myenv (Для python2)

virtualenv -p python3 myenv (Для python3)

Ты можешь позвонить virtualenv с версией Python, которую вы хотите. Например:

python3 -m virtualenv venv

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

c:\Python34\Scripts\virtualenv.exe venv

И запустив:

venv/bin/python

Python 3.5.1 (v3.5.1:37a07cee5969, Dec  5 2015, 21:12:44) 
[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>

вы можете увидеть версию Python, установленную в виртуальной среде

-p подход работает хорошо, но вы должны помнить, чтобы использовать его каждый раз. Если ваша цель состоит в том, чтобы перейти на более новую версию Python в целом, это будет проблемой, а также может привести к ошибкам.

Другой вариант - установить переменную окружения, которая делает то же самое, что и -p, Установите это через ваш ~/.bashrc файл или где вы управляете переменными среды для ваших сеансов входа в систему:

export VIRTUALENV_PYTHON=/path/to/desired/version

затем virtualenv будет использовать это в любое время, если вы не укажете -p в командной строке.

На Mac я использую pyenv и virtualenvwrapper. Я должен был создать новый virtualenv. Вам нужен homebrew, который, я полагаю, вы установили, если вы работаете на Mac, но просто для удовольствия:

ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)"


brew install pyenv
pyenv install 2.7.10
pyenv global 2.7.10
export PATH=/Users/{USERNAME}/.pyenv/versions/2.7.10/bin:$PATH
mkvirtualenv -p ~/.pyenv/versions/2.7.10/bin/python  {virtual_env_name}

Я также сначала заморозил свои требования, чтобы я мог просто переустановить новый virtualenv с помощью:

pip install -r requirements.txt

Как уже упоминалось в нескольких ответах, использование virtualenv - чистое решение. Однако небольшая ошибка, о которой все должны знать, заключается в том, что если псевдоним для python установлен в bash_aliases, например:

python=python3.6

этот псевдоним также будет использоваться в виртуальной среде. Итак, в этом сценарии выполняетсяpython -V внутри виртуального env всегда будет выводить 3.6 независимо от того, какой интерпретатор используется для создания среды:

virtualenv venv --python=pythonX.X

На окнах:

py -3.4x32 -m venv venv34

или же

py -2.6.2 -m venv venv26

Это использует py Launcher, который найдет правильный исполняемый файл Python для вас (при условии, что он установлен).

Еще проще, используя подстановку команд, чтобы найти для вас python2:

virtualenv -p $(which python2) <path/to/new/virtualenv/>

Или при использовании virtualenvwrapper:

mkvirtualenv -p $(which python2) <env_name>

Для Mac(High Sierra) установите virtualenv в python3 и создайте virtualenv для python2:

$ python3 -m virtualenv --python=python2 vp27
$ source vp27/bin/activate
(vp27)$ python --version
Python 2.7.14

Я использовал этот ответ для Windows

/questions/37248289/ispolzovanie-virtualenv-s-neskolkimi-versiyami-python-v-windows/37248303#37248303

      py -3.4 -m venv c:\path\to\wherever\you\want\it

Это кажется немного сложным для Windows. Если вы в Windows используете python 3.3 или новее, вы можете использовать средство запуска python.pyсделать это намного проще. Просто установите другую версию Python и запустите:

py -[my version] -m venv env

Это создаст виртуальную среду под названием env в вашем текущем каталоге, используя python [my version]. В качестве примера:

py -3.7 -m venv env
./env/Scripts/activate

Это создает виртуальную среду под названием envс помощью python3.7 и активирует его. Никаких дорожек или других сложных вещей не требуется.

В Linux Ubuntu 21.04 (в настоящее время Python 3.9.5) мне нужно было получить виртуальную версию Python 3.7.8. Полные шаги для начала работы:

Найдите нужный источник версии Python, например 3.7.8 здесь: https://www.python.org/downloads/release/python-378/

Загрузите архив с исходным кодом Gzip

Разархивируйте его с помощью tar zxvf Python-3.7.8.tgz (при необходимости измените номер вашей версии, если он отличается от 3.7.8)

Скопируйте распакованную папку в / usr / bin с помощью: sudo cp -r Python-3.7.8 /usr/bin

      cd /usr/bin/Python-3.7.8/

Проверьте содержимое, если вы хотите увидеть, что у вас есть: ls

      sudo time ./configure
sudo time make
time sudo make install
time make clean

Проверьте, как настроен ваш питон и отчитывается:

      which python
python --version

Все должно быть связано с вашей основной установкой (Python 3.9.5 для меня)

Чтобы проверить новую установку:

      which python 3.7
python3.7 --version

Все должно быть связано с вашей установкой 3.7.8

Если вы хотите запустить его для проверки, выполните:

      python3.7
exit()

Установите venv:

      sudo apt install venv

Чтобы создать venv (возможно, в вашем репо, если это так, добавьте .venv в .gitignore):

      python3.7 -m venv .venv

Чтобы активировать Venv:

      source .venv/bin/activate

Проверьте свою версию:

      python --version

Я использую pyenv для управления своей версией Python.

pyenv install 3.7.3
pyenv local 3.7.3

Проверьте свою версию Python:

$ python --version
Python 3.7.3

Создайте виртуальную среду с venv:

python -m venv .

Затем активируйте виртуальную среду:

source bin/activate

Проверьте свою версию Python:

$ python --version
Python 3.7.3

Возможно, вам потребуется удалить предыдущую виртуальную среду

rm -rf bin

Конец 2020 года:

Самым простым способом использования virtualenv (дополнительное преимущество: с любой возможной версией Python) было бы использование pyenv и его (связанного) плагина pyenv-virtualenv (см. https://realpython.com/intro-to-pyenv/#virtual-environments-and-pyenv)

Применение: pyenv virtualenv <python_version> <environment_name>

Установка:

cf https://github.com/pyenv/pyenv-installer

При этом в настоящее время лучшая альтернатива вместо использования virtualenvpip) будет Поэзия (вместе с pyenv указанное выше, для обработки различных версий Python).

Другой вариант, потому что он поддерживается непосредственно PyPA (организация, стоящая за pipи PyPI) и возобновил выпуск с конца мая (до этого не выпускался с конца 2018 года...) будет Pipenv

В подсистеме Windows для Linux:

  1. Создайте среду для python3:

    virtualenv --python=/usr/bin/python3 env
    
  2. Активируйте это:

    source env/bin/activate
    

Ответ на этот вопрос не должен быть таким сложным...

ТЛ, ДР:

установите в своей системе столько версий Python, сколько вы предпочитаете, и используйте:

      /c/path/to/any/version/of/python -m venv my_venv

============================================

Я использую venv для установки виртуальных сред с

      python -m venv <where/to/and/name_of_venv>

Если вы пытаетесьwhich pythonвы увидите, о каком питоне вы говорите, когда говорите «питон». например, для меня это:

      which python

результат:/c/Program Files/Python36/python

Итак, теперь у вас есть ответ! вы можете установить любую версию Python в своей системе и иметь несколько версий одновременно. Так, например, я установил Python3.7 в этот каталог: «C:\Program Files\Python37». Итак, вместо использования «python» теперь я указываю, какой python/c/Program\ Files/Python37/python:

       /c/Program\ Files/Python37/python -m venv my_venv

(не забудьте избежать пробела в пути)

Вот и все!

Это сработало для моего использования в Windows 10, где у меня Python3.7, и я хочу перейти на более раннюю версию проекта на Python3.6.6:

Я использовал «venv» для создания новой среды под названием «venv», которую я загрузил с https://www.python.org/downloads/windows/ ; установить "Скачать установщик исполняемого файла Windows x86-64-"; затем я использовал следующую командную строку в каталоге, в котором я хочу создать свою среду

>C:\Users\...\Python\Python36\python.exe -m venv venv

Наконец, я активировал среду с помощью командной строки:

>venv\Scripts\activate.bat

И проверьте версию python, позвонив:

>python --version Python3.6.6

Я использую Windows, поэтому мне следует использовать .exe на пути pthon

virtualenv -p=C:\Python27\python2.exe <envname>

Да, приведенные выше ответы верны и отлично работают на Unix-системах, таких как Linux и MAC OS X.

Я попытался создать virtualenv для Python2 и Python3 с помощью следующих команд.

Здесь я использовал venv2 и venv3 в качестве их имен для Python2 и Python3 соответственно.

Python2 "

MacBook-Pro-2:~ admin$ virtualenv venv2 --python=`which python2`
Running virtualenv with interpreter /usr/local/bin/python2
New python executable in /Users/admin/venv2/bin/python
Installing setuptools, pip, wheel...done.
MacBook-Pro-2:~ admin$ 
MacBook-Pro-2:~ admin$ ls venv2/bin/
activate        easy_install        pip2.7          python2.7
activate.csh        easy_install-2.7    python          wheel
activate.fish       pip         python-config
activate_this.py    pip2            python2
MacBook-Pro-2:~ admin$ 

Python3 "

MacBook-Pro-2:~ admin$ virtualenv venv3 --python=`which python3`
Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/Library/Frameworks/Python.framework/Versions/3.6'
New python executable in /Users/admin/venv3/bin/python3
Also creating executable in /Users/admin/venv3/bin/python
Installing setuptools, pip, wheel...done.
MacBook-Pro-2:~ admin$ 
MacBook-Pro-2:~ admin$ ls venv3/bin/
activate        easy_install        pip3.6          python3.6
activate.csh        easy_install-3.6    python          wheel
activate.fish       pip         python-config
activate_this.py    pip3            python3
MacBook-Pro-2:~ admin$ 

Проверка мест установки Python

MacBook-Pro-2:~ admin$ which python2
/usr/local/bin/python2
MacBook-Pro-2:~ admin$ 
MacBook-Pro-2:~ admin$ which python3
/usr/local/bin/python3
MacBook-Pro-2:~ admin$ 

Предположим, я хочу использовать Python 3.8 и использую MacOS.

      brew install python@3.8

Затем,

      python3.8 -m venv venv
virtualenv -p python3 myenv

Ссылка на создание virtualenv

Другие вопросы по тегам