Comment créer une virtualenv avec Python3.3 dans Ubuntu?


46

J'utilise Precise Pangolin amd64. J'ai installé Python 3.3 à partir de ppa: fkrull / deadsnakes.

Maintenant, je veux utiliser réellement cette nouvelle version de Python dans virtualenv. Mais comment puis-je faire cela? Je reçois l'erreur suivante:

$ 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 à la place, python3.3j'appelle explicitement virtualenv, j'obtiens l'erreur suivante:

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

Je suis coincé. Toute aide est grandement appréciée!

EDIT: Suite aux conseils de @thefourtheye, j’ai purgé mon site-packagesrépertoire local ( en l’effaçant seulement en le supprimant site.py). Maintenant, je vais encore plus loin, mais virtualenv se plaint d'une disparition 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

J'ai installé le paquet python3-setuptools, qui installe la version Py3 de easy_install.

EDIT2:

Voici la sortie détaillée, sans passer explicitement --distributeet --no-site-packages, comme ces deux commutateurs sont le comportement par défaut de mon 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'

Juste pour des raisons de clarté, pouvez-vous essayer cette commande (à l'exclusion distribute) virtualenv --no-site-packages -p /usr/bin/python3.3 ~/.virtualenvs/pywork3:?
don.joey

J'ai essayé avec --setuptoolsaussi, et le résultat est exactement le même (y compris l'installation de distribuer).
andreas-h

En 14.04, tout fonctionne sans douleur.
Antti Haapala

Réponses:


25
  1. Effectuer une sauvegarde des packages de site.

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

  2. Tronquer ce répertoire

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

  3. Maintenant, essayez la même chose

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

  4. Pour installer sans pip

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

EDIT: On dirait que les versions de virtualenv (1.7.1.2) et de python3.3 ne sont pas compatibles. Alors, s'il vous plaît essayez ceci

  1. Désinstallez python-virtualenv en utilisant sudo apt-get remove python-virtualenv

  2. wget http://peak.telecommunity.com/dist/ez_setup.py; sudo python ez_setup.py Cela installera le dernier 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


intéressant, maintenant je vais un peu plus loin, mais toujours pas tout le chemin là-bas. Voir ma question mise à jour
andreas-h

Je passe par le code virtualenv. Ce serait utile si vous pouviez exécuter la même commande avec une verbosité accrue et nous montrer la sortie complète. virtualenv --no-site-packages --distribute -p /usr/bin/python3.3 ~/.virtualenvs/pywork3 --verbose
thefourtheye

obtenu, voir ma question mise à jour.
andreas-h

Analyser depuis plus de deux heures. On dirait que la distribution n'installe pas les scripts easy_install dans le répertoire bin. Nous pouvons les installer manuellement plus tard. Donc, juste pour installer virtualenv, essayez d'installer sans pip, comme je l'ai mis à jour dans la réponse
thefourtheye

1
Au lieu d'installer virtualenv manuellement, je viens de télécharger le paquetage .dev pour Ubuntu Raring depuis packages.ubuntu.com/raring/all/python-virtualenv/download et de l'installer via dpkg -i. Semble travailler maintenant. Merci beaucoup!
andreas-h

58

Python 3.3 a déjà été intégré.

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

Il suffit de courir

pyvenv-3.3 /path/to/environment

Et puis pour l'activer

source /path/to/environment/bin/activate

Cette version intégrée de virtualenv est beaucoup plus flexible que ce à quoi vous êtes probablement habitué. Par exemple, vous pouvez étendre EnvBuilder pour faire à peu près tout ce que vous voulez. Vous pouvez copier un exemple d'implémentation d'EnvBuilder à partir du lien ci-dessous et l'utiliser avec: http://docs.python.org/3/library/venv.html#an-example-of-extending-envbuilder

Ce script ci-dessus fait probablement la plupart de ce que nous nous attendons à tirer de virtualenv. Donc, si vous avez juste besoin d'un virtualenv avec easy_install et pip, vous devriez être prêt à partir.

Voir les modifications de @MarkOfSine ci-dessous pour obtenir des précisions sur la façon de s'exécuter si vous êtes toujours confus.


Pour ajouter à ce qui précède, et conformément à la documentation:
Par exemple, après avoir exécuté: pyvenv-3.3 /path/to/my_project/venv
Vous pouvez exécuter distribute_setup.py, ce qui semble faire diverses choses, mais vous vous retrouvez essentiellement easy_installdans votre ./my_project/venv/binrépertoire.
Cela peut ensuite être utilisé pour installer pipet similaires.

Il ne dit pas d'où vous devez aller distribute_setup.py, alors j'ai téléchargé:

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

et en utilisant l'environnement activé:

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

a couru:

python distribute_setup.py

et

easy_install pip

Ce qui a ensuite complété la configuration de l’environnement virtuel plus en ligne avec virtualenv sur python 2.x


2
gentil - je n'étais pas au courant ...
andreas-h

1
en réalité, cela ne semble pas être une "vraie" virtualenv. Il n'y a ni pip ni easy_install disponible après l'avoir activé.
andreas-h

@ andreas-h Vous devez les installer vous-même. Cela ne le rend pas "réel".
Chris

1
@ andreas-h En outre, il est conçu pour que vous puissiez créer un script afin d'ajouter tout ce que vous voulez. Voir docs.python.org/3/library/…
Chris

Lorsque votre terminal n'arrête pas de crier sur les mauvaises autorisations lors de l'installation de pip, vérifiez si vous utilisez le binaire correct de easy_install. Vous pouvez sélectionner le binaire dans virtualenv de manière explicite ./venv/bin/easy_install pip.
OrangeTux

49

C'est plus facile qu'il n'y paraît

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

fonctionne vraiment :)


5
Cela devrait être la réponse correcte
micgeronimo

Ouais ! C'était super facile! Merci mec. @Cem Yildiz
Fahad Ahammed

9

Vous faites cela beaucoup trop compliqué. S'il est inclus dans python3, créez-le simplement avec:

python3 -m venv

Vous pouvez même créer un alias si vous souhaitez

alias virtualenv3='python3 -m venv'

En fonction de la machine, vous devrez peut-être spécifier l'interpréteur:

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

1
Le paquet python3-venvest également nécessaire, du moins sur Ubuntu 14.04.
Gioele

Pour moi (également le 14.04), le paquet a été appelé python3.4-venv.
lundi

sur la version 18.04, aussi
fanny

2

Les étapes qui ont fonctionné pour moi: Sous MAC OSX 10.9.5

  1. Téléchargez et installez Python-3.4.3 manuellement .

    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. Créer un virtualenv.

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

Note:
virtualenv -p <path to python3> py3envn'a pas fonctionné:

Error due to zlib

Cela fonctionne aussi très bien sur Debian 7 (Wheezy). Juste un autre P3PATH
rubo77

Pour les utilisateurs debian distro basé en un conteneur, assurez - vous d'installer libssl-devet de zlib1g-devsorte que python est compilé avec _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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.