Можно ли установить другую версию Python в Virtualenv?
У меня есть общая учетная запись на веб-хостинге с установленным Python 2.4, но мой код несовместим с 2.4. Можно ли установить Python 2.6 непосредственно в Virtualenv?
Примечание: у меня нет разрешения на его установку на общем сервере.
11 ответов
вот варианты 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.1Python 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 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 с помощью локального pythonvirtualenv 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.
>>>
предпосылки:
sudo easy_install virtualenv
sudo pip install virtualenvwrapper
установка virtualenv с Python2.6:
- вы можете вручную загрузить, построить и установить другую версию Python в
/usr/local
или в другом месте. - если это другое место, кроме
/usr/local
добавить его в свой путь. - перезагрузите оболочку, чтобы забрать обновленный путь.
- С этого момента, вы должны быть в состоянии назвать следующие 2 файлы Python из вашей оболочки
python2.5
иpython2.6
-
создайте новый экземпляр virtualenv с помощью
python2.6
:mkvirtualenv --python=python2.6 yournewenv
эта процедура устанавливает Python2.7 в любом месте и исключает любые абсолютные ссылки пути в своем env
папку (управляется virtualenv). Даже virtualenv не установлен абсолютно.
таким образом, теоретически, вы можете поместить каталог верхнего уровня в tarball, распространять и запускать все, что настроено в 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 ../../../
-
тест
$ python --version Python 2.7.1 $ source env/bin/activate (env) $ python --version Python 2.7.3
Алоха.
Я использую virtualenvwrapper и не хочу изменять $PATH, вот как:
$ which python3
/usr/local/bin/python3
$ mkvirtualenv --python=/usr/local/bin/python3 env_name
обычный подход-загрузить источник, построить и установить локально (но не непосредственно в virtualenv), а затем создать новый virtualenv, используя эту локальную установку Python. В некоторых системах можно загрузить и установить предварительно построенный python, а не строить из исходного кода.
Вы можете использовать pyenv.
существует множество различных версий anaconda, jython, pypy и так далее...
установка так же просто, как 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
...
теперь дни, самый простой способ, который я нашел, чтобы иметь более обновленную версию 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>
хотя вопрос конкретно описывает установку 2.6, я хотел бы добавить некоторые важные моменты к отличным ответам выше, если кто-то столкнется с этим. Для записи, мой случай был в том, что я пытался установить 2.7 на ubuntu 10.04 box.
во-первых, моя мотивация к методам, описанным во всех ответах здесь, заключается в том, что установка Python из deadsnake по ППА был полный провал. Поэтому создание локального Python-это путь.
попробовав так, я подумал, полагаясь на установку по умолчанию pip (с sudo apt-get install pip
) было бы достаточно. К сожалению, это неправильно. Оказалось, что я получаю все неприятные проблемы и в конечном итоге не могу создать virtualenv.
поэтому, я настоятельно рекомендую установить 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
и локальный python для пути, проверьте с which pip
и which python
.
нет, но вы можете установить изолированную сборку Python (например,ActivePython) под .
этот подход является самым быстрым, и не требует, чтобы вы сами компилировали Python.
(в качестве бонуса вы также можете использовать ActiveState в менеджер бинарных пакетов)
Я не нашел подходящего ответа, поэтому вот мой ответ, который основывается на ответе @toszter, но не использует system 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 в скрипте.
прежде всего, спасибо DTing за удивительный ответ. Это почти идеально.
для тех, кто страдает от отсутствия доступа GCC в общем хостинге, перейдите на 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. Enter
../../.localpython
просто замените выше как Шаг 1 в ответе DTing и перейдите к Шагу 2 после этого. Обратите внимание, что URL-адрес пакета ActivePython может измениться с новым выпуском. Вы всегда можете получить новый URL отсюда:http://www.activestate.com/activepython/downloads
на основе URL вам нужно изменить имя команды tar и cd на основе полученного файла.