¿Es posible instalar otra versión de Python en Virtualenv?

146

Tengo una cuenta compartida en un alojamiento web que tiene instalado Python 2.4, pero mi código no es compatible con 2.4. ¿Es posible instalar Python 2.6 directamente en Virtualenv?

Nota: no tengo permiso para instalarlo en el servidor compartido.

André
fuente

Respuestas:

253

Aquí están las opciones 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) Lo que desea hacer es instalar Python en un directorio que también pueda escribir.

Puedes seguir las instrucciones 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) Instalar 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) Crea un virtualenv usando tu 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) Activar el medio ambiente

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

5) Verificar

(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.
>>> 
DTing
fuente
14
brillante escrito! Sin embargo, dos comentarios: 1. No tuve que hacer make cleanantes de hacerlo, ./configure --prefix=/home/<user>/.localpythonde hecho, make cleandevolvió el error. 2. virtualenv name -p=/python/pathno funcionó, en cambio virtualenv name -p /python/pathfuncionó. Supongo que se debe a la versión virtualenv. ¡salud!
zzart
1
Fui expulsado de gcc pero pude usar ActiveState Python en su lugar en el paso 1: docs.activestate.com/activepython/2.7/…
Scott Stafford
3
Aquí hay una lista de módulos que necesita instalar (en Debian) para que esto funcione lo más cerca posible de una instalación completa:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu
1
Nitpick: sourcees un bashism. El equivalente POSIX es ..
l0b0
44
Me parece que faltan muchos módulos básicos
user299709
20

Prerrequisitos:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Instalación de virtualenv con Python2.6:

  1. Puede descargar, compilar e instalar manualmente otra versión de Python en /usr/localotra ubicación.

  2. Si es otra ubicación que no sea /usr/local, agréguela a su RUTA.

  3. Vuelva a cargar su shell para recoger la RUTA actualizada.

  4. A partir de este momento, debería poder llamar a los siguientes 2 binarios de Python desde su shell python2.5ypython2.6

  5. Cree una nueva instancia de virtualenv con python2.6:

    mkvirtualenv --python=python2.6 yournewenv

Thierry Lam
fuente
44
Creo que el comando mkvirtualenv solo funciona cuando tienes virtualenvwrapper instalado.
DTing
4

Este procedimiento instala Python2.7 en cualquier lugar y elimina cualquier referencia de ruta absoluta dentro de su envcarpeta (administrada por virtualenv) . Incluso virtualenv no está instalado absolutamente.

Por lo tanto, teóricamente, puede colocar el directorio de nivel superior en un tarball, distribuir y ejecutar cualquier cosa configurada dentro del tarball en una máquina que no tiene Python (o ninguna dependencia) instalada.

Contácteme si tiene preguntas. Esto es solo parte de un proyecto en curso y más grande que estoy diseñando. Ahora, para la caída ...

  1. Configurar carpetas de entorno.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Obtenga Python-2.7.3 y virtualenv sin ninguna forma de instalación del sistema operativo raíz.

    $ 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. Extraiga e instale Python-2.7.3 en el pyenvdirectorio. make cleanes opcional si está haciendo esto por segunda, tercera y 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. Crea tu virtualenv

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. Arregle el enlace simbólico a python2.7 dentro env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
  6. Repara los enlaces simbólicos de python restantes en env. Tendrá que eliminar los directorios vinculados simbólicamente y volver a crearlos, como se indicó anteriormente. Además, aquí está la sintaxis para forzar la creación de enlaces simbólicos en el lugar.

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

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

Aloha

azatar
fuente
1
Paso 4 necesita módulo pip parece. Probado con la última versión de Python 2.7.9.
Roman Susi
1
Intenté pasar por esto, una respuesta muy incompleta con muchos errores.
Alex R
4

Estoy usando virtualenvwrapper y no quiero modificar $ PATH, así es como:

$ which python3
/usr/local/bin/python3

$ mkvirtualenv --python=/usr/local/bin/python3 env_name
laike9m
fuente
3

El enfoque habitual es descargar la fuente y construir e instalar localmente (pero no directamente en virtualenv), y luego crear un nuevo virtualenv usando esa instalación local de Python. En algunos sistemas, es posible descargar e instalar un pitón precompilado, en lugar de construir desde la fuente.


fuente
3

Hoy en día, la forma más fácil de encontrar una versión más actualizada de Python es instalarlo a través de conda en un entorno conda.


Instale conda (puede necesitar un virtualenv para esto)

pip install conda

Instalar una nueva versión de Python dentro de un entorno conda

Estoy agregando esta respuesta aquí porque no se necesita descarga manual. condaHará eso por ti.

Ahora cree un entorno para la versión de Python que desee. En este ejemplo lo usaré 3.5.2, porque es la última versión en este momento de la escritura (agosto de 2016).

conda create -n py35 python=3.5.2

Creará un entorno para que conda instale paquetes


Para activar este entorno (supongo que Linux de lo contrario verifique los documentos de conda ):

source activate py35

Ahora instale lo que necesita a través de pip o conda en el entorno (conda tiene un mejor soporte de paquetes binarios).

conda install <package_name>
Bryce Guinta
fuente
2

Puedes usar pyenv.

Hay muchas versiones diferentes de anaconda, jython, pypy, etc.

https://github.com/yyuu/pyenv

Instalación tan simple como 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

...

Ezhik
fuente
1

Aunque la pregunta describe específicamente la instalación de 2.6, me gustaría agregar algunos puntos importantes a las excelentes respuestas anteriores en caso de que alguien se encuentre con esto. Para el registro, mi caso fue que estaba tratando de instalar 2.7 en una caja ubuntu 10.04.

Primero, mi motivación hacia los métodos descritos en todas las respuestas aquí es que instalar Python desde el ppa de deadsnake ha sido un fracaso total. Así que construir un Python local es el camino a seguir.

Después de haberlo intentado, pensé en confiar en la instalación predeterminada de pip (con sudo apt-get install pip ) sería adecuado. Esto lamentablemente está mal. Resultó que estaba recibiendo todo tipo de problemas desagradables y eventualmente no podía crear un virtualenv.

Por lo tanto, recomiendo instalar pip localmente con wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. Esta pregunta relacionada me dio esta pista.

Ahora, si esto no funciona, asegúrese de que esté instalado libssl-devUbuntu o openssl-devCentOS. Instálelos con apt-geto yumy luego vuelva a compilar Python (no es necesario eliminar nada si ya está instalado, hágalo en la parte superior). get-pipse queja de eso, puede verificarlo ejecutando import sslen un shell de py.

Por último, no olvides declarar .local/biny python local a la ruta, verifica con which pipy which python.

Wtower
fuente
1

Guía completa con pyenv

Si pyenv no está instalado, instálelo con pyenv-installer :

$ curl https://pyenv.run | bash

Para usar cualquier versión personalizada de Python, por ejemplo, 3.5.6use lo siguiente:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env
Daniil Mashkin
fuente
0

No, pero puede instalar una compilación de Python aislada (como ActivePython ) en su $HOMEdirectorio.

Este enfoque es el más rápido. y no requiere que compiles Python tú mismo.

(como beneficio adicional, también puede usar el administrador de paquetes binarios de ActiveState )

Sridhar Ratnakumar
fuente
Realmente falso ya que virtualenv puede instalar otra versión de Python.
Raito
0

No he encontrado una respuesta adecuada, así que aquí va mi opinión, que se basa en la respuesta @toszter, pero no utiliza el sistema Python (y puede que sepa, no siempre es una buena idea instalar setuptools y virtualenv a nivel del sistema cuando se trata con muchos Configuraciones de 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"

El truco para romper el problema del huevo de gallina aquí es hacer virtualenv sin las herramientas de configuración primero, porque de lo contrario falla (pip no se puede encontrar). Es posible instalar pip / wheel directamente, pero de alguna manera easy_install fue lo primero que se me ocurrió. Además, el script puede mejorarse factorizando versiones concretas.

NÓTESE BIEN. Usando xz en el script.

Roman Susi
fuente
0

En primer lugar, gracias DTing por una respuesta increíble. Es casi perfecto.

Para aquellos que sufren de no tener acceso a GCC en alojamiento compartido, ve a ActivePython en lugar de Python normal como Scott Stafford mencionó. Aquí están los comandos para eso.

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

Le preguntará la ruta al directorio de Python. Entrar

../../.localpython

Simplemente reemplace arriba como Paso 1 en la respuesta de DTing y continúe con el Paso 2 después de eso. Tenga en cuenta que la URL del paquete ActivePython puede cambiar con una nueva versión. Siempre puede obtener una nueva URL desde aquí: http://www.activestate.com/activepython/downloads

Según la URL, debe cambiar el nombre del comando tar y cd según el archivo recibido.

Dhrumil Bhankhar
fuente