Korzystanie z Python 3 w virtualenv

778

Korzystając z virtualenv , uruchamiam moje projekty z domyślną wersją Pythona (2.7). W jednym projekcie muszę użyć Pythona 3.4.

Kiedyś brew install python3instalowałem go na komputerze Mac. Teraz, jak utworzyć virtualenv, który korzysta z nowej wersji?

np. sudo virtualenv envPython3

Jeśli spróbuję:

virtualenv -p python3 test

Dostaję:

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
Prometeusz
źródło
1
czy próbowałeś tylko zaktualizować interpreter w bieżącym środowisku, czy po prostu postanowiłeś zacząć od zera?
Charlie Parker,
Czy można zainstalować Python3 tylko w środowisku wirtualnym bez aktualizacji systemowego Pythona (przechowywanie w python2.x) na komputerze Mac?
Jun

Odpowiedzi:

1384

po prostu biegnij

virtualenv -p python3 envname

Zaktualizuj po edycji OP:

Wystąpił błąd w wersji virtualenv OP, jak opisano tutaj . Problem został rozwiązany przez uruchomienie:

pip install --upgrade virtualenv
tbrisker
źródło
17
Aktualizacja virtualenv działała, ale z jakiegoś powodu musiałem również wyraźnie powiedzieć o wykonywalnym python3 przy pomocyvirtualenv -p $(which python3) envname
dkamins
2
czy można po prostu zmienić interpreter języka Python w obecnym środowisku, zamiast tworzyć nowe środowisko?
Charlie Parker,
Na Raspbian Jessie działało „virtualenv --no-site-packages python3.4”. --distribute jest przestarzałe i -p nie wydaje się konieczne, ponieważ virtualenv używa Python3.
alkopop79,
Dlaczego jest tak, że po uruchomieniu virtualenv -p python3 my_virtual_env, python3jest dostępna z zewnątrz środowiska wirtualnego również?
Bishwas Mishra
@CharlieParker Można wykonać następujące dwa etapy w następującej kolejności: 1. Usunąć bin, lib, include, locali sharekatalogi w katalogu głównym twojego projektu. 2. W uruchomieniu terminala: virtualenv -p python3 .który inicjuje nową wirtualną wersję Python3 w bieżącym katalogu.
Calleniah
251

Python 3 ma wbudowaną obsługę środowisk wirtualnych - venv . Zamiast tego lepiej byłoby użyć tego. Odnosząc się do dokumentów:

Tworzenie wirtualnych środowisk odbywa się poprzez wykonanie skryptu pyvenv:

pyvenv /path/to/new/virtual/environment

Aktualizacja dla Python 3.6 i nowszych:

Jak poprawnie komentuje pawciobiel , jest przestarzały od Pythona 3.6, a nowy sposób to:pyvenv

python3 -m venv /path/to/new/virtual/environment
gekon
źródło
2
mam nadzieję, że masz rację, ponieważ właśnie opuściłem virtualenv do pracy z pyenv wraz z
pythonem
1
Nie znalazłem żadnych informacji potwierdzających obawy związane z lokalizacją, przeniesienie zostało usunięte jako opcja .... czy jest to teraz niepotrzebne? czy jest to obejście? czy przygotowywanie aplikacji jest teraz całkowicie bezużyteczne?
JM Becker,
7
Dokładnie, ale można również uruchomić: python3 -m venv /path/v3ponieważ skrypt pyvenv jest przestarzały od wersji Python 3.6.
pawciobiel,
4
używając najnowszego anakondy python 3.6 na Macu i python3 -m venv /path/v3tutaj błędy. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exitCzy coś brakuje? Dzięki tej --without-pipopcji przynajmniej tworzy venv z poprawnie aktywowanymi / dezaktywowanymi skryptami.
monkut
3
Każdy wie, jak aktywować python3.6 -m venv <nazwa_vv>. W utworzonym katalogu nie ma skryptów / ani „aktywuj” w katalogu bin / podkatalogu.
Shayne,
60

Próbowałem już pyenv i jest to bardzo przydatne do przełączania wersji Pythona (globalne, lokalne w folderze lub w virtualenv):

brew install pyenv

następnie zainstaluj żądaną wersję Pythona:

pyenv install 3.5.0

i po prostu utwórz virtualenv ze ścieżką do wymaganej wersji interpretera:

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

To jest to, sprawdź wersję:

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

Istnieje również wtyczka do pyenv pyenv-virtualenv, ale jakoś mi to nie działało.

Johnner
źródło
wygląda na to, że twoja metoda wymaga utworzenia nowego środowiska python. Czy pyenv może współpracować z virtualenv i po prostu zmienić moją wersję Pythona, kiedy chcę?
Charlie Parker,
58

Zainstaluj wymagania wstępne.

sudo apt-get install python3 python3-pip virtualenvwrapper

Utwórz środowisko wirtualne oparte na języku Python3. Opcjonalnie włącz --system-site-packagesflagę.

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

Ustawiony w środowisku wirtualnym.

workon <venv-name>

Zainstaluj inne wymagania za pomocą pipmenedżera pakietów.

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

Podczas pracy nad wieloma projektami Pythona jednocześnie zaleca się instalowanie wspólnych pakietów, takich jak pdbppglobalnie, a następnie ponowne użycie ich w virtualenvs.

Zastosowanie tej techniki pozwala zaoszczędzić dużo czasu na pobieraniu pakietów i instalowaniu ich, oprócz zajmowania minimalnego miejsca na dysku i przepustowości sieci.

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

Szczegółowe instrukcje Django

Jeśli istnieje wiele systemowych pakietów Pythona, zaleca się, aby nie używać --system-site-packagesflagi, szczególnie podczas programowania, ponieważ zauważyłem, że spowalnia to znacznie uruchamianie Django. Zakładam, że inicjalizacja środowiska Django polega na ręcznym skanowaniu i dołączaniu wszystkich pakietów witryn ze ścieżki systemowej, co może być przyczyną. Nawet python manage.py shellstaje się bardzo wolny.

Powiedziawszy ten eksperyment, która opcja działa lepiej. Może być bezpiecznie pominąć --system-site-packagesflagę dla projektów Django.

Sandeep
źródło
1
Zastosowałem to do OSX, działało (z wyjątkiem tego, że nie używało, apt-getale brew)
sdkks
38
virtualenv --python=/usr/bin/python3 <name of env>

pracował dla mnie.

bewithaman
źródło
Próbowałem tego, ale powiedziano The executable python3 (from --python=python3) does not exist: co byś zrobił? Chciałem zaparzyć Isntall Python3, ale nie byłem pewien, czy to dobry pomysł, czy też mój system pomyliłby się, której wersji Python używam
Charlie Parker
Działa jak urok w Ubuntu 16.04!
Eric Vieira,
20

Możesz określić konkretną wersję Pythona podczas tworzenia środowiska.
Jest wspomniany w virtualenv.py

virtualenv --python=python3.5 envname

W niektórych przypadkach musi to być pełna ścieżka do pliku wykonywalnego:

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

Jak -pdziała

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)
Kiran Jasvanee
źródło
to najlepsza odpowiedź tutaj
Collier
14

Miałem tę samą ERRORwiadomość. Rozwiązanie tbrisker nie działało w moim przypadku. Zamiast tego rozwiązało to problem:

$ python3 -m venv .env
Aziz Alto
źródło
13

To wszystko, czego potrzebujesz, aby uruchomić środowisko wirtualne w python / python3

Najpierw, jeśli virtualenvnie jest zainstalowany, uruchom

pip3 install virtualenv 

Teraz uruchom:

virtualenv -p python3 <env name> 

Kiedyś cmd virtualenvkończy się niepowodzeniem, jeśli tak, użyj tego:

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

Teraz aktywuj wirtualną env:

source <env_name>/bin/activate

Lub:

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

Teraz biegnij

which python

Powinieneś zobaczyć pełną ścieżkę do swojego katalogu i <env_name>/bin/pythonsufiksu

Aby wyjść z virtualenv, uruchom:

deactivate 
Kohn1001
źródło
8

Python ma teraz własną implementację środowiska wirtualnego o nazwie „venv”. Sugerowałbym użycie tego zamiast virtualenv.

Cytowanie z Venv - Docs ,

Przestarzałe od wersji 3.6: pyvenv było zalecanym narzędziem do tworzenia środowisk wirtualnych dla Python 3.3 i 3.4, i jest przestarzałe w Python 3.6.

Zmieniono w wersji 3.5: Teraz zaleca się użycie venv do tworzenia środowisk wirtualnych.

W systemie Windows, aby zainicjować venv w jakimś projekcie, otwórz cmd:

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

(Sugeruje użycie podwójnego cudzysłowu wokół ścieżki katalogu, jeśli zawiera spacje. Np .: „C: / My Dox / Spaced Directory / Something”)

Po skonfigurowaniu venv zobaczysz w folderze projektu kilka nowych folderów. Jednym z nich byłyby „Skrypty”.

Aby aktywować lub wywołać venv potrzebujesz:

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

Możesz dezaktywować środowisko wirtualne, wpisując „dezaktywuj” w swojej powłoce. Dzięki temu możesz teraz zainstalować biblioteki specyficzne dla twojego projektu, które będą znajdować się w folderze „Lib”.

================================ Edytuj 1 ================ ==================== Scenariusz, który zostanie omówiony poniżej, nie jest tym, o co pierwotnie pytano, wystarczy dodać to na wypadek, gdyby ktoś używał vscode z rozszerzeniem Pythona

W przypadku użycia kodu vs z rozszerzeniem Pythona możesz napotkać problem z pylintem, który wskazuje na instalację globalną. W takim przypadku pylint nie będzie mógł zobaczyć modułów zainstalowanych w środowisku wirtualnym, a zatem wyświetli błędy podczas importowania.

Oto prosta metoda na obejście tego.

cd Workspace\Scripts
.\Activate.ps1
code .

Zasadniczo najpierw aktywujemy środowisko, a następnie wywołujemy vs-code, aby pylint zaczął się w środowisku i mógł zobaczyć wszystkie lokalne pakiety.

Płomień
źródło
Używam virtualenvdo codziennego korzystania ze środowisk wirtualnych ( workonitp.), Ale w celu niezawodnego tworzenia nowych środowisk wirtualnych python3.xjest to jedyny sposób, który okazał się skuteczny.
Bobble
6

Oprócz innych odpowiedzi, polecam sprawdzenie, które wystąpienie virtualenv wykonujesz:

which virtualenv

Jeśli pojawi się coś w / usr / local / bin, możliwe jest - nawet prawdopodobne - że zainstalowałeś virtualenv (możliwe, że używasz instancji easy_tools lub pip) bez użycia menedżera pakietów systemu (w przypadku OP). To był mój problem.

Lata temu - kiedy byłem jeszcze bardziej nieświadomy - zainstalowałem virtualenv i maskowało to dostarczone przez mój pakiet virtualenv.

Po usunięciu tego starego, zepsutego virtualenv moje problemy zniknęły.

szałwia
źródło
6

W python3.6 próbowałem python3 -m venv myenv, zgodnie z dokumentacją, ale trwało to tak długo. Więc bardzo proste i szybkie polecenie brzmi: python -m venv yourenv działało dla mnie na python3.6.

Sujeet Agrahari
źródło
5

Na komputerze Mac musiałem wykonać następujące czynności, aby to zadziałało.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere
Stryker
źródło
Aby znaleźć dokładnie żądaną wersję Pythona, użyj lokalizacji which python2.7lub which python3.5lub which python3.6, a następnie zamień about--python=DIRECTORY
Santhosh
3

Jeśli zainstalujesz python3 ( brew install python3) wraz z virtualenv burrito , możesz to zrobić mkvirtualenv -p $(which python3) env_name

Oczywiście wiem, że virtualenv burrito to tylko opakowanie, ale przez lata służyło mi dobrze, zmniejszając niektóre krzywe uczenia się.

Antony
źródło
3

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> spowoduje to dodanie ścieżki python3 do wirtualnego środowiska.

Hardik Gajjar
źródło
2

To zadziałało dla mnie

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3
Dadaso Zanzane
źródło
2

Dla tych, którzy mają problemy podczas pracy z Anaconda3 (Python 3).

Możesz użyć

conda create -n name_of_your_virtualenv python=python_version 

Aby aktywować środowisko (Linux, MacOS)

source activate name_of_your_virtualenv

Dla Windowsa

activate name_of_your_virtualenv
jkhosla
źródło
1

Próbowałem wszystkich powyższych rzeczy, to wciąż nie działało. Więc jako brutalna siła, właśnie ponownie zainstalowałem anakondę, ponownie zainstalowałem virtualenv ... i zadziałało.

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$ 
Aman Madan
źródło
1

Chciałem zachować Python 2.7.5 jako domyślną wersję na Centos 7, ale mam Python 3.6.1 w środowisku wirtualnym działającym wraz z innymi środowiskami wirtualnymi w Python 2.x

Znalazłem poniższy link najlepsze rozwiązanie dla najnowszej wersji Pythona (python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming -environment-for-python-3 . Pokazuje kroki dla różnych platform, ale podstawowe kroki są

  1. Zainstaluj python3.x (jeśli nie jest obecny) na swojej platformie
  2. Zainstaluj python3.x-devel na swojej platformie
  3. Utwórz środowisko wirtualne w python 3.x (na przykład $ python3.6 -m venv virenv_test_p3 /)
  4. Aktywuj środowisko testowe dla Pythona 3.x (na przykład źródło virenv_test_p3 / bin / aktywuj)
  5. Zainstaluj pakiety, których chcesz używać w nowym środowisku wirtualnym Python 3 i które są obsługiwane (na przykład zainstaluj Django w wersji pip == 1.11.2)
Gunnar Sigfusson
źródło
1

Poniższe proste polecenia mogą utworzyć wirtualną env w wersji 3.5

apt-get install python3-venv

python3.5 -m venv <your env name>

jeśli chcesz wirtualną wersję env jako 3.6

python3.6 -m venv <your env name>
Hariharan AR
źródło
1

Dla tych z Was, którzy używają pipenv i chcą zainstalować konkretną wersję:

pipenv install --python 3.6
Vlad Bezden
źródło
0

Wystąpił ten sam błąd, ponieważ jest to konflikt z instalacją miniconda3, więc kiedy wpiszesz „która virtualenv” i jeśli zainstalowałeś minicondę i wskazuje ona na tę instalację, możesz ją usunąć (jeśli podoba mi się to i nie przeprowadziłeś się jeszcze)) lub zmień zmienną środowiskową, aby wskazywała instalację, którą chcesz.

PrincessPea
źródło
0

W wierszu poleceń systemu Windows następujące działało dla mnie. Najpierw dowiedz się, gdzie znajdują się pliki wykonywalne Pythona:

where python

Spowoduje to wyświetlenie ścieżek do innego pliku python.exe w systemie. Oto moje:

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

Tak więc dla Python3 była to pierwsza ścieżka dla mnie, więc przechodzę do folderu głównego aplikacji, w którym chcę utworzyć folder środowiska wirtualnego. Następnie uruchamiam następujące, które zawiera ścieżkę do mojego pliku wykonywalnego Python3, nadając mojemu środowisku wirtualnemu nazwę „venv”:

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

Następnie aktywuj środowisko wirtualne:

call venv\Scripts\activate.bat

Na koniec zainstaluj zależności dla tego środowiska wirtualnego:

pip install -r requirements.txt

To wymagania.txt można wypełnić ręcznie, jeśli znasz biblioteki / moduły potrzebne dla Twojej aplikacji w środowisku wirtualnym. Jeśli aplikacja działała w innym środowisku, możesz automatycznie tworzyć zależności, uruchamiając następujące czynności (przejdź do folderu aplikacji w środowisku, w którym działa):

pip freeze > requirements.txt

Następnie, gdy masz plik wymagania.txt, który został „zamrożony”, możesz zainstalować wymagania na innym komputerze lub w czystym środowisku, korzystając z następujących elementów (po zapisaniu dysku CD w folderze aplikacji):

pip install -r requirements.txt

Aby zobaczyć swoją wersję Pythona w środowisku wirtualnym, uruchom:

python --version

W takim razie voila ... Twój Python3 działa w środowisku wirtualnym. Wyjście dla mnie:

Python 3.7.2
Carlo Carandang
źródło