Utilizzo di Python 3 in virtualenv


781

Usando virtualenv , eseguo i miei progetti con la versione predefinita di Python (2.7). Su un progetto, devo usare Python 3.4.

Lo brew install python3installavo sul mio Mac. Ora, come posso creare un virtualenv che utilizza la nuova versione?

ad es. sudo virtualenv envPython3

Se provo:

virtualenv -p python3 test

Ottengo:

Running virtualenv with interpreter /usr/local/bin/python3
Using base prefix '/usr/local/Cellar/python3/3.4.0_1/Frameworks/Python.framework/Versions/3.4'
New python executable in test/bin/python3.4
Also creating executable in test/bin/python
Failed to import the site module
Traceback (most recent call last):
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/site.py", line 67, in <module>
    import os
  File "/Users/user/Documents/workspace/test/test/bin/../lib/python3.4/os.py", line 634, in <module>
    from _collections_abc import MutableMapping
ImportError: No module named '_collections_abc'
ERROR: The executable test/bin/python3.4 is not functioning
ERROR: It thinks sys.prefix is '/Users/user/Documents/workspace/test' (should be '/Users/user/Documents/workspace/test/test')
ERROR: virtualenv is not compatible with this system or executable

1
hai provato solo ad aggiornare l'interprete nel tuo ambiente attuale o hai appena deciso di ricominciare da capo?
Charlie Parker,

È possibile installare python3 solo in ambiente virtuale senza aggiornare il sistema python (mantenendo in python2.x) su Mac?
Giugno

Risposte:


1386

corri semplicemente

virtualenv -p python3 envname

Aggiornamento dopo la modifica dell'OP:

Si è verificato un errore nella versione di virtualenv dell'OP, come descritto qui . Il problema è stato risolto eseguendo:

pip install --upgrade virtualenv

17
L'aggiornamento di virtualenv ha funzionato, ma per qualche motivo ho dovuto anche essere esplicito sull'eseguibile di python3 convirtualenv -p $(which python3) envname
dkamins

2
è possibile cambiare semplicemente l'interprete python dell'ambiente corrente anziché creare un nuovo ambiente?
Charlie Parker,

Su Raspbian Jessie 'virtualenv --no-site-pacchetti python3.4' ha funzionato. --distribute è deprecato e -p non sembra necessario poiché virtualenv usa python3.
alkopop79,

Perché è che dopo l'esecuzione virtualenv -p python3 my_virtual_env, python3è accessibile dall'esterno dell'ambiente virtuale anche?
Bishwas Mishra il

@CharlieParker È possibile eseguire le seguenti due fasi in sequenza: 1. Eliminare il bin, lib, include, locale sharele directory nella directory principale del progetto. 2. In esecuzione terminale: virtualenv -p python3 .che inizializza un nuovo virtualenv Python3 nella directory corrente.
Calleniah,

251

Python 3 ha un supporto integrato per ambienti virtuali - venv . Potrebbe essere meglio usarlo invece. Facendo riferimento ai documenti:

La creazione di ambienti virtuali viene eseguita eseguendo lo script pyvenv:

pyvenv /path/to/new/virtual/environment

Aggiornamento per Python 3.6 e versioni successive:

Come pawciobiel correttamente commenta , pyvenvè deprecata come di Python 3.6 e il nuovo modo è:

python3 -m venv /path/to/new/virtual/environment

2
spero che tu abbia ragione da quando ho appena lasciato virtualenv per lavorare con pyenv insieme a python 3.5.2
Jayesh,

1
Non ho trovato alcuna informazione che confermi le preoccupazioni relative alla posizione, il trasferimento è stato rimosso come opzione .... ora non è necessario? è una soluzione? o è solo ora completamente inutile preparare un'app?
JM Becker,

7
Esatto ma potresti anche eseguire: python3 -m venv /path/v3poiché lo script pyvenv è stato deprecato a partire da Python 3.6.
pawciobiel,

4
usando l'ultima anaconda python 3.6 su mac ed python3 -m venv /path/v3errori qui. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exitMi sto perdendo qualcosa? Con l' --without-pipopzione, almeno crea il venv con script di attivazione / disattivazione correttamente.
monkut

3
Qualcuno sa come attivare un python3.6 -m venv <nomevenvenuta>. Non ci sono script / nella directory creata, né "attivare" nel bin / sottodir.
Shayne,

60

Ho provato Pyenv ed è molto utile per cambiare le versioni di Python (globale, locale nella cartella o nel virtualenv):

brew install pyenv

quindi installa la versione di Python che desideri:

pyenv install 3.5.0

e semplicemente crea virtualenv con il percorso alla versione dell'interprete necessaria:

virtualenv -p /Users/johnny/.pyenv/versions/3.5.0/bin/python3.5 myenv

Ecco fatto, controlla la versione:

. ./myenv/bin/activate && python -V

Ci sono anche plugin per pyenv pyenv-virtualenv ma in qualche modo non ha funzionato per me.


sembra che il tuo metodo richieda la creazione di un nuovo ambiente Python. Pyenv può funzionare con virtualenv e cambiare semplicemente la mia versione di Python ogni volta che voglio?
Charlie Parker,

58

Installa i prerequisiti.

sudo apt-get install python3 python3-pip virtualenvwrapper

Crea un ambiente virtuale basato su Python3. Opzionalmente abilitare --system-site-packagesflag.

mkvirtualenv -p /usr/bin/python3 <venv-name>

Impostato nell'ambiente virtuale.

workon <venv-name>

Installa altri requisiti utilizzando pipGestione pacchetti.

pip install -r requirements.txt
pip install <package_name>

Quando si lavora su più progetti Python contemporaneamente, si consiglia di installare pacchetti comuni come a pdbpplivello globale e di riutilizzarli in VirtualENVS.

L'uso di questa tecnica consente di risparmiare un sacco di tempo speso per il recupero dei pacchetti e l'installazione, oltre a consumare spazio su disco minimo e larghezza di banda della rete.

sudo -H pip3 -v install pdbpp
mkvirtualenv -p $(which python3) --system-site-packages <venv-name>

Istruzioni specifiche per Django

Se ci sono molti pacchetti python a livello di sistema, si consiglia di non usare --system-site-packagesflag soprattutto durante lo sviluppo poiché ho notato che rallenta molto l'avvio di Django. Presumo che l'inizializzazione dell'ambiente Django sia la scansione manuale e l'aggiunta di tutti i pacchetti del sito dal percorso di sistema che potrebbe essere la ragione. Anche python manage.py shelldiventa molto lento.

Detto questo esperimento quale opzione funziona meglio. Potrebbe essere sicuro saltare la --system-site-packagesbandiera per i progetti Django.


1
Ho applicato questo a OSX, ha funzionato (tranne che non ha usato apt-getma brew)
sdkks il

38
virtualenv --python=/usr/bin/python3 <name of env>

ha funzionato per me.


Ci ho provato ma mi viene detto The executable python3 (from --python=python3) does not exist, cosa faresti? Volevo preparare isntall python3 ma non ero sicuro che fosse una buona idea o se il mio sistema si sarebbe confuso su quale versione di Python sto usando
Charlie Parker,

Funziona come un fascino in Ubuntu 16.04!
Eric Vieira,

20

È possibile specificare la versione specifica di Python durante la creazione dell'ambiente.
È menzionato in virtualenv.py

virtualenv --python=python3.5 envname

In alcuni casi questo deve essere il percorso completo dell'eseguibile:

virtualenv --python=/Users/username/.pyenv/versions/3.6.0/bin/python3.6 envname

Come -pfunziona

parser.add_option(
    '-p', '--python',
    dest='python',
    metavar='PYTHON_EXE',
    help='The Python interpreter to use, e.g., --python=python3.5 will use the python3.5 '
    'interpreter to create the new environment.  The default is the interpreter that '
    'virtualenv was installed with (%s)' % sys.executable)

questa è la risposta migliore qui
Collier,

14

Ho avuto lo stesso ERRORmessaggio. La soluzione di tbrisker non ha funzionato nel mio caso. Invece questo ha risolto il problema:

$ python3 -m venv .env

13

Questo è tutto ciò che serve per eseguire un ambiente virtuale in python / python3

Prima di tutto se virtualenvnon installato, esegui

pip3 install virtualenv 

Ora esegui:

virtualenv -p python3 <env name> 

A volte il cmd virtualenvfallisce, in tal caso usa questo:

python3 -m virtualenv <env_name>  # you can specify full path instead <env_name> to install the file in a different location other than the current location

Ora attiva l'ambiente virtuale:

source <env_name>/bin/activate

O:

source `pwd`/<env_name>/bin/activate

Adesso corri

which python

Dovresti vedere il percorso completo della tua dir e <env_name>/bin/pythonsuffisso

Per uscire da virtualenv, eseguire:

deactivate 

8

Python ora viene fornito con la propria implementazione di ambiente virtuale, con il nome di "venv". Suggerirei di usarlo, invece di virtualenv.

Citando da venv - docs ,

Obsoleto dalla versione 3.6: pyvenv era lo strumento consigliato per la creazione di ambienti virtuali per Python 3.3 e 3.4, ed è deprecato in Python 3.6.

Modificato nella versione 3.5: L'uso di venv è ora consigliato per la creazione di ambienti virtuali.

Per windows, per avviare venv su alcuni progetti, apri cmd:

python -m venv "c:\path\to\myenv"

(Suggerirebbe di usare la doppia virgoletta attorno al percorso della directory se contiene spazi. Es .: "C: / My Dox / Spaced Directory / Something")

Una volta impostato venv, vedrai alcune nuove cartelle nella directory del tuo progetto. Uno di questi sarebbe "Script".

Per attivare o invocare venv è necessario:

C:\> <venv>\Scripts\activate.bat

È possibile disattivare un ambiente virtuale digitando "Disattiva" nella shell. Con questo, ora sei pronto per installare le librerie specifiche del tuo progetto, che risiederà nella cartella "Lib".

================================ Modifica 1 ================ ==================== Lo scenario che verrà discusso di seguito non è quello originariamente richiesto, basta aggiungere questo nel caso in cui qualcuno usi vscode con estensione python

Nel caso in cui usi vs code con la sua estensione python, potresti riscontrare un problema con il suo pylint che punta all'installazione globale. In questo caso, pylint non sarà in grado di vedere i moduli installati nel tuo ambiente virtuale e quindi mostrerà errori durante l'importazione.

Ecco un metodo semplice per superare questo.

cd Workspace\Scripts
.\Activate.ps1
code .

Fondamentalmente stiamo attivando prima l'ambiente e poi invocando vs-code in modo che pylint inizi all'interno dell'ambiente e possa vedere tutti i pacchetti locali.


Uso virtualenvper l' uso quotidiano di ambienti virtuali ( workon, ecc.), Ma per la creazione affidabile di nuovi ambienti virtuali in python3.xquesto è l'unico modo in cui ho scoperto che funziona.
Bobble,

6

Oltre alle altre risposte, ti consiglio di verificare quale istanza di virtualenv stai eseguendo:

which virtualenv

Se questo rivela qualcosa in / usr / local / bin, allora è possibile - anche probabilmente - che tu abbia installato virtualenv (possibilmente usando un'istanza di easy_tools o pip) senza usare il gestore di pacchetti del tuo sistema (preparato nel caso di OP). Questo era il mio problema

Anni fa, quando ero ancora più ignorante, avevo installato virtualenv e stava mascherando virtualenv fornito dal pacchetto del mio sistema.

Dopo aver rimosso questo vecchio virtual virtual rotto, i miei problemi sono scomparsi.


6

In python3.6 ho provato python3 -m venv myenv, come da documentazione, ma ci è voluto tanto tempo. Quindi il comando molto semplice e veloce è python -m venv yourenv Ha funzionato per me su python3.6.


5

Su Mac ho dovuto fare quanto segue per farlo funzionare.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere

Per trovare esattamente dove si trova la versione di Python desiderata, utilizzare la posizione which python2.7o which python3.5oppure which python3.6, quindi sostituire la--python=DIRECTORY
Santhosh

3

Se installi python3 ( brew install python3) insieme a virtualenv burrito , puoi farlo mkvirtualenv -p $(which python3) env_name

Certo, so che virtualenv burrito è solo un involucro, ma mi ha servito bene nel corso degli anni, riducendo alcune curve di apprendimento.


3

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> questo aggiungerà il percorso python3 per il tuo ambiente virtuale.


2

Ha funzionato per me

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3

2

Per coloro che hanno problemi lavorando con Anaconda3 (Python 3).

Puoi usare

conda create -n name_of_your_virtualenv python=python_version 

Per attivare l'ambiente (Linux, MacOS)

source activate name_of_your_virtualenv

Per Windows

activate name_of_your_virtualenv

1

Ho provato tutto quanto sopra, ancora non ha funzionato. Quindi, come forza bruta, ho appena reinstallato l'anaconda, reinstallato il virtualenv ... e ha funzionato.

Amans-MacBook-Pro:~ amanmadan$ pip install virtualenv
You are using pip version 6.1.1, however version 8.1.2 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.
Collecting virtualenv
  Downloading virtualenv-15.0.3-py2.py3-none-any.whl (3.5MB)
    100% |████████████████████████████████| 3.5MB 114kB/s 
Installing collected packages: virtualenv
Successfully installed virtualenv-15.0.3
Amans-MacBook-Pro:python amanmadan$ virtualenv my_env
New python executable in /Users/amanmadan/Documents/HadoopStuff/python/my_env/bin/python
Installing setuptools, pip, wheel...done.
Amans-MacBook-Pro:python amanmadan$ 

1

Volevo mantenere Python 2.7.5 come versione predefinita su Centos 7 ma ho Python 3.6.1 in un ambiente virtuale in esecuzione accanto ad altri ambienti virtuali in Python 2.x

Ho trovato il link seguente la migliore soluzione per l'ultima versione di Python (python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming -environment-for-python-3 . Mostra i passaggi per piattaforme diverse ma i passaggi di base sono

  1. Installa python3.x (se non presente) per la tua piattaforma
  2. Installa python3.x-devel per la tua piattaforma
  3. Crea un ambiente virtuale in Python 3.x (ad esempio $ python3.6 -m venv virenv_test_p3 /)
  4. Attiva l'ambiente di test per python 3.x (ad esempio sorgente virenv_test_p3 / bin / activ)
  5. Installa i pacchetti che desideri utilizzare nel tuo nuovo ambiente virtuale python 3 e che sono supportati (ad esempio pip install Django == 1.11.2)

1

I seguenti comandi semplici possono creare un ambiente virtuale con la versione 3.5

apt-get install python3-venv

python3.5 -m venv <your env name>

se si desidera la versione di env virtuale come 3.6

python3.6 -m venv <your env name>

1

Per quelli di voi che utilizzano pipenv e desiderano installare una versione specifica:

pipenv install --python 3.6

0

Ho avuto lo stesso errore a causa di un conflitto con l'installazione di Miniconda3, quindi quando si digita "quale virtualenv" e se hai installato Miniconda e punta a tale installazione puoi rimuoverlo (se ti piaccio e non ti sei spostato ancora) o modificare la variabile di ambiente in modo che punti all'installazione desiderata.


0

Sulla riga di comando di Windows, il seguente ha funzionato per me. Per prima cosa scopri dove si trovano i tuoi eseguibili python:

where python

Questo genererà i percorsi per i diversi python.exe sul tuo sistema. Ecco i miei:

C:\Users\carandangc\Anaconda3\python.exe
C:\Python27\python.exe

Quindi per Python3, questo è stato individuato nel primo percorso per me, quindi ho inserito nella cartella principale dell'applicazione in cui volevo creare una cartella di ambiente virtuale. Quindi eseguo quanto segue che include il percorso del mio eseguibile Python3, denominando il mio ambiente virtuale 'venv':

virtualenv --python=/Users/carandangc/Anaconda3/python.exe venv

Successivamente, attiva l'ambiente virtuale:

call venv\Scripts\activate.bat

Infine, installa le dipendenze per questo ambiente virtuale:

pip install -r requirements.txt

Questo requisito.txt può essere popolato manualmente se conosci le librerie / i moduli necessari per la tua applicazione nell'ambiente virtuale. Se l'applicazione era in esecuzione in un altro ambiente, è possibile produrre automaticamente le dipendenze eseguendo quanto segue (cd nella cartella dell'applicazione nell'ambiente in cui funziona):

pip freeze > requirements.txt

Quindi una volta che hai i requisiti.txt che hai 'congelato', puoi installare i requisiti su un altro computer o ambiente pulito con il seguente (dopo cd nella cartella dell'applicazione):

pip install -r requirements.txt

Per vedere la tua versione di Python nell'ambiente virtuale, esegui:

python --version

Quindi voilà ... hai Python3 in esecuzione nel tuo ambiente virtuale. Uscita per me:

Python 3.7.2
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.