Чи можливо встановити іншу версію Python на Virtualenv?


146

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

Примітка. Я не маю дозволу встановлювати його на спільному сервері.

Відповіді:


253

Ось варіанти для 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.
>>> 

14
блискучий запис! Хоча два коментарі: 1. Мені не довелося робити, make cleanперш ніж ./configure --prefix=/home/<user>/.localpythonнасправді make cleanповернулася помилка. 2. virtualenv name -p=/python/pathне працював, а virtualenv name -p /python/pathне працював. Я припускаю, що це до віртуальної версії. ура!
zzart

1
Мені в тюремному режимі не вдалося скористатися gcc, але я міг використовувати ActiveState Python замість кроку 1: docs.activestate.com/activepython/2.7/…
Скотт Стаффорд

3
Ось перелік модулів, які вам потрібно встановити (на debian), щоб це працювало максимально наближеним до повного встановлення:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu

1
Нітпік: sourceце башизм. Еквівалент POSIX є ..
l0b0

4
Я вважаю, що цього багато основних модулів бракує
user299709

20

Попередні реквізити:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Встановлення virtualenv за допомогою Python2.6:

  1. Ви можете вручну завантажити, створити та встановити іншу версію Python до /usr/localіншого місця.

  2. Якщо це інше місце, окрім іншого /usr/local, додайте його до своєї ПАТИ.

  3. Перезавантажте свою оболонку, щоб забрати оновлений PATH.

  4. З цього моменту ви зможете викликати наступні два бінарні файли пітона зі своєї оболонки python2.5таpython2.6

  5. Створіть новий екземпляр virtualenv за допомогою python2.6:

    mkvirtualenv --python=python2.6 yournewenv


4
Я думаю, що команда mkvirtualenv працює лише тоді, коли у вас встановлений virtualenvwrapper.
DTing

4

Ця процедура встановлює Python2.7 в будь-якому місці та виключає абсолютні посилання на шлях у вашій envпапці (керується virtualenv) . Навіть virtualenv встановлений не абсолютно.

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

Звертайтеся до мене з будь-якими питаннями. Це лише частина поточного, більшого проекту, який я розробляю. Тепер для краплі ...

  1. Налаштування папок оточення.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Отримайте 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 в pyenvdir. 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. Створіть свій віртуаленв

    $ 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. Зафіксуйте залишки пітона, що залишилися, у 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

Алоха.


1
Крок 4 потрібен модуль pip, здається. Спробували з останнім Python 2.7.9.
Роман Сусі

1
Спробував перейти через цю, дуже неповну відповідь з великою кількістю помилок.
Алекс Р

4

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

$ which python3
/usr/local/bin/python3

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

3

Звичайний підхід полягає у завантаженні джерела, побудові та встановленні локально (але не безпосередньо у virtualenv), а потім створити новий virtualenv за допомогою локальної установки Python. У деяких системах можливо завантажувати та встановлювати попередньо вбудований пітон, а не будувати з джерела.


3

Зараз на днях найпростіший спосіб я знайшов більш оновлену версію Python - це встановити його через conda в конда-середовище.


Встановіть conda (для цього вам може знадобитися virtualenv)

pip install conda

Встановлення нової версії Python всередині кондового середовища

Я додаю цю відповідь сюди, тому що не потрібно завантажувати вручну. condaзробить це за вас.

Тепер створіть середовище для потрібної версії Python. У цьому прикладі я буду використовувати 3.5.2, тому що це остання версія на даний момент написання (серпень 2016).

conda create -n py35 python=3.5.2

Створить середовище для конда для встановлення пакетів


Щоб активувати це середовище (я припускаю, що Linux в іншому випадку перевіряє документи conda ):

source activate py35

Тепер встановіть те, що вам потрібно, або через pip або conda в оточенні (conda має кращу підтримку бінарних пакетів).

conda install <package_name>

2

Ви можете використовувати 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

Хоча питання спеціально описує встановлення 2.6, я хотів би додати деякі важливі пункти до відмінних відповідей вище, якщо хтось стикається з цим. Для запису, мій випадок полягав у тому, що я намагався встановити 2.7 на коробку ubuntu 10.04.

По-перше, моя мотивація до методів, описаних у всіх відповідях тут, полягає в тому, що встановлення Python з рпа-вершини глухої змії було цілком невдалим. Тож побудова локального Python - це шлях.

Спробувавши це, я подумав, що покладатися на встановлення за замовчуванням pip (with sudo apt-get install 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.


1

Повний путівник з pyenv

Якщо pyenv не встановлений, встановіть його за допомогою pyenv-installer :

$ curl https://pyenv.run | bash

Щоб використовувати будь-яку власну версію пітона, наприклад, 3.5.6використовуйте наступне:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env

0

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

Цей підхід найшвидший і не вимагає від вас самостійного складання Python.

(як бонус ви також можете скористатися менеджером двійкових пакетів ActiveState )


Насправді помилково, оскільки virtualenv здатний встановити ще одну версію Python.
Райто

0

Я не знайшов відповідної відповіді, тому тут я знайду свою думку, яка спирається на відповідь @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 безпосередньо, але якось легко_встановлення було першим, що мені прийшло в голову. Також сценарій можна вдосконалити, виділивши конкретні версії.

NB. Використання xz у сценарії.


0

Перш за все, дякую 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 команди на основі отриманого файлу.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.