¿Cómo crear un virtualenv con Python3.3 en Ubuntu?

46

Estoy ejecutando Precise Pangolin amd64. Instalé Python 3.3 desde ppa: fkrull / deadsnakes.

Ahora quiero usar esta nueva versión de Python en virtualenv. ¿Pero cómo puedo hacer esto? Obtuve el siguiente error:

$ 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

Si, en cambio, utilizo explícitamente python3.3para llamar a virtualenv, obtengo este error:

$ 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'

Estoy atascado. ¡Cualquier ayuda es muy apreciada!

EDITAR: Siguiendo el consejo de @thefourtheye, purgué mi site-packagesdirectorio local (efectivamente solo borro site.py). Ahora voy un paso más allá, pero virtualenv se queja de una falta 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

python3-setuptoolsInstalé el paquete , que instala la versión Py3 de easy_install.

EDIT2:

Aquí está la salida detallada, sin pasar explícitamente --distributey --no-site-packages, como estos dos interruptores son el comportamiento predeterminado de mi 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'
andreas-h
fuente
Solo por razones de claridad, ¿puedes probar este comando (excluyendo distribute) virtualenv --no-site-packages -p /usr/bin/python3.3 ~/.virtualenvs/pywork3:?
don.joey
También probé con --setuptools, y el resultado es exactamente el mismo (incluida la instalación de distribuir).
andreas-h
En 14.04 todo funciona sin dolor.
Antti Haapala

Respuestas:

25
  1. Haga una copia de seguridad de los paquetes del sitio.

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

  2. Truncar ese directorio

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

  3. Ahora intenta lo mismo

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

  4. Para instalar sin pip

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

EDITAR: Parece que la versión de virtualenv (1.7.1.2) y python3.3 no son compatibles. Entonces, por favor intente esto

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

  2. wget http://peak.telecommunity.com/dist/ez_setup.py; sudo python ez_setup.py Esto instalará la última instalación fácil.

  3. sudo easy_install pip

  4. sudo pip install virtualenv

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

thefourtheye
fuente
interesante, ahora estoy dando un paso más, pero todavía no todo el camino. Vea mi pregunta actualizada
andreas-h
Estoy revisando el código virtualenv. Sería útil si pudieras ejecutar el mismo comando con mayor verbosidad y mostrarnos el resultado completo. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
thefourtheye
lo tengo, mira mi pregunta actualizada.
andreas-h
Han estado analizando por más de dos horas. Parece que distribuir no instala los scripts easy_install en el directorio bin. Podemos instalarlos manualmente más tarde. Entonces, para instalar virtualenv, intente instalar sin pip, como he actualizado en la respuesta
thefourtheye
1
En lugar de instalar virtualenv manualmente, acabo de descargar el paquete .dev para Ubuntu Raring desde packages.ubuntu.com/raring/all/python-virtualenv/download y lo instalé a través de dpkg -i. Parece trabajar ahora. ¡Muchas gracias!
andreas-h
58

Python 3.3 tiene venv incorporado.

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

Simplemente corre

pyvenv-3.3 /path/to/environment

Y luego para activarlo

source /path/to/environment/bin/activate

Esta versión incorporada de virtualenv es mucho más flexible de lo que probablemente estás acostumbrado. Por ejemplo, puede extender EnvBuilder para que haga lo que quiera. Puede copiar un ejemplo de implementación de EnvBuilder desde el siguiente enlace y jugar con él: http://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder

Esa secuencia de comandos anterior probablemente hace la mayor parte de lo que esperamos obtener de virtualenv. Entonces, si solo necesita un virtualenv con easy_install y pip, debería estar listo.

Consulte las ediciones de @MarkOfSine a continuación para obtener una aclaración sobre cómo comenzar a correr si todavía está confundido.


Para agregar a lo anterior, y según los documentos:
por ejemplo, después de ejecutar: pyvenv-3.3 /path/to/my_project/venv
puede ejecutar distribute_setup.py, lo que parece hacer varias cosas, pero esencialmente termina easy_installen su ./my_project/venv/bindirectorio.
Esto se puede utilizar para instalar pipy similares.

No dice de dónde debe llegar distribute_setup.py, así que lo descargué de:

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

y usando el entorno activado:

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

corrió :

python distribute_setup.py

y

easy_install pip

Que luego completó la configuración del entorno virtual más en línea con virtualenv en python 2.x

Chris
fuente
2
agradable - no estaba al tanto de esto ...
andreas-h
1
en realidad, esto no parece ser un "verdadero" virtualenv. No hay pip ni easy_install disponibles después de activarlo.
andreas-h
@ andreas-h Necesita instalarlos usted mismo. Eso no lo hace no "real".
Chris
1
@ Andreas-H también, está diseñado para que pueda crear una secuencia de comandos para añadir lo que quieras a ti mismo .. ver docs.python.org/3/library/...
Chris
Cuando su terminal sigue gritando sobre permisos incorrectos al instalar pip, verifique si está utilizando el binario correcto de easy_install. Puede seleccionar el binario en virtualenv explícitamente por ./venv/bin/easy_install pip.
OrangeTux
49

Es más fácil de lo que parece:

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

realmente funciona :)

Cem Yildiz
fuente
55
Esa debería ser la respuesta correcta
micgeronimo
Si! ¡Eso fue súper fácil! Gracias hombre. @Cem Yildiz
Fahad Ahammed
9

Estás haciendo esto demasiado complicado. Si está incluido python3, solo créalo con:

python3 -m venv

Incluso puede crear un alias si lo desea

alias virtualenv3='python3 -m venv'

Dependiendo de la máquina, es posible que deba especificar el intérprete:

alias virtualenv3='python3 -m venv -p python3'
txomon
fuente
1
El paquete python3-venvtambién es necesario, al menos en Ubuntu 14.04.
gioele
Para mí (también el 14.04), se llamó al paquete python3.4-venv.
tobek
en la versión 18.04, también
fanny
2

Los pasos que funcionaron para mí: en MAC OSX 10.9.5

  1. Descargue e instale 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> py3envno funcionó:

Error due to zlib
BRD
fuente
Esto también funciona bien en Debian 7 (wheezy). Solo otro P3PATH
rubo77
Para los usuarios de distro en un contenedor basados ​​en Debian, asegúrese de instalar libssl-devy zlib1g-devpara que Python se compile 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
L3nn
fuente