Est-il possible d'installer une autre version de Python sur Virtualenv?


146

J'ai un compte partagé dans un hébergement Web sur lequel Python 2.4 est installé, mais mon code n'est pas compatible avec 2.4. Est-il possible d'installer Python 2.6 directement sur Virtualenv?

Remarque: je n'ai pas l'autorisation de l'installer sur le serveur partagé.

Réponses:


253

Voici les options pour 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) Ce que vous voulez faire, c'est installer python dans un répertoire que vous pouvez également écrire.

Vous pouvez suivre les instructions here.

Pour 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) Installez 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) Créez un virtualenv en utilisant votre 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) Activez l'environnement

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

5) Vérifier

(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
écriture brillante! deux commentaires cependant: 1. Je n'ai pas eu à faire make cleanavant de faire ./configure --prefix=/home/<user>/.localpythonen fait make cleanrenvoyé une erreur. 2. virtualenv name -p=/python/pathn'a pas fonctionné à la place virtualenv name -p /python/patha fonctionné. Je suppose que c'est à la version virtualenv. à votre santé!
zzart

1
J'ai été jailshell'd hors de gcc mais j'ai pu utiliser ActiveState Python à la place à l'étape 1: docs.activestate.com/activepython/2.7
Scott Stafford

3
Voici une liste des modules que vous devez installer (sur Debian) pour que cela fonctionne aussi près que possible d'une installation complète:curl gcc build-essential libncursesw5-dev libreadline5-dev libssl-dev libgdm-dev libbz2-dev libc6-dev libsqlite3-dev tk-dev
Claudiu

1
Nitpick: sourceest un bashisme. L'équivalent POSIX est ..
l0b0

4
Je trouve que faire ce lot de modules de base manquent
user299709

20

Conditions préalables:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Installation de virtualenv avec Python2.6:

  1. Vous pouvez télécharger, créer et installer manuellement une autre version de Python /usr/localou un autre emplacement.

  2. S'il s'agit d'un autre emplacement que /usr/local, ajoutez-le à votre PATH.

  3. Rechargez votre shell pour récupérer le PATH mis à jour.

  4. À partir de ce moment, vous devriez pouvoir appeler les 2 binaires python suivants à partir de votre shell python2.5etpython2.6

  5. Créez une nouvelle instance de virtualenv avec python2.6:

    mkvirtualenv --python=python2.6 yournewenv


4
Je pense que la commande mkvirtualenv ne fonctionne que lorsque virtualenvwrapper est installé.
DTing

4

Cette procédure installe Python2.7 n'importe où et élimine toute référence de chemin absolu dans votre envdossier (géré par virtualenv) . Même virtualenv n'est pas installé absolument.

Ainsi, théoriquement, vous pouvez déposer le répertoire de niveau supérieur dans une archive tar, distribuer et exécuter tout ce qui est configuré dans l'archive tar sur une machine sur laquelle Python (ou aucune dépendance) n'est installé.

Contactez-moi pour toutes questions. C'est juste une partie d'un projet en cours et plus vaste que je suis en train de concevoir. Maintenant, pour la goutte ...

  1. Configurez les dossiers d'environnement.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Obtenez Python-2.7.3 et virtualenv sans aucune forme d'installation de système d'exploitation racine.

    $ 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. Extrayez et installez Python-2.7.3 dans le pyenvrépertoire. make cleanest facultatif si vous faites cela une 2ème, 3ème, Nème fois ...

    $ 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. Créez votre virtualenv

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. Correction du lien symbolique vers python2.7 dans env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
  6. Corrigez les liens symboliques python restants dans env. Vous devrez supprimer les répertoires liés symboliquement et les recréer, comme ci-dessus. Aussi, voici la syntaxe pour forcer la création de lien symbolique sur place.

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

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

Aloha.


1
Il semble que l'étape 4 nécessite un module pip. Essayé avec le dernier Python 2.7.9.
Roman Susi

1
J'ai essayé de passer par là, réponse très incomplète avec beaucoup d'erreurs.
Alex R

4

J'utilise virtualenvwrapper et je ne veux pas modifier $ PATH, voici comment:

$ which python3
/usr/local/bin/python3

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

3

L'approche habituelle consiste à télécharger la source, à construire et à installer localement (mais pas directement dans virtualenv), puis à créer une nouvelle virtualenv à l'aide de cette installation Python locale. Sur certains systèmes, il peut être possible de télécharger et d'installer un python prédéfini, plutôt que de construire à partir des sources.


3

Aujourd'hui, le moyen le plus simple que j'ai trouvé pour avoir une version plus mise à jour de Python est de l'installer via conda dans un environnement conda.


Installez conda (vous aurez peut-être besoin d'un virtualenv pour cela)

pip install conda

Installer une nouvelle version de Python dans un environnement conda

J'ajoute cette réponse ici car aucun téléchargement manuel n'est nécessaire. condafera cela pour vous.

Créez maintenant un environnement pour la version Python souhaitée. Dans cet exemple, je vais utiliser 3.5.2, car il s'agit de la dernière version à l'heure actuelle (août 2016).

conda create -n py35 python=3.5.2

Créera un environnement pour que conda installe des packages


Pour activer cet environnement (je suppose que linux sinon, vérifiez les documents conda ):

source activate py35

Maintenant, installez ce dont vous avez besoin via pip ou conda dans l'environnement (conda a un meilleur support de paquet binaire).

conda install <package_name>

2

Vous pouvez utiliser pyenv.

Il existe de nombreuses versions différentes: anaconda, jython, pypy et ainsi de suite ...

https://github.com/yyuu/pyenv

Installation aussi simple que 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

Bien que la question décrit spécifiquement l'installation de la version 2.6, je voudrais ajouter quelques points importants aux excellentes réponses ci-dessus au cas où quelqu'un rencontrerait cela. Pour mémoire, mon cas était que j'essayais d'installer 2.7 sur une boîte ubuntu 10.04.

Tout d'abord, ma motivation envers les méthodes décrites dans toutes les réponses ici est que l'installation de Python à partir des ppa de deadsnake a été un échec total. Donc, construire un Python local est la voie à suivre.

Après avoir essayé, j'ai pensé que se fier à l'installation par défaut de pip (with sudo apt-get install pip) serait suffisant. C'est malheureusement faux. Il s'est avéré que je recevais tous les courts métrages de problèmes désagréables et que finalement je ne pouvais pas créer une virtualenv.

Par conséquent, je recommande fortement d' installer pip localement avec wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. Cette question connexe m'a donné cet indice.

Maintenant, si cela ne fonctionne pas, assurez-vous que libssl-devpour Ubuntu ou openssl-devpour CentOS est installé. Installez-les avec apt-getou yumpuis recréez Python (pas besoin de supprimer quoi que ce soit s'il est déjà installé, faites-le en haut). get-pipse plaint de cela, vous pouvez le vérifier en exécutant import sslsur un shell py.

Enfin, n'oubliez pas de déclarer .local/binet local python à path, vérifiez avec which pipet which python.


1

Guide complet avec pyenv

Si pyenv n'est pas installé, installez-le avec pyenv-installer :

$ curl https://pyenv.run | bash

Pour utiliser n'importe quelle version de Python personnalisée, 3.5.6utilisez par exemple ce qui suit:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env

0

Non, mais vous pouvez installer une version Python isolée (telle qu'ActivePython ) dans votre $HOMErépertoire.

Cette approche est la plus rapide et ne vous oblige pas à compiler vous-même Python.

(en prime, vous pouvez également utiliser le gestionnaire de paquets binaires d'ActiveState )


En fait, faux car virtualenv est capable d'installer une autre version de Python.
Raito

0

Je n'ai pas trouvé de réponse appropriée, voici donc mon point de vue, qui s'appuie sur la réponse @toszter, mais n'utilise pas le système Python (et vous le savez peut-être, ce n'est pas toujours une bonne idée d'installer setuptools et virtualenv au niveau du système lorsqu'il s'agit de nombreux Configurations 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"

L'astuce pour résoudre le problème de l'oeuf de poule ici est de créer d'abord virtualenv sans setuptools, car sinon, il échoue (pip ne peut pas être trouvé). Il est peut-être possible d'installer pip / wheel directement, mais en quelque sorte, easy_install a été la première chose qui m'est venue à l'esprit. En outre, le script peut être amélioré en factorisant des versions concrètes.

NB. Utilisation de xz dans le script.


0

Tout d'abord, merci DTing pour la réponse géniale. C'est à peu près parfait.

Pour ceux qui souffrent de ne pas avoir accès à GCC dans l'hébergement partagé, optez pour ActivePython au lieu de python normal comme Scott Stafford l'a mentionné. Voici les commandes pour cela.

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

Il vous demandera le chemin vers le répertoire python. Entrer

../../.localpython

Remplacez simplement ci-dessus par l'étape 1 dans la réponse de DTing et passez à l'étape 2 après cela. Veuillez noter que l'URL du package ActivePython peut changer avec la nouvelle version. Vous pouvez toujours obtenir une nouvelle URL à partir d'ici: http://www.activestate.com/activepython/downloads

En fonction de l'URL, vous devez modifier le nom de la commande tar et cd en fonction du fichier reçu.

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.