È possibile installare un'altra versione di Python su Virtualenv?


146

Ho un account condiviso in un web hosting in cui è installato Python 2.4, ma il mio codice non è compatibile con 2.4. È possibile installare Python 2.6 direttamente su Virtualenv?

Nota: non ho i permessi per installarlo sul server condiviso.

Risposte:


253

Ecco le opzioni per 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) Quello che vuoi fare è installare Python in una directory che puoi scrivere anche tu.

Puoi seguire le istruzioni here.

Per 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) Installa 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 il tuo pitone locale
virtualenv docs

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

4) Attiva l'ambiente

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

5) Verifica

(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
brillante scrittura! due commenti però: 1. non ho dovuto fare make cleanprima di fare ./configure --prefix=/home/<user>/.localpythoneffettivamente make cleanrestituito errore. 2. virtualenv name -p=/python/pathnon ha funzionato invece virtualenv name -p /python/pathha funzionato. Presumo che sia fino alla versione virtualenv. Saluti!
zzart,

1
Ero jailshell'd di gcc ma sono stato in grado di utilizzare ActiveState Python invece nel passaggio 1: docs.activestate.com/activepython/2.7/…
Scott Stafford

3
Ecco un elenco di moduli che è necessario installare (su Debian) per farlo funzionare il più vicino possibile a un'installazione 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è un bashismo. L'equivalente POSIX è ..
l0b0

4
Trovo che manchi così tanti moduli di base
user299709,

20

Pre-requisiti:

  1. sudo easy_install virtualenv
  2. sudo pip install virtualenvwrapper

Installazione di virtualenv con Python2.6:

  1. È possibile scaricare, creare e installare manualmente un'altra versione di Python in /usr/localun'altra posizione.

  2. Se è un'altra posizione diversa da /usr/local, aggiungila al tuo PERCORSO.

  3. Ricarica la tua shell per raccogliere il PERCORSO aggiornato.

  4. Da questo punto in poi, dovresti essere in grado di chiamare i seguenti 2 binari python dalla tua shell python2.5epython2.6

  5. Crea una nuova istanza di virtualenv con python2.6:

    mkvirtualenv --python=python2.6 yournewenv


4
penso che il comando mkvirtualenv funzioni solo quando hai installato virtualenvwrapper.
DTing

4

Questa procedura installa Python2.7 ovunque ed elimina qualsiasi riferimento di percorso assoluto all'interno della tua envcartella (gestito da virtualenv) . Anche virtualenv non è installato assolutamente.

Pertanto, in teoria, è possibile rilasciare la directory di livello superiore in un tarball, distribuire ed eseguire qualsiasi cosa configurata all'interno del tarball su un computer su cui non è installato Python (o eventuali dipendenze) .

Contattatemi per qualsiasi domanda. Questo è solo parte di un progetto in corso, più ampio che sto progettando. Ora, per la goccia ...

  1. Configurare le cartelle di ambiente.

    $ mkdir env
    $ mkdir pyenv
    $ mkdir dep
  2. Ottieni Python-2.7.3 e virtualenv senza alcuna forma di installazione del sistema operativo root.

    $ 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. Estrarre e installare Python-2.7.3 nella directory pyenv. make cleanè facoltativo se lo stai facendo una seconda, terza, nona volta ...

    $ 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 il tuo virtualenv

    $ dep/virtualenv.py --python=/path/to/pyenv/bin/python --verbose env
  5. Correggi il link simbolico su python2.7 all'interno env/include/

    $ ls -l env/include/
    $ cd !$
    $ rm python2.7
    $ ln -s ../../pyenv/include/python2.7 python2.7
    $ cd ../../
  6. Correggi i restanti collegamenti simbolici di Python in env. Dovrai eliminare le directory simbolicamente collegate e ricrearle, come sopra. Inoltre, ecco la sintassi per forzare la creazione di collegamenti simbolici sul posto.

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

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

Aloha.


1
Sembra che il passaggio 4 abbia bisogno di un modulo pip. Provato con l'ultimo Python 2.7.9.
Roman Susi,

1
Ho provato ad affrontare questa, risposta molto incompleta con molti errori.
Alex R,

4

Sto usando virtualenvwrapper e non voglio modificare $ PATH, ecco come:

$ which python3
/usr/local/bin/python3

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

3

L'approccio usuale è scaricare il sorgente e compilare e installare localmente (ma non direttamente in virtualenv), quindi creare un nuovo virtualenv usando quell'installazione Python locale. Su alcuni sistemi, potrebbe essere possibile scaricare e installare un pitone precompilato, piuttosto che compilare dal sorgente.


3

Ora un giorno, il modo più semplice per trovare una versione più aggiornata di Python è installarlo tramite conda in un ambiente conda.


Installa conda (potrebbe essere necessario un virtualenv per questo)

pip install conda

Installazione di una nuova versione di Python in un ambiente conda

Sto aggiungendo questa risposta qui perché non è necessario il download manuale. condalo farà per te.

Ora crea un ambiente per la versione di Python che desideri. In questo esempio userò 3.5.2, perché è l'ultima versione in questo momento in cui scrivo (agosto 2016).

conda create -n py35 python=3.5.2

Creerà un ambiente per conda per installare i pacchetti


Per attivare questo ambiente ( suppongo che Linux verifichi altrimenti i documenti conda ):

source activate py35

Ora installa ciò di cui hai bisogno tramite pip o conda nell'ambiente (conda ha un migliore supporto per pacchetti binari).

conda install <package_name>

2

Puoi usare Pyenv.

Esistono molte versioni diverse di anaconda, jython, pypy e così via ...

https://github.com/yyuu/pyenv

Installazione semplice come 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

Sebbene la domanda descriva specificamente l'installazione 2.6, vorrei aggiungere alcuni punti importanti alle eccellenti risposte sopra nel caso qualcuno dovesse imbattersi in questo. Per la cronaca, il mio caso era che stavo provando a installare 2.7 su una scatola Ubuntu 10.04.

Innanzitutto, la mia motivazione nei confronti dei metodi descritti in tutte le risposte qui è che l'installazione di Python dal ppa di deadsnake è stata un fallimento totale. Quindi costruire un Python locale è la strada da percorrere.

Avendolo provato, ho pensato che fare affidamento sull'installazione predefinita di pip (con sudo apt-get install pip) sarebbe stata adeguata. Questo purtroppo è sbagliato. Si è scoperto che stavo ottenendo tutti i cortometraggi di problemi cattivi e alla fine non ero in grado di creare un virtualenv.

Pertanto, consiglio vivamente di installare pip localmente con wget https://raw.github.com/pypa/pip/master/contrib/get-pip.py && python get-pip.py --user. Questa domanda correlata mi ha dato questo suggerimento.

Ora se questo non funziona, assicurati che libssl-devper Ubuntu o openssl-devper CentOS sia installato. Installali con apt-geto yume poi ricostruisci Python (non è necessario rimuovere nulla se già installato, fallo in cima). get-pipsi lamenta di ciò, puoi verificarlo eseguendo import sslsu una shell PY.

Ultimo, non dimenticare di dichiarare .local/bine Python locale per il percorso, verificare con which pipe which python.


1

Guida completa con Pyenv

Se pyenv non è installato, installarlo con pyenv-installer :

$ curl https://pyenv.run | bash

Per utilizzare qualsiasi versione personalizzata di Python, ad esempio 3.5.6utilizzare quanto segue:

pyenv install 3.5.6
pyenv virtualenv 3.5.6 name_of_your_env
pyenv activate name_of_your_env

0

No, ma puoi installare una build Python isolata (come ActivePython ) nella tua $HOMEdirectory.

Questo approccio è il più veloce e non richiede di compilare Python da soli.

(come bonus, puoi anche usare il gestore di pacchetti binari di ActiveState )


In realtà falso come virtualenv è in grado di installare un'altra versione di Python.
Raito,

0

Non ho trovato la risposta adatta, quindi ecco la mia opinione, che si basa sulla risposta di @toszter, ma non utilizza il sistema Python (e potresti sapere, non è sempre una buona idea installare setuptools e virtualenv a livello di sistema quando si ha a che fare con molti Configurazioni 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"

Il trucco per rompere il problema dell'uovo di gallina qui è quello di rendere virtualenv senza setuptools prima, perché altrimenti fallisce (pip non può essere trovato). Potrebbe essere possibile installare pip / wheel direttamente, ma in qualche modo easy_install è stata la prima cosa che mi è venuta in mente. Inoltre, lo script può essere migliorato prendendo in considerazione versioni concrete.

NB. Usando xz nello script.


0

Prima di tutto, grazie DTing per la risposta fantastica. È praticamente perfetto.

Per coloro che soffrono di non avere accesso GCC nell'hosting condiviso, vai per ActivePython invece del normale pitone come ha menzionato Scott Stafford. Ecco i comandi per quello.

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

Ti chiederà il percorso della directory di Python. accedere

../../.localpython

Basta sostituire sopra come passaggio 1 nella risposta di DTing e proseguire con il passaggio 2. Si noti che l'URL del pacchetto ActivePython potrebbe cambiare con la nuova versione. Puoi sempre ottenere un nuovo URL da qui: http://www.activestate.com/activepython/downloads

In base all'URL è necessario modificare il nome del comando tar e cd in base al file ricevuto.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.