Come creare un virtualenv con Python3.3 in Ubuntu?


46

Sto eseguendo Precise Pangolin amd64. Ho installato Python 3.3 da ppa: fkrull / deadsnakes.

Ora voglio effettivamente utilizzare questa nuova versione di Python in un virtualenv. Ma come posso farlo? Ottengo il seguente errore:

$ virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Running virtualenv with interpreter /usr/bin/python3.3
The --no-site-packages flag is deprecated; it is now the default behavior.
New python executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3
Also creating executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/site-packages/site.py", line 73, in <module>
    __boot()
  File "/usr/local/lib/python2.7/site-packages/site.py", line 2, in __boot
    import sys, imp, os, os.path   
ImportError: No module named 'imp'
ERROR: The executable /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 is not functioning
ERROR: It thinks sys.prefix is '/home2/USERNAME/.virtualenvs' (should be '/home2/USERNAME/.virtualenvs/pywork3')
ERROR: virtualenv is not compatible with this system or executable

Se invece, utilizzo esplicitamente python3.3per chiamare virtualenv, ottengo questo errore:

$ python3.3 /usr/bin/virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Traceback (most recent call last):
  File "/usr/bin/virtualenv", line 2, in <module>
    import virtualenv
ImportError: No module named 'virtualenv'

Sono bloccato. Qualsiasi aiuto è molto apprezzato!

EDIT: seguendo i consigli di @thefourtheye, ho eliminato la mia site-packagesdirectory locale (effettivamente solo eliminando site.py). Ora sto facendo un ulteriore passo avanti, ma virtualenv si lamenta di una mancanza easy_install:

 Error [Errno 2] No such file or directory:   
'/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install' while executing command    
/home2/USERNAME/.virt...rk3/bin/easy_install /usr/share/python-virtualenv/pip-1.1.tar.gz

Ho installato il pacchetto python3-setuptools, che installa la versione Py3 di easy_install.

EDIT2:

Ecco l'output dettagliato, senza passare esplicitamente --distributee --no-site-packages, poiché questi due switch sono comportamenti predefiniti del mio virtualenv :

$ virtualenv --verbose -p /usr/bin/python3.3 ~/.virtualenvs/pywork3
Running virtualenv with interpreter /usr/bin/python3.3
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3
Symlinking Python bootstrap modules
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/config-3.3m
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/lib-dynload
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/os.py
  Ignoring built-in bootstrap module: posix
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/posixpath.py
  Cannot import bootstrap module: nt
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/ntpath.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/genericpath.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/fnmatch.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/locale.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/encodings
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/codecs.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/stat.py
  Cannot import bootstrap module: UserDict
  Cannot import bootstrap module: copy_reg
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/types.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/re.py
  Cannot import bootstrap module: sre
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_parse.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_constants.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/sre_compile.py
  Ignoring built-in bootstrap module: zlib
  Cannot import bootstrap module: _abcoll
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/warnings.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/linecache.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/abc.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/io.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/_weakrefset.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/copyreg.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/tempfile.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/random.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/__future__.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/collections
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/keyword.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/tarfile.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/shutil.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/struct.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/copy.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/base64.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/bisect.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/_dummy_thread.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/hashlib.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/heapq.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/hmac.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/reprlib.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/rlcompleter.py
  Symlinking /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/weakref.py
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/site-packages
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/site.py
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/orig-prefix.txt
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/no-global-site-packages.txt
Creating parent directories for /home2/USERNAME/.virtualenvs/pywork3/include
Symlinking /home2/USERNAME/.virtualenvs/pywork3/include/python3.3m
Creating /home2/USERNAME/.virtualenvs/pywork3/bin
New python executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3
Changed mode of /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 to 0o755
Also creating executable in /home2/USERNAME/.virtualenvs/pywork3/bin/python
Changed mode of /home2/USERNAME/.virtualenvs/pywork3/bin/python to 0o755
Testing executable with /home2/USERNAME/.virtualenvs/pywork3/bin/python3.3 -c "
import sys
prefix = sys.prefix
if sys.version_info[0] == 3:
    prefix = prefix.encode('utf8')
if hasattr(sys.stdout, 'detach'):
    sys.stdout = sys.stdout.detach()
elif hasattr(sys.stdout, 'buffer'):
    sys.stdout = sys.stdout.buffer
sys.stdout.write(prefix)
"
Got sys.prefix result: '/home2/USERNAME/.virtualenvs/pywork3'
Creating /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils/__init__.py
Writing /home2/USERNAME/.virtualenvs/pywork3/lib/python3.3/distutils/distutils.cfg
Using existing distribute egg: /usr/share/python-virtualenv/distribute-0.6.24.tar.gz
Installing distribute..............................................................................................................................................................................................................................................................................................................................................................................................................done.
Installing existing pip-1.1.tar.gz distribution: /usr/share/python-virtualenv/pip-1.1.tar.gz
Installing pip...
  Error [Errno 2] No such file or directory: '/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install' while executing command /home2/USERNAME/.virt...rk3/bin/easy_install /usr/share/python-virtualenv/pip-1.1.tar.gz
...Installing pip...done.
Traceback (most recent call last):
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 2283, in <module>
    main()
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 938, in main
    never_download=options.never_download)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 1054, in create_environment
    install_pip(py_executable, search_dirs=search_dirs, never_download=never_download)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 643, in install_pip
    filter_stdout=_filter_setup)
  File "/usr/lib/python2.7/dist-packages/virtualenv.py", line 976, in call_subprocess
    cwd=cwd, env=env)
  File "/usr/lib/python3.3/subprocess.py", line 818, in __init__
    restore_signals, start_new_session)
  File "/usr/lib/python3.3/subprocess.py", line 1416, in _execute_child
    raise child_exception_type(errno_num, err_msg)
FileNotFoundError: [Errno 2] No such file or directory: '/home2/USERNAME/.virtualenvs/pywork3/bin/easy_install'

Solo per chiarezza, puoi provare questo comando (escluso distribute) virtualenv --no-site-packages -p /usr/bin/python3.3 ~/.virtualenvs/pywork3:?
don.joey,

Ho provato anche con --setuptools, e il risultato è esattamente lo stesso (inclusa l'installazione di distribuire).
andreas-h

Nel 14.04 tutto funziona indolore.
Antti Haapala,

Risposte:


25
  1. Effettua il backup dei pacchetti del sito.

    cp -r /usr/local/lib/python2.7/site-packages/ /tmp/site-packages

  2. Tronca quella directory

    rm -rf /usr/local/lib/python2.7/site-packages/

  3. Ora prova lo stesso

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

  4. Per installare senza pip

    virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --no-pip

EDIT: sembra che la versione di virtualenv (1.7.1.2) e python3.3 non siano compatibili. Quindi, per favore, prova questo

  1. Disinstallare python-virtualenv usando sudo apt-get remove python-virtualenv

  2. wget http://peak.telecommunity.com/dist/ez_setup.py; sudo python ez_setup.py Verrà installato l'ultimo easy_install.

  3. sudo easy_install pip

  4. sudo pip install virtualenv

  5. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3


interessante, ora sto facendo un ulteriore passo avanti, ma non sono ancora arrivato. Vedi la mia domanda aggiornata
andreas-h,

Sto attraversando il codice virtualenv. Sarebbe utile se tu potessi eseguire lo stesso comando con maggiore verbosità e mostrarci l'output completo. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
thefourtheye l'

capito, vedi la mia domanda aggiornata.
andreas-h,

Analizzano da più di due ore. Sembra che distribut non installi gli script easy_install nella directory bin. Possiamo installarli manualmente in seguito. Quindi, solo per installare virtualenv, prova a installare senza pip, come ho aggiornato nella risposta
thefourtheye

1
Invece di installare virtualenv manualmente, ho appena scaricato il pacchetto .dev per Ubuntu Raring da packages.ubuntu.com/raring/all/python-virtualenv/download e l'ho installato tramite dpkg -i. Sembra funzionare ora. Molte grazie!
andreas-h

58

Python 3.3 ha incorporato venv.

http://docs.python.org/3/library/venv.html#module-venv

Corri semplicemente

pyvenv-3.3 /path/to/environment

E poi per attivarlo

source /path/to/environment/bin/activate

Questa versione integrata di virtualenv è molto più flessibile di quella a cui probabilmente sei abituato. Ad esempio, puoi estendere EnvBuilder per fare praticamente tutto quello che vuoi. Puoi copiare un'implementazione di esempio di EnvBuilder dal link in basso e giocarci: http://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder

Lo script sopra probabilmente fa la maggior parte di ciò che ci aspettiamo di uscire da virtualenv. Quindi, se hai solo bisogno di un virtualenv con easy_install e pip, dovresti essere pronto.

Vedi le modifiche di @MarkOfSine di seguito per chiarimenti su come iniziare se sei ancora confuso.


Per aggiungere a quanto sopra, e secondo i documenti:
Ad esempio, dopo l'esecuzione: pyvenv-3.3 /path/to/my_project/venv
È possibile eseguire distribute_setup.py, che sembra fare varie cose, ma sostanzialmente si finisce con easy_installnella propria ./my_project/venv/bindirectory.
Questo può quindi essere usato per installare pipe simili.

Non dice da dove dovresti andare distribute_setup.py, quindi ho scaricato da:

http://python-distribute.org/distribute_setup.py

e usando l'ambiente attivato:

cd /path/to/my_project
source venv/bin/activate

corse :

python distribute_setup.py

e

easy_install pip

Che ha quindi completato l'installazione dell'ambiente virtuale più in linea con virtualenv su Python 2.x


2
bello - non ne ero a conoscenza ...
andreas-h

1
in realtà, questo non sembra essere un virtualenv "reale". Non è disponibile pip né easy_install dopo averlo attivato.
andreas-h

@ andreas-h Devi installarli tu stesso. Ciò non lo rende "reale".
Chris,

1
@ andreas-h Inoltre, è progettato in modo da poter creare uno script per aggiungere quello che vuoi .. vedi docs.python.org/3/library/…
Chris

Quando il terminale continua a urlare per autorizzazioni errate durante l'installazione di pip, controlla se stai usando il binario corretto di easy_install. È possibile selezionare esplicitamente il file binario in virtualenv ./venv/bin/easy_install pip.
OrangeTux,

49

È più facile di come sembra:

virtualenv -p /usr/bin/python3 yourenv
source yourenv/bin/activate
pip install package-name

funziona davvero :)


5
Dovrebbe essere la risposta corretta
micgeronimo il

Si ! È stato semplicissimo! Grazie uomo. @Cem Yildiz
Fahad Ahammed,

9

Lo stai facendo troppo complicato. Se è incluso in python3, crealo semplicemente con:

python3 -m venv

Puoi anche creare un alias, se lo desideri

alias virtualenv3='python3 -m venv'

A seconda della macchina, potrebbe essere necessario specificare l'interprete:

alias virtualenv3='python3 -m venv -p python3'

1
È python3-venvnecessario anche il pacchetto , almeno su Ubuntu 14.04.
gioele,

Per me (anche il 14.04), il pacchetto è stato chiamato python3.4-venv.
tobek,

anche sulla versione 18.04
fanny

2

I passaggi che hanno funzionato per me: su MAC OSX 10.9.5

  1. Scarica e installa Python-3.4.3 manualmente .

    P3PATH=/Users/$USER/Python3
    mkdir -p $P3PATH
    cd $P3PATH
    tar -zxvf Python-3.4.3.tgz
    ./configure --prefix=$P3PATH/Python-3.4.3
    make; make install
  2. Crea un virtualenv.

    $P3PATH/Python-3.4.3/bin/pyvenv py3env
    source py3env/bin/activate

Nota:
virtualenv -p <path to python3> py3envnon ha funzionato:

Error due to zlib

Funziona bene anche su Debian 7 (wheezy). Solo un altro P3PATH
rubo77,

Per gli utenti della distro in-a-container basati su debian, assicurati di installare libssl-deve di zlib1g-devcompilare python con _ssl.so zlib.so
Nehal J Wani,

1
On Ubuntu 14.04 

sudo apt-get install python3-pip

sudo pip install virtualenv

virtualenv-3.4 --no-site-packages venv
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.