Можно ли установить другую версию Python для Virtualenv? - PullRequest
144 голосов
/ 01 апреля 2011

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

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

Ответы [ 11 ]

248 голосов
/ 01 апреля 2011

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

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

Options:
  --version             show program's 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, используя ваш локальный питон
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.
>>> 
20 голосов
/ 01 апреля 2011

Предварительные условия:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

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

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

    mkvirtualenv --python=python2.6 yournewenv

4 голосов
/ 24 марта 2015

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

$ which python3
/usr/local/bin/python3

$ mkvirtualenv --python=/usr/local/bin/python3 env_name
4 голосов
/ 27 октября 2012

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

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

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

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

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
    
  2. Get 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
    
  3. Извлеките и установите Python-2.7.3 в pyenv dir.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
    
  4. Создайте свой virtualenv

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

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
    
  6. Исправить оставшиеся символические ссылки на 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 ../../../
    
  7. Тест

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

Алоха.

3 голосов
/ 03 августа 2016

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


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

pip install conda

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

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

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

conda create -n py35 python=3.5.2

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


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

source activate py35

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

conda install <package_name>
3 голосов
/ 01 апреля 2011

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

2 голосов
/ 12 ноября 2016

Вы можете использовать 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

...

1 голос
/ 21 марта 2015

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

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

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

Поэтому я настоятельно рекомендую установить пункт локально с 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 и локальный Python для пути, проверьте с помощью which pip иwhich python.

0 голосов
/ 24 марта 2017

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

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

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 в зависимости от полученного файла.

0 голосов
/ 05 мая 2015

Я не нашел подходящего ответа, так что вот мое мнение, которое основано на ответе @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 не найден),Может быть возможно установить pip / wheel напрямую, но каким-то образом easy_install был первым, что пришло мне в голову.Кроме того, сценарий может быть улучшен путем выделения конкретных версий.

NB.Использование xz в скрипте.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...