É possível instalar outra versão do Python no Virtualenv?


146

Eu tenho uma conta compartilhada em uma hospedagem na Web com o Python 2.4 instalado, mas meu código não é compatível com o 2.4. É possível instalar o Python 2.6 diretamente no Virtualenv?

Nota: Não tenho permissão para instalá-lo no servidor compartilhado.

Respostas:


253

Aqui estão as opções para 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) O que você quer fazer é instalar o python em um diretório que você também possa escrever.

Você pode seguir as instruções here.

Para 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) Instale o 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) Crie um virtualenv usando seu python local
virtualenv docs

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

4) Ative o ambiente

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

5) Cheque

(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
redação brilhante! dois comentários que: 1. Eu não tinha que fazer make cleanantes de fazer ./configure --prefix=/home/<user>/.localpythonde fato make cleanretornou erro. 2. virtualenv name -p=/python/pathnão funcionou em vez disso virtualenv name -p /python/pathfuncionou. Presumo que seja a versão virtualenv. Felicidades!
Zzart 26/03/12

1
Eu estava jailshell'd fora do gcc, mas foi capaz de usar ActiveState Python vez na etapa 1: docs.activestate.com/activepython/2.7/...
Scott Stafford

3
Aqui está uma lista dos módulos que você precisa instalar (no debian) para que isso funcione o mais próximo possível da instalação completa:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu

1
Nitpick: sourceé um basismo. O equivalente POSIX é ..
L0b0

4
Eu acho que fazendo isso monte de módulos básicos estão faltando
user299709

20

Pré-requisitos:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Instalando o virtualenv com Python2.6:

  1. Você pode baixar, criar e instalar manualmente outra versão do Python em /usr/localou em outro local.

  2. Se for outro local que não seja /usr/local, adicione-o ao seu PATH.

  3. Recarregue seu shell para pegar o PATH atualizado.

  4. A partir deste ponto, você poderá chamar os 2 binários python a seguir no seu shell python2.5epython2.6

  5. Crie uma nova instância do virtualenv com python2.6:

    mkvirtualenv --python=python2.6 yournewenv


4
Eu acho que o comando mkvirtualenv só funciona quando você tem o virtualenvwrapper instalado.
DTing

4

Este procedimento instala o Python2.7 em qualquer lugar e elimina todas as referências de caminho absolutas na sua envpasta (gerenciadas pelo virtualenv) . Mesmo o virtualenv não está instalado absolutamente.

Assim, teoricamente, você pode soltar o diretório de nível superior em um tarball, distribuir e executar qualquer coisa configurada dentro do tarball em uma máquina que não possui o Python (ou nenhuma dependência) instalado.

Entre em contato comigo com qualquer dúvida. Isso é apenas parte de um projeto maior e em andamento que estou criando. Agora, para a queda ...

  1. Configure pastas do ambiente.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Obtenha o Python-2.7.3 e o virtualenv sem qualquer forma de instalação do SO raiz.

    $ 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. Extraia e instale o Python-2.7.3 no pyenvdiretório make cleané opcional se você estiver fazendo isso uma segunda, terceira e enésima vez ...

    $ 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. Crie seu virtualenv

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. Corrija o link simbólico para python2.7 dentro env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
  6. Corrija os links simbólicos restantes do python no env. Você precisará excluir os diretórios simbolicamente vinculados e recriá-los, como acima. Além disso, aqui está a sintaxe para forçar a criação de links simbólicos no local.

    $ 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. Teste

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

Aloha.


1
Etapa 4 precisa do módulo pip parece. Tentei com o mais recente Python 2.7.9.
Roman Susi 5/05

1
Tentei passar por isso, resposta muito incompleta com muitos erros.
Alex R

4

Estou usando o virtualenvwrapper e não quero modificar o $ PATH, veja como:

$ which python3
/usr/local/bin/python3

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

3

A abordagem usual é baixar o código-fonte, construir e instalar localmente (mas não diretamente no virtualenv) e, em seguida, criar um novo virtualenv usando essa instalação local do Python. Em alguns sistemas, pode ser possível baixar e instalar um python pré-construído, em vez de criar a partir do código-fonte.


3

Hoje em dia, a maneira mais fácil de encontrar uma versão mais atualizada do Python é instalá-lo via conda em um ambiente conda.


Instale o conda (você pode precisar de um virtualenv para isso)

pip install conda

Instalando uma nova versão do Python dentro de um ambiente conda

Estou adicionando esta resposta aqui porque nenhum download manual é necessário. condafará isso por você.

Agora crie um ambiente para a versão Python desejada. Neste exemplo, usarei 3.5.2, porque é a versão mais recente no momento da redação (agosto de 2016).

conda create -n py35 python=3.5.2

Criará um ambiente para o conda instalar pacotes


Para ativar esse ambiente (estou assumindo que o linux verifique os documentos da conda ):

source activate py35

Agora instale o que você precisa via pip ou conda no ambiente (o conda possui melhor suporte ao pacote binário).

conda install <package_name>

2

Você pode usar pyenv.

Existem muitas versões diferentes anaconda, jython, pypy e assim por diante ...

https://github.com/yyuu/pyenv

Instalação tão simples quanto 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

Embora a pergunta descreva especificamente a instalação do 2.6, eu gostaria de adicionar alguns pontos importantes às excelentes respostas acima, caso alguém se depare com isso. Para constar, meu caso foi que eu estava tentando instalar o 2.7 em uma caixa do ubuntu 10.04.

Primeiro, minha motivação para os métodos descritos em todas as respostas aqui é que a instalação do Python a partir do ppa do deadsnake foi uma falha total. Portanto, construir um Python local é o caminho a percorrer.

Tendo tentado isso, pensei que confiar na instalação padrão do pip (with sudo apt-get install pip) seria adequado. Infelizmente isso está errado. Aconteceu que eu estava recebendo todos os curtos problemas sórdidos e, eventualmente, não conseguia criar um virtualenv.

Portanto, eu recomendo instalar o pip localmente com wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. Essa questão relacionada me deu essa dica.

Agora, se isso não funcionar, verifique se o libssl-devUbuntu ou o openssl-devCentOS está instalado. Instale-os com apt-getou yume, em seguida, recrie o Python (não é necessário remover nada, se já estiver instalado, faça-o na parte superior). get-pipse queixa disso, você pode verificá-lo executando import sslem um shell py.

Por fim, não se esqueça de declarar .local/bino python local e o caminho, verifique com which pipe which python.


1

Guia completo com pyenv

Se o pyenv não estiver instalado, instale-o com o pyenv-installer :

$ curl https://pyenv.run | bash

Para usar qualquer versão python personalizada, por exemplo, 3.5.6use o seguinte:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env

0

Não, mas você pode instalar uma compilação Python isolada (como ActivePython ) no seu $HOMEdiretório.

Essa abordagem é a mais rápida e não exige que você compile o Python por conta própria.

(como bônus, você também pode usar o gerenciador de pacotes binários do ActiveState )


Na verdade, é falso, pois o virtualenv pode instalar outra versão do Python.
Raito

0

Eu não encontrei uma resposta adequada, então aqui está minha opinião, que se baseia na resposta do @toszter, mas não usa o Python do sistema (e você deve saber, nem sempre é uma boa ideia instalar o setuptools e o virtualenv no nível do sistema ao lidar com muitos Configurações do 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"

O truque para resolver o problema do ovo de galinha aqui é tornar o virtualenv sem o setuptools primeiro, porque, caso contrário, falha (o pip não pode ser encontrado). Pode ser possível instalar o pip / wheel diretamente, mas de alguma forma o easy_install foi a primeira coisa que me veio à mente. Além disso, o script pode ser aprimorado considerando as versões concretas.

NB. Usando xz no script.


0

Primeiro de tudo, obrigado DTing pela resposta incrível. É praticamente perfeito.

Para aqueles que sofrem de não ter acesso ao GCC em hospedagem compartilhada, vá para o ActivePython, em vez do python normal, como Scott Stafford mencionou. Aqui estão os comandos para isso.

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

Ele solicitará o caminho do diretório python. Entrar

../../.localpython

Apenas substitua acima como Etapa 1 na resposta da DTing e prossiga com a Etapa 2 depois disso. Observe que o URL do pacote ActivePython pode mudar com a nova versão. Você sempre pode obter um novo URL aqui: http://www.activestate.com/activepython/downloads

Com base na URL, você precisa alterar o nome do comando tar e cd com base no arquivo recebido.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.