web-dev-qa-db-fra.com

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

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 dans Virtualenv? 

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

139
André

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 aussi é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) Installer 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éer 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) Activer 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.
>>> 
244
DTing

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, construire et installer manuellement une autre version de Python dans /usr/local ou à 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.5 et python2.6
  5. Créez une nouvelle instance de virtualenv avec python2.6

    mkvirtualenv --python=python2.6 yournewenv

20
Thierry Lam

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
4
laike9m

Cette procédure installe Python2.7 n'importe où et élimine toutes les références de chemin absolues dans votre dossier env(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, distribuer et exécuter tout ce qui est configuré dans l'archive sur une machine sur laquelle Python (ou aucune dépendance)} n'est installé.

Contactez-moi pour toutes questions. Cela fait simplement partie d'un projet plus vaste et en cours que je suis en train de concevoir. Maintenant, pour la baisse ...

  1. Configurez les dossiers d'environnement.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
    
  2. Obtenez Python-2.7.3 et virtualenv sans toute 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 répertoire pyenv. make clean est facultatif si vous faites cela une 2e, 3e, niè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. En outre, voici la syntaxe pour forcer la création de liens symboliques 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.

4
azatar

L'approche habituelle consiste à télécharger le code source, à construire et à installer localement (mais pas directement dans virtualenv), puis à créer un nouveau 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é-construit, plutôt que de le construire à partir du source. 

3
user227667

Vous pouvez utiliser pyenv.

Il existe de nombreuses versions différentes: anaconda, jython, pypy, etc.

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

...

2
Ezhik

Aujourd'hui, la meilleure façon de disposer d'une version plus récente de Python consiste à 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

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

Créez maintenant un environnement pour la version Python souhaitée. Dans cet exemple, je vais utiliser 3.5.2, car c'est la dernière version en date de rédaction (août 2016).

conda create -n py35 python=3.5.2

Crée un environnement permettant à Conda d'installer des packages


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

source activate py35

Maintenant, installez ce dont vous avez besoin via pip ou conda dans l’environnement (conda supporte mieux les paquets binaires).

conda install <package_name>
2
Bryce Guinta

Bien que la question décrive 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 tomberait dessus. 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 pour les méthodes décrites dans toutes les réponses ici est que l’installation de Python à partir de ppa de deadsnake a été un échec total. Donc, construire un Python local est la voie à suivre. 

Ayant essayé de le faire, je pensais que le recours à l'installation par défaut de pip (avec Sudo apt-get install pip) serait adéquat. C'est malheureusement faux. Il s’est avéré que j’étais sous le feu des critiques et que je ne pouvais pas créer un environnement virtuel. 

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

Maintenant, si cela ne fonctionne pas, assurez-vous que libssl-dev pour Ubuntu ou openssl-dev pour CentOS est installé. Installez-les avec apt-get ou yum, puis reconstruisez Python (nul besoin de supprimer quoi que ce soit s'il est déjà installé, faites-le en haut). get-pip s'en plaint, vous pouvez le vérifier en exécutant import ssl sur un shell py.

Enfin, n'oubliez pas de déclarer .local/bin et le python local dans path, vérifiez avec which pip et which python.

1
Wtower

Non, mais vous pouvez installer une construction Python isolée (telle que ActivePython ) dans votre répertoire $HOME.

Cette approche est la plus rapide et ne vous oblige pas à vous compiler Python.

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

0
Sridhar Ratnakumar

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

Le truc pour résoudre le problème poulet-œuf est de créer virtualenv sans setuptools d’abord, car il échouera sinon (pip ne peut pas être trouvé). Il est peut-être possible d’installer directement pip/wheel, mais d’une manière ou d’une autre, easy_install a été la première chose à laquelle je pensais. En outre, le script peut être amélioré en intégrant des versions concrètes.

NB Utiliser xz dans le script.

0
Roman Susi

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

Pour ceux qui ne disposent pas d'accès GCC dans l'hébergement partagé, optez pour ActivePython au lieu du python normal, comme l'a mentionné Scott Stafford. 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 d'accès au répertoire python. Entrer

../../.localpython

Remplacez simplement l'étape 1 de la réponse de DTing ci-dessus et passez à l'étape 2 suivante. 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.

0
Dhrumil Bhankhar