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


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.

Author: Frankline, 2011-04-01

11 answers

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 quieres hacer es instalar python en un directorio que también puedas escribir.

Usted puede 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) Crear un virtualenv usando su local python
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 entorno

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

5) Comprobar

(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.
>>> 
 241
Author: DTing,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:02:51

Requisitos previos:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Instalando virtualenv con Python2. 6:

  1. Puede descargar, compilar e instalar manualmente otra versión de Python en /usr/local u otra ubicación.
  2. Si es otra ubicación que no sea /usr/local, agrégala a tu RUTA.
  3. Recargue su shell para recoger la RUTA actualizada.
  4. A partir de este punto, debería poder llamar a los siguientes 2 binarios de python desde su shell python2.5 y python2.6
  5. Crea una nueva instancia de virtualenv con python2.6:

    mkvirtualenv --python=python2.6 yournewenv

 20
Author: Thierry Lam,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 21:11:52

Este procedimiento instala Python2.7 en cualquier lugar y elimina cualquier referencia de ruta absoluta dentro de su carpeta env (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 tenga instalado Python (o cualquier dependencia).

Póngase en contacto conmigo con cualquier pregunta. Esto es solo es parte de un proyecto en curso, más grande que estoy diseñando. Ahora, para la entrega...

  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. Extrae e instala Python-2.7.3 en el directorio pyenv. make clean es opcional si está haciendo esto una 2da, 3ra, 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. Fix el enlace simbólico a python2. 7 dentro de env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
    
  6. Se corrigen los enlaces simbólicos de python restantes en env. Tendrás que borrar los directorios simbólicamente enlazados y volver a crearlos, como arriba. 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.

 4
Author: toszter,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-27 05:04:27

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

$ which python3
/usr/local/bin/python3

$ mkvirtualenv --python=/usr/local/bin/python3 env_name
 4
Author: laike9m,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-03-24 03:06:22

El enfoque habitual es descargar el código fuente y compilar e instalar localmente (pero no directamente en virtualenv), y luego crear un nuevo virtualenv usando esa instalación local de Python. En algunos sistemas, puede ser posible descargar e instalar un python precompilado, en lugar de compilar desde el código fuente.

 3
Author: ,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 20:55:26

Puede usar pyenv.

Hay un montón de diferentes versiones anaconda, jython, pypy y así sucesivamente...

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

...

 2
Author: Ezhik,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-12 11:44:19

Ahora, la forma más fácil que he encontrado para tener una versión más actualizada de Python es instalarlo a través de conda en un entorno conda.


Instale conda (puede que necesite un virtualenv para esto)

pip install conda

Instalando una nueva versión de Python dentro de un conda environent

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

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

conda create -n py35 python=3.5.2

Creará un entorno para que conda instale paquetes


Para activar este entorno (asumo que linux de lo contrario comprueba los documentos de conda):

source activate py35

Ahora instale lo que necesita ya sea a través de pip o conda en el environemnt(conda tiene mejor soporte para paquetes binarios).

conda install <package_name>
 2
Author: Bryce Guinta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-04 17:52:09

Aunque la pregunta describe específicamente la instalación 2.6, me gustaría agregar algunos puntos importantes a las excelentes respuestas anteriores en caso de que alguien se encuentre con esto. Para que conste, 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 los 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é que confiar en la instalación predeterminada de pip (con sudo apt-get install pip) sería adecuado. Lamentablemente, esto está mal. Resultó que estaba recibiendo todos los cortos de temas desagradables y, finalmente, no ser capaz de crear un virtualenv.

Por lo tanto, recomiendo encarecidamente instalar pip localmente por 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 bien, si esto no funciona, asegúrese de que libssl-dev para Ubuntu o openssl-dev para CentOS está instalado. Instálelos con apt-get o yum y luego vuelva a compilar Python (no es necesario eliminar nada si ya está instalado, hágalo en la parte superior). get-pip se queja de eso, puede comprobarlo ejecutando import ssl en un shell py.

Por último, no olvide declarar .local/bin y python local a path, verifique con which pip y which python.

 1
Author: Wtower,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 12:34:39

No, pero puede instalar una compilación aislada de Python (como ActivePython) bajo su directorio $HOME.

Este enfoque es el más rápido, y no requiere que compile Python usted mismo.

(como bono, también puedes usar el gestor de paquetes binarios de ActiveState)

 0
Author: Sridhar Ratnakumar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-03-31 22:28:44

No he encontrado una respuesta adecuada, así que aquí va mi opinión, que se basa en @toszter answer, pero no usa system Python (y puede que sepas que no siempre es buena idea instalar setuptools y virtualenv a nivel del sistema cuando se trata de muchas 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 de romper el problema del huevo de gallina aquí es hacer virtualenv sin setuptools primero, porque de lo contrario falla (pip no se puede encontrar). Puede ser posible instalar pip / rueda directamente, pero de alguna manera easy_install fue lo primero que me vino a la mente. Además, el script se puede mejorar factorizando versiones concretas.

NB. Usando xz en el script.

 0
Author: Roman Susi,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-05-05 08:42:54

En primer lugar, gracias DTing por la respuesta impresionante. Es casi perfecto.

Para aquellos que están sufriendo de no tener acceso GCC en alojamiento compartido, Vaya a ActivePython en lugar de python normal como Scott Stafford mencionó. Aquí están las órdenes 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

Te preguntará la ruta al directorio python. Enter

../../.localpython

Simplemente reemplace lo anterior como el 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 nuevo lanzamiento. Siempre puede obtener una nueva URL desde aquí: http://www.activestate.com/activepython/downloads

Basado en la URL, debe cambiar el nombre del comando tar y cd basado en el archivo recibido.

 0
Author: Dhrumil Bhankhar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-03-24 12:40:08