Più versioni di Python sulla stessa macchina?


89

Esiste una documentazione ufficiale sul sito Web di Python da qualche parte su come installare ed eseguire più versioni di Python sulla stessa macchina su Linux?

Posso trovare miliardi di post e risposte sul blog, ma voglio sapere se esiste un modo ufficiale "standard" per farlo?

O tutto questo dipende dal sistema operativo?

Risposte:


79

Penso che sia totalmente indipendente. Basta installare, quindi si ha la comandi esempio /usr/bin/python2.5e /usr/bin/python2.6. Collega /usr/bin/pythona quello che desideri utilizzare come predefinito.

Tutte le librerie sono comunque in cartelle separate (che prendono il nome dalla versione).

Se vuoi compilare le versioni manualmente, questo è dal file readme del codice sorgente Python:

Installazione di più versioni

Su sistemi Unix e Mac se intendi installare più versioni di Python utilizzando lo stesso prefisso di installazione (argomento --prefix dello script di configurazione) devi fare attenzione che il tuo eseguibile Python primario non venga sovrascritto dall'installazione di una versione diversa. Tutti i file e le directory installati utilizzando "make altinstall" contengono la versione principale e quella secondaria e possono quindi vivere fianco a fianco. "make install" crea anche $ {prefix} / bin / python3 che fa riferimento a $ {prefix} /bin/pythonX.Y. Se intendi installare più versioni utilizzando lo stesso prefisso, devi decidere quale versione (se presente) è la tua versione "primaria". Installa quella versione usando "make install". Installa tutte le altre versioni usando "make altinstall".

Ad esempio, se vuoi installare Python 2.5, 2.6 e 3.0 con 2.6 come versione principale, devi eseguire "make install" nella directory di build 2.6 e "make altinstall" negli altri.


5
Grazie, "make install" su primario e "make altinstall" su secondario lo hanno reso chiaro.
Andriy Drozdyuk il

4
Qualche modo corretto per condividere le librerie tra le versioni? Diciamo che ho MySQLdb per 2.6, quindi installato 2.7. come posso rendere disponibile MySQLdb anche per 2.7?
romeroqj

Tutte le informazioni fornite sono per Unix / Linux e Mac OS, quindi chiaramente non "totalmente indipendenti" dal sistema operativo, come chiede l'OP. Per Windows il processo è abbastanza diverso ma ugualmente facile.
wwwayne

28

Su Windows vengono installati in cartelle separate, "C: \ python26" e "C: \ python31", ma gli eseguibili hanno lo stesso nome "python.exe".

Ho creato un'altra cartella "C: \ python" che contiene "python.bat" e "python3.bat" che fungono da wrapper rispettivamente per "python26" e "python31" e ho aggiunto "C: \ python" alla PATHvariabile d'ambiente.

Questo mi permette di digitare pythono python3nei miei wrapper Python .bat per avviare quello che desidero.

Su Linux, puoi usare il #!trucco per specificare quale versione vuoi che uno script utilizzi.


Cosa aggiungere a quei file .bat?
Aidis

Non voterò questa risposta solo perché è molto specifica per Windows e la domanda era relativa a Linux, altrimenti ottime informazioni.
Jim Aho,

2
L'utente non esiste più, volevo davvero quel file batch
Wargog

6
Questo è ciò che metto nel mio file python.bat (solo una riga): "c: \ python27 \ python% *" Quindi lo invoco normalmente, cioè 'python test.py' e% * prenderà tutti gli argomenti e passarlo all'eseguibile effettivo. Puoi anche usare mklink direttamente nella cartella C: \ bin. Vedi qui per i dettagli: stackoverflow.com/a/13953614/865929
Sean Glover,

1
Ora puoi semplicemente eseguire py -3.4o py -2.7e il programma py(sotto C:\Windows) sceglierà quell'interprete Python (supponendo che sia installato).
JamesThomasMoon1979,

14

Aggiornamento 2019: utilizzo di asdf

In questi giorni suggerisco di utilizzare asdf per installare varie versioni di interpreti Python una accanto all'altra.

Nota 1: asdffunziona non solo per Python ma per tutti i principali linguaggi.

Nota 2: asdffunziona bene in combinazione con popolari gestori di pacchetti come pipenv e poetry .

Se hai installato asdf puoi facilmente scaricare / installare nuovi interpreti Python:

# Install Python plugin for asdf:
asdf plugin-add python

# List all available Python interpreters:
asdf list-all python

# Install the Python interpreters that you need:
asdf install python 3.7.4
asdf install python 3.6.9
# etc...

# If you want to define the global version:
asdf global python 3.7.4

# If you want to define the local (project) version:
# (this creates a file .tool-versions in the current directory.)
asdf local python 3.7.4

Vecchia risposta: installa Python dalla sorgente

Se è necessario installare più versioni di Python (accanto a quella principale) su Ubuntu / Mint : (dovrebbe funzionare in modo simile su altri Unix).

1) Installa i pacchetti richiesti per la compilazione dei sorgenti

$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

2) Scarica ed estrai la versione Python desiderata

Scarica Python Source per Linux come tarball e spostalo in /usr/src.

Estrai il pacchetto scaricato in posizione. (sostituisci le 'x con la tua versione scaricata)

$ sudo tar xzf Python-x.x.x.tgz

3) Compila e installa Python Source

$ cd Python-x.x.x
$ sudo ./configure
$ sudo make altinstall

Il tuo nuovo bin Python si trova ora in /usr/local/bin. Puoi provare la nuova versione:

$ pythonX.X -V
Python x.x.x
$ which pythonX.X
/usr/local/bin/pythonX.X

# Pip is now available for this version as well:
$ pipX.X -V
pip X.X.X from /usr/local/lib/pythonX.X/site-packages (python X.X)

6

Come installare diverse versioni di Python dipende infatti dal sistema operativo.

Tuttavia, se sei su Linux, puoi utilizzare uno strumento come pythonbrew o pythonz per aiutarti a gestire e passare facilmente da una versione all'altra.


Ho installato su un Mac con configure / make altinstall. Nessun problema finora.
Evgeny

È possibile dare $user1un'altra versione di Python rispetto a quella predefinita?
Roland

1
@Roland pyenvlavorerà per questo. Dal readme nel collegamento pubblicato sopra:> [Consente] di modificare la versione globale di Python per utente.
theeddieh

5

Sto usando Mac e il modo migliore che ha funzionato per me è usare pyenv!

I comandi seguenti sono per Mac ma abbastanza simili a Linux (vedi i link sotto)

#Install pyenv
brew update
brew install pyenv

Supponiamo che tu abbia Python 3.6 come versione principale sul tuo Mac:

python --version 

Produzione:

Python <your current version>

Ora installa python 3.7, prima elenca tutto

pyenv install -l

Prendiamo 3.7.3:

pyenv install 3.7.3

Assicurati di eseguirlo nel Terminale (aggiungilo a ~ / .bashrc o ~ / .zshrc):

export PATH="/Users/username/.pyenv:$PATH"
eval "$(pyenv init -)"

Ora eseguiamolo solo sul terminale / shell aperto :

pyenv shell 3.7.3

Adesso corri

python --version

Produzione:

Python 3.7.3

E non meno importante disinserirlo nella shell aperta / iTerm:

pyenv shell --unset

È possibile eseguire a livello globale o locale , nonché


1

Gestori di pacchetti - a livello di utente

Per un gestore di pacchetti in grado di installare e gestire più versioni di python, queste sono buone scelte:

  • pyenv : solo in grado di installare e gestire versioni di python
  • asdf - in grado di installare e gestire molte lingue diverse

Il vantaggio di questi gestori di pacchetti è che potrebbe essere più facile configurarli e installare più versioni di python con loro piuttosto che installare python dal sorgente. Forniscono anche comandi per modificare facilmente le versioni di python disponibili utilizzando shim e impostando la versione di python per directory.

Questo svantaggio è che, per impostazione predefinita, sono installati a livello di utente (all'interno della tua directory home) e richiedono un po 'di configurazione a livello di utente: dovrai modificare i tuoi file ~/.profilee / ~/.bashrco simili. Ciò significa che non è facile utilizzarli per installare più versioni di Python a livello globale per tutti gli utenti. Per fare ciò, puoi installare dalla sorgente insieme alla versione esistente di python del sistema operativo.


Installazione dalla sorgente - a livello di sistema

Avrai bisogno dei privilegi di root per questo metodo.

Vedere la documentazione ufficiale di Python per la compilazione dai sorgenti per ulteriori considerazioni e opzioni.

/usr/localè la posizione designata per un amministratore di sistema per installare software condiviso (a livello di sistema), quindi le sue sottodirectory sono un buon posto per scaricare i sorgenti python e installarli. Vedere la sezione 4.9 del File Hierarchy Standard della Linux Foundation .

Installa eventuali dipendenze di compilazione. Su sistemi basati su Debian, usa:

apt update
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev

Scegli la versione di Python che desideri installare. Vedi la pagina Python Source Releases per un elenco.

Scarica e decomprimi il file /usr/local/src, sostituendolo di X.X.Xseguito con la versione python (cioè 3.8.2).

cd /usr/local/src
wget https://www.python.org/ftp/python/X.X.X/Python-X.X.X.tgz
tar vzxf Python-X.X.X.tgz

Prima di compilare e installare, impostare la CFLAGSvariabile d'ambiente con i flag del compilatore C necessari (vedere la makedocumentazione di GNU ). Di solito non è necessario per un uso generale, ma se, ad esempio, dovessi creare un plugin uWSGI con questa versione di python, potresti voler impostare i flag,, -fPICcon quanto segue:

export CFLAGS='-fPIC'

Cambia la directory di lavoro nella directory dei sorgenti di Python decompressa e configura la build. Probabilmente vorrai utilizzare l' --enable-optimizationsopzione sul ./configurecomando per l' ottimizzazione guidata dal profilo . Utilizzare --prefix=/usr/localper installare le sottodirectory appropriate ( /usr/local/bin, /usr/local/lib, ecc).

cd Python-X.X.X
./configure --enable-optimizations --prefix=/usr/local

Crea il progetto con makee installa con make altinstallper evitare di sovrascrivere i file durante l'installazione di più versioni. Vedi l'avviso in questa pagina della documentazione della build di python.

make -j 4
make altinstall

Quindi dovresti essere in grado di eseguire le tue nuove versioni di python e pip con pythonX.Xe pipX.X(cioè python3.8e pip3.8). Nota che se la versione secondaria della tua nuova installazione è la stessa della versione del sistema operativo (ad esempio se stavi installando python3.8.4 e il sistema operativo utilizzava python3.8.2), allora dovresti specificare l'intero percorso ( /usr/local/bin/pythonX.X) o impostare un alias per utilizzare questa versione.


0

Dipende molto dal sistema di distribuzione dei pacchetti che utilizzi. Ad esempio, con MacPorts, puoi installare più pacchetti Python e utilizzare l' pyselectutilità per cambiare l'impostazione predefinita tra di loro con facilità. In ogni momento, puoi chiamare i diversi interpreti Python fornendo il percorso completo e puoi collegarti a tutte le librerie e intestazioni Python fornendo i percorsi completi per quelli.

Quindi, in pratica, qualunque sia il modo in cui installi le versioni, fintanto che mantieni le tue installazioni separate, sarai in grado di eseguirle separatamente.


Cos'è un sistema di distribuzione di pacchetti?
Andriy Drozdyuk

@drozzy: Ad esempio RPM usato da OpenSuse o apt usato da distribuzioni basate su Debian o portage usato da Gentoo ecc. Fondamentalmente è uno strumento per installare software.
Felix Kling

0

L'ho fatto con anaconda navigator. Ho installato anaconda navigator e creato due diversi ambienti di sviluppo con differenti versioni di python

e passare da una versione all'altra di Python cambiando o attivando e disattivando gli ambienti.

installa prima anaconda navigator e poi crea gli ambienti.

vedere la guida qui su come gestire gli ambienti

https://docs.anaconda.com/anaconda/navigator/tutorials/manage-environments/

Ecco il video per farlo con conda

https://youtu.be/EGaw6VXV3GI

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.