Можно ли установить еще одну версию Python в Virtualenv?

У меня есть общая учетная запись на веб-хостинге, на котором установлен Python 2.4, но мой код несовместим с 2.4. Возможно ли установить Python 2.6 непосредственно в Virtualenv?

Примечание. У меня нет разрешения на его установку на общем сервере.

Ответ 1

Вот варианты для virtualenv

$ virtualenv
You must provide a DEST_DIR
Usage: virtualenv [OPTIONS] DEST_DIR

Options:
  --version             show program version number and exit.
  -h, --help            show this help message and exit.
  -v, --verbose         Increase verbosity.
  -q, --quiet           Decrease verbosity.
  -p PYTHON_EXE, --python=PYTHON_EXE
                        The Python interpreter to use, e.g.,
                        --python=python2.5 will use the python2.5 interpreter
                        to create the new environment.  The default is the
                        interpreter that virtualenv was installed with
                        (/usr/bin/python)
  --clear               Clear out the non-root install and start from scratch
  --no-site-packages    Don't give access to the global site-packages dir to
                        the virtual environment
  --unzip-setuptools    Unzip Setuptools or Distribute when installing it
  --relocatable         Make an EXISTING virtualenv environment relocatable.
                        This fixes up scripts and makes all .pth files
                        relative
  --distribute          Use Distribute instead of Setuptools. Set environ
                        variable VIRTUALENV_USE_DISTRIBUTE to make it the
                        default
  --prompt==PROMPT      Provides an alternative prompt prefix for this
                        environment

1) Что вы хотите сделать, это установить python в каталог, который вы также можете написать.

Вы можете следовать инструкциям here.

Для Python 2.7.1
Python source

mkdir ~/src
mkdir ~/.localpython
cd ~/src
wget http://www.python.org/ftp/python/2.7.1/Python-2.7.1.tgz
tar -zxvf Python-2.7.1.tgz
cd Python-2.7.1

make clean
./configure --prefix=/home/${USER}/.localpython
make
make install

2) Установить virtualenv
virtualenv source

cd ~/src
wget http://pypi.python.org/packages/source/v/virtualenv/virtualenv-1.5.2.tar.gz#md5=fbcefbd8520bb64bc24a560c6019a73c
tar -zxvf virtualenv-1.5.2.tar.gz
cd virtualenv-1.5.2/
~/.localpython/bin/python setup.py install

3) Создайте virtualenv, используя свой локальный python
virtualenv docs

mkdir /home/${USER}/virtualenvs
cd /home/${USER}/virtualenvs
~/.localpython/bin/virtualenv py2.7 --python=/home/${USER}/.localpython/bin/python2.7

4) Активировать среду

cd ~/virtualenvs/py2.7/bin
source ./activate

5) Проверьте

(py2.7)$ python
Python 2.7.1 (r271:86832, Mar 31 2011, 15:31:37) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> exit()

(py2.7)$ deactivate
$ python
Python 2.6.6 (r266:84292, Sep 15 2010, 15:52:39) 
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

Ответ 2

Предпосылки:

  • sudo easy_install virtualenv
  • sudo pip install virtualenvwrapper

Установка virtualenv с помощью Python2.6:

  • Вы можете вручную загрузить, установить и установить другую версию Python на /usr/local или в другое место.
  • Если это другое место, кроме /usr/local, добавьте его в свой PATH.
  • Перезагрузите свою оболочку, чтобы получить обновленную версию PATH.
  • С этого момента вы сможете вызывать следующие 2 бинарных файла python из вашей оболочки python2.5 и python2.6
  • Создайте новый экземпляр virtualenv с помощью python2.6:

    mkvirtualenv --python=python2.6 yournewenv

Ответ 3

Эта процедура устанавливает Python2.7 в любом месте и устраняет любые абсолютные ссылки пути в вашей папке env (управляемой виртуальным пользователем). Даже virtualenv не установлен абсолютно.

Таким образом, теоретически, вы можете удалить каталог верхнего уровня в архив, распространять и запускать все, что настроено в tarball на машине, на которой не установлены Python (или любые зависимости).

Свяжитесь со мной по любым вопросам. Это всего лишь часть текущего, более масштабного проекта, который я разрабатываю. Теперь, для капли...

  • Настройка папок среды.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
    
  • Получить Python-2.7.3 и virtualenv без любой формы установки корневой ОС.

    $ cd dep
    $ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
    $ wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
    
  • Извлеките и установите Python-2.7.3 в директорию pyenv. make clean является необязательным, если вы делаете это 2-е, 3-е, N-е время...

    $ tar -xzvf Python-2.7.3.tgz
    $ cd Python-2.7.3
    $ make clean
    $ ./configure --prefix=/path/to/pyenv
    $ make && make install
    $ cd ../../
    $ ls
    dep    env    pyenv
    
  • Создайте свой virtualenv

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
    
  • Исправить символическую ссылку на python2.7 в env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
    
  • Исправить оставшиеся символические ссылки на python в env. Вам придется удалить символически связанные каталоги и воссоздать их, как указано выше. Кроме того, здесь синтаксис для принудительного создания символической ссылки на месте.

    $ ls -l env/lib/python2.7/
    $ cd !$
    $ ln -sf ../../../pyenv/lib/python2.7/UserDict.py UserDict.py
    [...repeat until all symbolic links are relative...]
    $ cd ../../../
    
  • Test

    $ python --version
    Python 2.7.1
    $ source env/bin/activate
    (env)
    $ python --version
    Python 2.7.3
    

Aloha.

Ответ 4

Я использую virtualenvwrapper и не хочу изменять $PATH, вот как:

$ which python3
/usr/local/bin/python3

$ mkvirtualenv --python=/usr/local/bin/python3 env_name

Ответ 5

Обычный подход заключается в том, чтобы загрузить исходный код и создать и установить локально (но не напрямую в virtualenv), а затем создать новый virtualenv, используя эту локальную установку Python. В некоторых системах может быть возможно загрузить и установить предварительно построенный питон, а не строить из источника.

Ответ 6

Вы можете использовать pyenv.

Существует много разных версий anaconda, jython, pypy и т.д.

https://github.com/yyuu/pyenv

Установка простая, как pyenv install 3.2.6

pyenv install --list
Available versions:
  2.1.3
  2.2.3
  2.3.7
  2.4
  2.4.1
  2.4.2
  2.4.3
  2.4.4
  2.4.5
  2.4.6
  2.5
  2.5.1
  2.5.2
  2.5.3
  2.5.4
  2.5.5
  2.5.6
  2.6.6

...

Ответ 7

Несмотря на то, что вопрос конкретно описывает установку 2.6, я хотел бы добавить некоторые примечания к превосходным ответам выше, если кто-то столкнется с этим. Для записи мое дело состояло в том, что я пытался установить 2.7 на ящик ubuntu 10.04.

Во-первых, моя мотивация к методам, описанным во всех ответах здесь, заключается в том, что установка Python из deadsnake ppa's была полной неудачей. Поэтому создание локального Python - это путь.

Пробовав это, я подумал, что полагаться на стандартную установку pip (с sudo apt-get install pip) будет достаточно. К сожалению, это неправильно. Оказалось, что я получаю все шорты от неприятных проблем и, в конечном итоге, не могу создать виртуальный.

Поэтому я настоятельно рекомендую установить pip локально с помощью wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. Этот вопрос, связанный с, дал мне этот намек.

Теперь, если это не работает, убедитесь, что libssl-dev для Ubuntu или openssl-dev для CentOS. Установите их с помощью apt-get или yum, а затем повторно постройте Python (нет необходимости удалять что-либо, если оно уже установлено, сделать это сверху). get-pip жалуется на это, вы можете проверить это, запустив import ssl в оболочке py.

Наконец, не забудьте объявить .local/bin и локальный питон для пути, проверьте с помощью which pip и which python.

Ответ 8

Теперь, самый простой способ найти более обновленную версию Python - установить его через conda в среду conda.


Установите conda (для этого вам может понадобиться virtualenv)

pip install conda

Установка новой версии Python внутри среды conda

Я добавляю этот ответ здесь, потому что не требуется ручная загрузка. conda сделает это за вас.

Теперь создайте среду для требуемой версии Python. В этом примере я буду использовать 3.5.2, потому что это последняя версия в это время написания (август 2016 года).

conda create -n py35 python=3.5.2

Создает среду для конды для установки пакетов


Чтобы активировать эту среду (я предполагаю, что linux в противном случае проверяет conda docs):

source activate py35

Теперь установите то, что вам нужно либо через pip, либо в conda в среде (у conda есть лучшая поддержка двоичного пакета).

conda install <package_name>

Ответ 9

Нет, но вы можете установить изолированную сборку Python (например, ActivePython) в вашем каталоге $HOME.

Этот подход является самым быстрым, и вам не требуется компилировать Python самостоятельно.

(в качестве бонуса вы также можете использовать ActiveState менеджер двоичных пакетов)

Ответ 10

Я не нашел подходящего ответа, поэтому здесь идет мой ответ, который основывается на ответе @toszter, но не использует системный Python (и вы, возможно, знаете, не всегда хорошая идея установить setuptools и virtualenv на системном уровне при работе со многими конфигурациями Python):

#!/bin/sh

mkdir python_ve
cd python_ve

MYROOT=`pwd`
mkdir env pyenv dep

cd ${MYROOT}/dep
wget https://pypi.python.org/packages/source/s/setuptools/setuptools-15.2.tar.gz#md5=a9028a9794fc7ae02320d32e2d7e12ee
wget https://raw.github.com/pypa/virtualenv/master/virtualenv.py
wget https://www.python.org/ftp/python/2.7.9/Python-2.7.9.tar.xz
xz -d Python-2.7.9.tar.xz

cd ${MYROOT}/pyenv
tar xf ../dep/Python-2.7.9.tar
cd Python-2.7.9
./configure --prefix=${MYROOT}/pyenv && make -j 4 && make install

cd ${MYROOT}/pyenv

tar xzf ../dep/setuptools-15.2.tar.gz

cd ${MYROOT}

pyenv/bin/python dep/virtualenv.py --no-setuptools --python=${MYROOT}/pyenv/bin/python --verbose env
env/bin/python pyenv/setuptools-15.2/setup.py install
env/bin/easy_install pip

echo "virtualenv in ${MYROOT}/env"

Уловка проблемы с куриным яйцом здесь заключается в том, чтобы сделать virtualenv без setuptools в первую очередь, потому что он в противном случае терпит неудачу (пип не может быть найден). Может быть возможно установить pip/wheel напрямую, но как-то easy_install было первым, что мне пришло в голову. Кроме того, script может быть улучшен путем разметки конкретных версий.

NB. Использование xz в script.

Ответ 11

Прежде всего, спасибо DTing за отличный ответ. Это довольно хорошо.

Для тех, кто страдает отсутствием доступа GCC на совместном хостинге, перейдите на ActivePython вместо обычного питона, как упомянул Скотт Стаффорд. Вот команды для этого.

wget http://downloads.activestate.com/ActivePython/releases/2.7.13.2713/ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz

tar -zxvf ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785.tar.gz

cd ActivePython-2.7.13.2713-linux-x86_64-glibc-2.3.6-401785

./install.sh

Он задаст вам путь к каталогу python. Введите

../../.localpython

Просто замените выше как шаг 1 в ответе DTing и перейдите к шагу 2 после этого. Обратите внимание, что URL-адрес пакета ActivePython может измениться с новой версией. Вы всегда можете получить новый URL-адрес отсюда: http://www.activestate.com/activepython/downloads

На основе URL-адреса вам нужно изменить имя команды tar и cd на основе полученного файла.