Menggunakan Python 3 di virtualenv

781

Menggunakan virtualenv , saya menjalankan proyek saya dengan versi default Python (2.7). Pada satu proyek, saya perlu menggunakan Python 3.4.

Saya dulu brew install python3menginstalnya di Mac saya. Sekarang, bagaimana cara membuat virtualenv yang menggunakan versi baru?

misalnya sudo virtualenv envPython3

Jika saya mencoba:

virtualenv -p python3 test

Saya mendapat:

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
Prometheus
sumber
1
apakah Anda mencoba hanya memperbarui juru bahasa di lingkungan Anda saat ini atau apakah Anda memutuskan untuk memulai dari awal?
Charlie Parker
Apakah mungkin hanya menginstal python3 di lingkungan virtual tanpa memperbarui sistem python (menjaga python2.x) di mac?
Juni

Jawaban:

1386

jalankan saja

virtualenv -p python3 envname

Perbarui setelah pengeditan OP:

Ada bug dalam versi virtualenv OP, seperti yang dijelaskan sini . Masalah telah diperbaiki dengan menjalankan:

pip install --upgrade virtualenv
tbrisker
sumber
17
Upgrade virtualenv bekerja, tetapi untuk beberapa alasan saya juga harus eksplisit tentang python3 yang dapat dieksekusi denganvirtualenv -p $(which python3) envname
dkamins
2
apakah mungkin untuk hanya mengubah juru bahasa python lingkungan saat ini daripada menciptakan lingkungan baru?
Charlie Parker
Pada Raspbian, Jessie 'virtualenv --tidak-situs-paket python3.4' bekerja. --distribusi sudah usang dan -p sepertinya tidak perlu karena virtualenv menggunakan python3.
alkopop79
Mengapa setelah dijalankan virtualenv -p python3 my_virtual_env, python3apakah dapat diakses dari luar lingkungan virtual juga?
Bishwas Mishra
@CharlieParker Anda dapat melakukan dua langkah berikut secara berurutan: 1. Hapus bin, lib, include, localdan sharedirektori dalam direktori root proyek Anda. 2. Dalam terminal run: virtualenv -p python3 .yang menginisialisasi virtualenv Python3 baru di direktori saat ini.
Calleniah
251

Python 3 memiliki dukungan bawaan untuk lingkungan virtual - venv . Mungkin lebih baik menggunakannya. Mengacu pada dokumen:

Penciptaan lingkungan virtual dilakukan dengan mengeksekusi skrip pyvenv:

pyvenv /path/to/new/virtual/environment

Pembaruan untuk Python 3.6 dan yang lebih baru:

Seperti komentar pawciobiel dengan benar , sudah ditinggalkan pada Python 3.6 dan cara baru adalah:pyvenv

python3 -m venv /path/to/new/virtual/environment
tokek
sumber
2
saya harap Anda benar karena saya baru saja meninggalkan virtualenv untuk bekerja dengan pyenv bersama dengan python 3.5.2
Jayesh
1
Saya belum menemukan informasi yang mengkonfirmasikan kekhawatiran terkait lokasi, relocatable dihapus sebagai opsi .... apakah sekarang tidak perlu? Apakah solusi mereka? atau apakah sekarang sama sekali tidak berguna untuk menyiapkan aplikasi?
JM Becker
7
Tepat tetapi Anda juga bisa menjalankan: python3 -m venv /path/v3karena skrip pyvenv telah ditinggalkan sejak Python 3.6.
pawciobiel
4
menggunakan anaconda python 3.6 terbaru di mac, dan python3 -m venv /path/v3kesalahan di sini. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exitApakah saya melewatkan sesuatu? Dengan --without-pipopsi, setidaknya membuat venv dengan mengaktifkan / menonaktifkan skrip dengan benar.
monkut
3
Ada yang tahu cara mengaktifkan python3.6 -m venv <venvname>. Tidak ada Skrip / di direktori yang dibuat, atau "aktifkan" di bin / subdir.
Shayne
60

Saya sudah mencoba pyenv dan sangat berguna untuk mengganti versi python (global, lokal di folder atau di virtualenv):

brew install pyenv

kemudian instal versi Python yang Anda inginkan:

pyenv install 3.5.0

dan cukup buat virtualenv dengan path ke versi penerjemah yang dibutuhkan:

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

Itu dia, periksa versinya:

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

Ada juga plugin untuk pyenv pyenv-virtualenv tetapi tidak berhasil untuk saya.

Johnner
sumber
tampaknya metode Anda mengharuskan untuk membuat lingkungan python baru. Dapatkah pyenv bekerja dengan virtualenv dan mudah mengubah versi python saya kapan pun saya mau?
Charlie Parker
58

Instal prasyarat.

sudo apt-get install python3 python3-pip virtualenvwrapper

Buat lingkungan virtual berbasis Python3. Aktifkan --system-site-packagesopsi bendera.

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

Atur ke dalam lingkungan virtual.

workon <venv-name>

Instal persyaratan lain menggunakan pipmanajer paket.

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

Ketika bekerja pada beberapa proyek python secara bersamaan, biasanya disarankan untuk menginstal paket-paket umum seperti pdbppglobal dan kemudian menggunakannya kembali dalam virtualenvs.

Menggunakan teknik ini menghemat banyak waktu untuk mengambil paket dan menginstalnya, selain dari mengkonsumsi ruang disk minimal dan bandwidth jaringan.

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

Instruksi khusus Django

Jika ada banyak paket sistem python lebar maka disarankan untuk tidak menggunakan --system-site-packagesflag terutama selama pengembangan karena saya perhatikan bahwa itu memperlambat startup Django banyak. Saya kira inisialisasi lingkungan Django secara manual memindai dan menambahkan semua paket situs dari jalur sistem yang mungkin menjadi alasannya. Bahkanpython manage.py shell menjadi sangat lambat.

Setelah mengatakan bahwa percobaan opsi mana yang berfungsi lebih baik. Mungkin aman untuk melewati --system-site-packagesbendera untuk proyek Django.

Sandeep
sumber
1
Saya menerapkan ini pada OSX, itu berhasil (kecuali tidak menggunakan apt-gettetapi brew)
SDK
38
virtualenv --python=/usr/bin/python3 <name of env>

bekerja untukku.

bewithaman
sumber
Saya mencobanya tetapi dikatakan The executable python3 (from --python=python3) does not exist, apa yang akan Anda lakukan? Saya ingin membuat isntall python3 tetapi tidak yakin apakah itu ide yang bagus atau apakah sistem saya akan bingung dengan versi python yang saya gunakan
Charlie Parker
Bekerja seperti pesona di Ubuntu 16.04!
Eric Vieira
20

Anda dapat menentukan Versi Python tertentu saat membuat lingkungan.
Ini disebutkan dalam virtualenv.py

virtualenv --python=python3.5 envname

Dalam beberapa kasus ini harus menjadi path lengkap ke executable:

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

Bagaimana cara -pkerjanya

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
sumber
ini jawaban terbaik di sini
Collier
14

Saya memiliki ERRORpesan yang sama . solusi tbrisker tidak berfungsi dalam kasus saya. Alih-alih ini memecahkan masalah:

$ python3 -m venv .env
Aziz Alto
sumber
13

Ini yang Anda butuhkan, untuk menjalankan lingkungan virtual di python / python3

Pertama jika virtualenvtidak diinstal, jalankan

pip3 install virtualenv 

Sekarang Jalankan:

virtualenv -p python3 <env name> 

Kadang-kadang cmd virtualenvgagal, jika demikian gunakan ini:

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

Sekarang aktifkan env virtual:

source <env_name>/bin/activate

Atau:

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

Sekarang jalankan

which python

Anda akan melihat path lengkap ke dir dan <env_name>/bin/pythonsuffix Anda

Untuk keluar dari virtualenv, jalankan:

deactivate 
Kohn1001
sumber
8

Python sekarang hadir dengan implementasi lingkungan virtualnya sendiri, dengan nama "venv". Saya sarankan menggunakan itu, bukan virtualenv.

Mengutip dari venv - docs ,

Sudah tidak digunakan lagi sejak versi 3.6: pyvenv adalah alat yang direkomendasikan untuk membuat lingkungan virtual untuk Python 3.3 dan 3.4, dan tidak digunakan lagi di Python 3.6.

Diubah dalam versi 3.5: Penggunaan venv sekarang direkomendasikan untuk membuat lingkungan virtual.

Untuk windows, untuk memulai venv pada beberapa proyek, buka cmd:

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

(Sarankan menggunakan kutipan ganda di sekitar jalur direktori jika berisi spasi. Contoh: "C: / My Dox / Spaced Directory / Something")

Setelah venv diatur, Anda akan melihat beberapa folder baru di dalam direktori proyek Anda. Salah satunya adalah "Script".

Untuk mengaktifkan atau memanggil venv, Anda perlu:

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

Anda dapat menonaktifkan lingkungan virtual dengan mengetikkan "nonaktifkan" di shell Anda. Dengan ini, Anda sekarang siap untuk menginstal perpustakaan khusus proyek Anda, yang akan berada di bawah folder "Lib".

================================ Edit 1 ================ ==================== Skenario yang akan dibahas di bawah ini bukan yang awalnya ditanyakan, hanya menambahkan ini jika seseorang menggunakan vscode dengan ekstensi python

Jika Anda menggunakan kode vs dengan ekstensi python, Anda mungkin menghadapi masalah dengan pylintnya yang mengarah ke instalasi global. Dalam hal ini, pylint tidak akan dapat melihat modul yang diinstal di lingkungan virtual Anda dan karenanya akan menampilkan kesalahan saat mengimpor.

Berikut adalah metode sederhana untuk melewati ini.

cd Workspace\Scripts
.\Activate.ps1
code .

Kami pada dasarnya mengaktifkan lingkungan terlebih dahulu dan kemudian menggunakan vs-code sehingga pylint dimulai di dalam lingkungan dan dapat melihat semua paket lokal.

Api
sumber
Saya menggunakan virtualenvuntuk penggunaan sehari-hari lingkungan virtual ( workon, dll.), Tetapi untuk penciptaan lingkungan virtual baru yang andal dalam python3.xhal ini adalah satu-satunya cara yang saya temukan berfungsi.
Bobble
6

Selain jawaban lain, saya sarankan memeriksa instance virtualenv yang Anda jalankan:

which virtualenv

Jika ini muncul sesuatu di / usr / local / bin, maka mungkin - bahkan mungkin - bahwa Anda menginstal virtualenv (mungkin menggunakan instance dari easy_tools atau pip) tanpa menggunakan manajer paket sistem Anda (buatan dalam kasus OP). Ini masalah saya.

Bertahun-tahun yang lalu - ketika saya lebih bodoh - saya telah menginstal virtualenv dan menutupi virtualenv yang disediakan oleh paket sistem saya.

Setelah menghapus virtualenv yang lama dan rusak ini, masalah saya hilang.

Sage
sumber
6

Dalam python3.6 saya mencoba python3 -m venv myenv, sesuai dokumentasi, tetapi butuh waktu lama. Jadi perintah yang sangat sederhana dan cepat adalah python -m venv yourenv Ini berfungsi untuk saya di python3.6.

Sujeet Agrahari
sumber
5

Di Mac saya harus melakukan yang berikut untuk membuatnya bekerja.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere
Stryker
sumber
Untuk menemukan dengan tepat di mana versi python yang Anda inginkan adalah lokasi gunakan which python2.7atau which python3.5atau which python3.6, lalu ganti about--python=DIRECTORY
Santhosh
3

Jika Anda menginstal python3 ( brew install python3) bersama dengan virtualenv burrito , Anda dapat melakukannya mkvirtualenv -p $(which python3) env_name

Tentu saja, saya tahu virtualenv burrito hanyalah pembungkus, tetapi telah membantu saya selama bertahun-tahun, mengurangi beberapa kurva belajar.

Antony
sumber
3

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> ini akan menambahkan jalur python3 untuk lingkungan virtual Anda.

Hardik Gajjar
sumber
2

Ini berhasil untuk saya

virtualenv --no-site-packages --distribute -p /usr/bin/python3 ~/.virtualenvs/py3
Dadaso Zanzane
sumber
2

Bagi mereka yang memiliki masalah saat bekerja dengan Anaconda3 (Python 3).

Anda bisa menggunakannya

conda create -n name_of_your_virtualenv python=python_version 

Untuk mengaktifkan lingkungan (Linux, MacOS)

source activate name_of_your_virtualenv

Untuk Windows

activate name_of_your_virtualenv
jkhosla
sumber
1

Saya mencoba semua hal di atas, itu masih tidak berhasil. Jadi sebagai brute force, saya baru saja menginstal ulang anaconda, menginstal ulang virtualenv ... dan itu berhasil.

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
sumber
1

Saya ingin menjaga python 2.7.5 sebagai versi default pada Centos 7 tetapi memiliki python 3.6.1 di lingkungan virtual yang berjalan bersama lingkungan virtual lainnya di python 2.x

Saya menemukan tautan di bawah ini solusi terbaik untuk versi python terbaru (python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-up-a-local-programming -environment-for-python-3 . Ini menunjukkan langkah-langkah untuk platform yang berbeda tetapi langkah dasarnya

  1. Instal python3.x (jika tidak ada) untuk platform Anda
  2. Instal python3.x-devel untuk platform Anda
  3. Buat lingkungan virtual dengan python 3.x (misalnya $ python3.6 -m venv virenv_test_p3 /)
  4. Aktifkan lingkungan testen untuk python 3.x (misalnya sumber virenv_test_p3 / bin / aktifkan)
  5. Instal paket yang ingin Anda gunakan di lingkungan virtual python 3 baru Anda dan yang didukung (misalnya pip instal Django == 1.11.2)
Gunnar Sigfusson
sumber
1

Perintah sederhana di bawah ini dapat membuat env virtual dengan versi 3.5

apt-get install python3-venv

python3.5 -m venv <your env name>

jika Anda ingin versi env virtual sebagai 3.6

python3.6 -m venv <your env name>
Hariharan AR
sumber
1

Bagi Anda yang menggunakan pipenv dan ingin menginstal versi tertentu:

pipenv install --python 3.6
Vlad Bezden
sumber
0

Saya mendapat kesalahan yang sama karena itu menjadi konflik dengan instalasi miniconda3 jadi ketika Anda mengetik "yang virtualenv" dan jika Anda telah menginstal miniconda dan itu menunjuk ke instalasi yang Anda dapat menghapusnya (jika Anda suka saya dan belum pindah) untuk itu) atau ubah variabel lingkungan Anda untuk menunjuk ke instalasi yang Anda inginkan.

PrincessPea
sumber
0

Di baris perintah Windows, berikut ini bekerja untuk saya. Pertama cari tahu di mana executable python Anda berada:

where python

Ini akan menampilkan jalur ke python.exe yang berbeda pada sistem Anda. Ini milik saya:

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

Jadi untuk Python3, ini terletak di jalur pertama bagi saya, jadi saya cd ke folder root aplikasi di mana saya ingin membuat folder lingkungan virtual. Lalu saya menjalankan yang berikut ini yang mencakup jalur ke executable Python3 saya, menamai lingkungan virtual saya 'venv':

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

Selanjutnya, aktifkan lingkungan virtual:

call venv\Scripts\activate.bat

Akhirnya, instal dependensi untuk lingkungan virtual ini:

pip install -r requirements.txt

Persyaratan.txt ini dapat diisi secara manual jika Anda tahu perpustakaan / modul yang diperlukan untuk aplikasi Anda di lingkungan virtual. Jika Anda menjalankan aplikasi di lingkungan lain, maka Anda dapat secara otomatis menghasilkan dependensi dengan menjalankan yang berikut (cd ke folder aplikasi di lingkungan di mana ia bekerja):

pip freeze > requirements.txt

Kemudian setelah Anda memiliki requirement.txt yang telah Anda 'beku', maka Anda dapat menginstal persyaratan di komputer lain atau membersihkan lingkungan dengan yang berikut (setelah cd ke folder aplikasi):

pip install -r requirements.txt

Untuk melihat versi python Anda di lingkungan virtual, jalankan:

python --version

Lalu voila ... Anda menjalankan Python3 di lingkungan virtual Anda. Output untuk saya:

Python 3.7.2
Carlo Carandang
sumber