Sử dụng Python 3 trong virtualenv


780

Sử dụng virtualenv , tôi chạy các dự án của mình với phiên bản mặc định của Python (2.7). Trong một dự án, tôi cần sử dụng Python 3.4.

Tôi đã từng brew install python3cài đặt nó trên máy Mac của mình. Bây giờ, làm cách nào để tạo một virtualenv sử dụng phiên bản mới?

ví dụ: sudo virtualenv envPython3

Nếu tôi cố gắng:

virtualenv -p python3 test

Tôi có:

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

1
bạn đã thử chỉ cập nhật trình thông dịch trong môi trường hiện tại của bạn hay bạn chỉ quyết định bắt đầu lại từ đầu?
Charlie Parker

Có thể chỉ cài đặt python3 trong môi trường ảo mà không cập nhật hệ thống python (giữ trong python2.x) trên mac không?
Tháng Sáu

Câu trả lời:


1386

chỉ cần chạy

virtualenv -p python3 envname

Cập nhật sau khi chỉnh sửa của OP:

Có một lỗi trong phiên bản virtualenv của OP, như được mô tả ở đây . Sự cố đã được khắc phục bằng cách chạy:

pip install --upgrade virtualenv

17
Các virtualenv nâng cấp làm việc, nhưng đối với một số lý do tôi cũng phải được rõ ràng về python3 thực thi vớivirtualenv -p $(which python3) envname
dkamins

2
Có thể chỉ thay đổi trình thông dịch python của môi trường hiện tại thay vì tạo một môi trường mới?
Charlie Parker

Trên Raspbian Jessie 'virtualenv --no-site-gói python3.4' đã hoạt động. --distribution không được dùng nữa và -p dường như không cần thiết vì virtualenv sử dụng python3.
alkopop79

Tại sao sau khi chạy virtualenv -p python3 my_virtual_env, python3nó cũng có thể truy cập được từ bên ngoài môi trường ảo?
Bishwas Mishra

@CharlieParker Bạn có thể thực hiện theo hai bước sau theo thứ tự: 1. Xóa bin, lib, include, localsharethư mục trong thư mục gốc của dự án của bạn. 2. Trong thiết bị đầu cuối chạy: virtualenv -p python3 .khởi tạo một virtualenv Python3 mới trong thư mục hiện tại.
Calleniah

251

Python 3 có hỗ trợ tích hợp cho môi trường ảo - venv . Nó có thể tốt hơn để sử dụng thay thế. Nhắc đến các tài liệu:

Tạo môi trường ảo được thực hiện bằng cách thực thi tập lệnh pyvenv:

pyvenv /path/to/new/virtual/environment

Cập nhật cho Python 3.6 trở lên:

Như pawciobiel một cách chính xác ý kiến , pyvenvbị phản đối như của Python 3.6 và các phương pháp mới là:

python3 -m venv /path/to/new/virtual/environment

2
Tôi hy vọng bạn đúng vì tôi vừa rời virtualenv để làm việc với pyenv cùng với python 3.5.2
Jayesh

1
Tôi không tìm thấy bất kỳ thông tin nào xác nhận các mối quan tâm liên quan đến vị trí, di dời đã bị xóa như một tùy chọn .... bây giờ có cần thiết không? là một cách giải quyết của họ? hoặc bây giờ hoàn toàn vô dụng để chuẩn bị một ứng dụng?
JM Becker

7
Chính xác nhưng bạn cũng có thể chạy: python3 -m venv /path/v3vì tập lệnh pyvenv không được dùng nữa kể từ Python 3.6.
pawciobiel

4
sử dụng trăn anaconda mới nhất 3.6 trên mac và python3 -m venv /path/v3lỗi ở đây. Error: Command '['/path/v3/bin/python3', '-Im', 'ensurepip', '--upgrade', '--default-pip']' returned non-zero exitTui bỏ lỡ điều gì vậy? Với --without-piptùy chọn, ít nhất nó sẽ tạo venv với kích hoạt / hủy kích hoạt tập lệnh một cách chính xác.
monkut

3
Bất cứ ai cũng biết cách kích hoạt một python3.6 -m venv <venvname>. Không có ScScript / trong thư mục đã tạo, cũng không "kích hoạt" trong bin / subir.
Shayne

60

Tôi đã thử dùng pyenv và rất tiện để chuyển đổi các phiên bản python (toàn cầu, cục bộ trong thư mục hoặc trong virtualenv):

brew install pyenv

sau đó cài đặt phiên bản Python bạn muốn:

pyenv install 3.5.0

và chỉ cần tạo virtualenv với đường dẫn đến phiên bản trình thông dịch cần thiết:

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

Vậy đó, kiểm tra phiên bản:

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

Ngoài ra còn có plugin cho pyenv pyenv-virtualenv nhưng nó không hoạt động với tôi bằng cách nào đó.


có vẻ như phương pháp của bạn yêu cầu tạo ra một môi trường python mới. Pyenv có thể hoạt động với virtualenv và đơn giản thay đổi phiên bản python của tôi bất cứ khi nào tôi muốn không?
Charlie Parker

58

Cài đặt các điều kiện tiên quyết.

sudo apt-get install python3 python3-pip virtualenvwrapper

Tạo một môi trường ảo dựa trên Python3. Tùy chọn bật --system-site-packagescờ.

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

Đặt vào môi trường ảo.

workon <venv-name>

Cài đặt các yêu cầu khác bằng cách sử dụng piptrình quản lý gói.

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

Khi làm việc trên nhiều dự án python đồng thời, thường nên cài đặt các gói phổ biến như pdbpp trên toàn cầu và sau đó sử dụng lại chúng trong virtualenvs.

Sử dụng kỹ thuật này giúp tiết kiệm rất nhiều thời gian cho việc tìm nạp các gói và cài đặt chúng, ngoài việc tiêu thụ không gian đĩa tối thiểu và băng thông mạng.

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

Hướng dẫn cụ thể của Django

Nếu có rất nhiều gói python toàn hệ thống thì không nên sử dụng --system-site-packagescờ đặc biệt là trong quá trình phát triển vì tôi nhận thấy rằng nó làm chậm quá trình khởi động Django rất nhiều. Tôi cho rằng việc khởi tạo môi trường Django là quét thủ công và nối thêm tất cả các gói trang web từ đường dẫn hệ thống có thể là lý do. Cũngpython manage.py shell trở nên rất chậm.

Đã nói rằng thí nghiệm mà tùy chọn hoạt động tốt hơn. Có thể an toàn khi bỏ qua --system-site-packagescờ cho các dự án Django.


1
Tôi đã áp dụng điều này cho OSX, nó đã hoạt động (trừ khi không sử dụng apt-getnhưng brew)
sdkks

38
virtualenv --python=/usr/bin/python3 <name of env>

đã làm cho tôi.


Tôi đã thử điều đó nhưng được nói The executable python3 (from --python=python3) does not exist, bạn sẽ làm gì? Tôi muốn sản xuất không phải python3 nhưng không chắc đó là ý tưởng hay nếu hệ thống của tôi bị nhầm lẫn với phiên bản python nào tôi đang sử dụng
Charlie Parker

Hoạt động như một cơ duyên trong Ubuntu 16.04!
Eric Vieira

20

Bạn có thể chỉ định Phiên bản cụ thể của Python trong khi tạo môi trường.
Nó được đề cập trong virtualenv.py

virtualenv --python=python3.5 envname

Trong một số trường hợp, đây phải là đường dẫn đầy đủ để thực thi:

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

Cách -plàm việc

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)

đây là câu trả lời hay nhất ở đây
Collier

14

Tôi đã có cùng một ERRORthông điệp. giải pháp của tbrisker không hoạt động trong trường hợp của tôi. Thay vào đó, điều này đã giải quyết vấn đề:

$ python3 -m venv .env

13

Đây là tất cả những gì bạn cần, để chạy một môi trường ảo trong python / python3

Đầu tiên nếu virtualenvkhông được cài đặt, hãy chạy

pip3 install virtualenv 

Bây giờ chạy:

virtualenv -p python3 <env name> 

Đôi khi cmd virtualenvthất bại, nếu vậy hãy sử dụng điều này:

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

Bây giờ kích hoạt env ảo:

source <env_name>/bin/activate

Hoặc là:

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

Bây giờ chạy

which python

Bạn sẽ thấy đường dẫn đầy đủ đến thư mục và <env_name>/bin/pythonhậu tố của bạn

Để thoát virtualenv, hãy chạy:

deactivate 

8

Python bây giờ đi kèm với việc thực hiện môi trường ảo của riêng nó, với tên là "venv". Tôi sẽ đề nghị sử dụng điều đó, thay vì virtualenv.

Trích dẫn từ venv - docs ,

Không dùng nữa kể từ phiên bản 3.6: pyvenv là công cụ được đề xuất để tạo môi trường ảo cho Python 3.3 và 3.4 và không được dùng trong Python 3.6.

Thay đổi trong phiên bản 3.5: Việc sử dụng venv hiện được khuyến nghị để tạo môi trường ảo.

Đối với các cửa sổ, để bắt đầu venv trên một số dự án, hãy mở cmd:

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

(Sẽ đề nghị sử dụng trích dẫn kép xung quanh đường dẫn thư mục nếu nó chứa bất kỳ khoảng trắng nào. Ví dụ: "C: / My Dox / Spained Directory / Something")

Khi venv được thiết lập, bạn sẽ thấy một số thư mục mới trong thư mục dự án của bạn. Một trong số đó sẽ là "Kịch bản".

Để kích hoạt hoặc gọi venv bạn cần:

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

Bạn có thể hủy kích hoạt một môi trường ảo bằng cách nhập vào việc hủy kích hoạt hệ thống ảo trong vỏ của bạn. Với điều này, bây giờ bạn đã sẵn sàng để cài đặt các thư viện cụ thể cho dự án của bạn, nó sẽ nằm trong thư mục "Lib".

================================ Chỉnh sửa 1 ================ ==================== Kịch bản sẽ được thảo luận dưới đây không phải là những gì được hỏi ban đầu, chỉ cần thêm điều này trong trường hợp ai đó sử dụng vscode với phần mở rộng python

Trong trường hợp, bạn sử dụng vs mã với phần mở rộng python của nó, bạn có thể phải đối mặt với một vấn đề với giá trị của nó chỉ ra cài đặt toàn cầu. Trong trường hợp này, pylint sẽ không thể thấy các mô-đun được cài đặt trong môi trường ảo của bạn và do đó sẽ hiển thị lỗi trong khi nhập.

Đây là một phương pháp đơn giản để vượt qua điều này.

cd Workspace\Scripts
.\Activate.ps1
code .

Về cơ bản, chúng tôi đang kích hoạt môi trường trước và sau đó gọi vs-code để pylint bắt đầu trong môi trường và có thể thấy tất cả các gói cục bộ.


Tôi sử dụng virtualenvđể sử dụng hàng ngày các môi trường ảo ( workon, v.v.), nhưng để tạo ra các môi trường ảo mới đáng tin cậy python3.xthì đây là cách duy nhất tôi thấy nó hoạt động.
Bobble

6

Ngoài các câu trả lời khác, tôi khuyên bạn nên kiểm tra phiên bản virtualenv nào bạn đang thực hiện:

which virtualenv

Nếu điều này xuất hiện một cái gì đó trong / usr / local / bin, thì có thể - thậm chí có khả năng - rằng bạn đã cài đặt virtualenv (có thể sử dụng một thể hiện của easy_tools hoặc pip) mà không cần sử dụng trình quản lý gói hệ thống của bạn (pha trong trường hợp của OP). Đây là vấn đề của tôi.

Cách đây nhiều năm - khi tôi thậm chí còn không biết gì hơn - tôi đã cài đặt virtualenv và nó đang che giấu virtualenv do gói cung cấp của hệ thống của tôi.

Sau khi loại bỏ virtualenv cũ, bị hỏng, vấn đề của tôi biến mất.


6

Trong python3.6 tôi đã thử python3 -m venv myenv, theo tài liệu, nhưng nó đã mất quá nhiều thời gian. Vì vậy, lệnh rất đơn giản và nhanh chóng là python -m venv yourenv Nó hoạt động với tôi trên python3.6.


5

Trên Mac tôi phải làm như sau để nó hoạt động.

mkvirtualenv --python=/usr/bin/python3 YourEnvNameHere

Để tìm chính xác nơi phiên bản python mong muốn của bạn là sử dụng vị trí which python2.7hoặc which python3.5hoặc which python3.6, sau đó thay thế về--python=DIRECTORY
Santhosh

3

Nếu bạn cài đặt python3 ( brew install python3) cùng với virtualenv burrito , thì bạn có thể làm mkvirtualenv -p $(which python3) env_name

Tất nhiên, tôi biết virtualenv burrito chỉ là một trình bao bọc, nhưng nó đã phục vụ tôi rất tốt trong nhiều năm qua, làm giảm một số đường cong học tập.


3

virtualenv --python=/usr/local/bin/python3 <VIRTUAL ENV NAME> điều này sẽ thêm đường dẫn python3 cho môi trường ảo của bạn.


2

Nó làm việc cho tôi

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

2

Đối với những người gặp rắc rối khi làm việc với Anaconda3 (Python 3).

Bạn đã có thể sử dụng

conda create -n name_of_your_virtualenv python=python_version 

Để kích hoạt môi trường (Linux, MacOS)

source activate name_of_your_virtualenv

Cho cửa sổ

activate name_of_your_virtualenv

1

Tôi đã thử tất cả những thứ trên, nó vẫn không hoạt động. Vì vậy, như một kẻ vũ phu, tôi chỉ cần cài đặt lại anaconda, cài đặt lại virtualenv ... và nó đã hoạt động.

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$ 

1

Tôi muốn giữ python 2.7.5 làm phiên bản mặc định trên Centos 7 nhưng có python 3.6.1 trong môi trường ảo chạy cùng với các môi trường ảo khác trong python 2.x

Tôi tìm thấy liên kết dưới đây là giải pháp tốt nhất cho phiên bản python mới nhất (python 3.6.1) https://www.digitalocean.com/community/tutorial_series/how-to-install-and-set-up-a-local-programming -envir-for-python-3 . Nó hiển thị các bước cho các nền tảng khác nhau nhưng các bước cơ bản là

  1. Cài đặt python3.x (nếu không có) cho nền tảng của bạn
  2. Cài đặt python3.x-devel cho nền tảng của bạn
  3. Tạo môi trường ảo trong python 3.x (ví dụ $ python3.6 -m venv virenv_test_p3 /)
  4. Kích hoạt môi trường thử nghiệm cho python 3.x (ví dụ nguồn virenv_test_p3 / bin / kích hoạt)
  5. Cài đặt các gói mà bạn muốn sử dụng trong môi trường ảo python 3 mới của bạn và được hỗ trợ (ví dụ: pip cài đặt Django == 1.11.2)

1

Các lệnh đơn giản dưới đây có thể tạo env ảo với phiên bản 3.5

apt-get install python3-venv

python3.5 -m venv <your env name>

nếu bạn muốn phiên bản env ảo là 3.6

python3.6 -m venv <your env name>

1

Dành cho những bạn đang sử dụng pipenv và muốn cài đặt phiên bản cụ thể:

pipenv install --python 3.6

0

Tôi đã gặp lỗi tương tự do nó là xung đột với cài đặt miniconda3 vì vậy khi bạn nhập "which virtualenv" và nếu bạn đã cài đặt miniconda và nó chỉ vào cài đặt đó, bạn có thể gỡ bỏ nó (nếu bạn giống tôi và không di chuyển với nó chưa) hoặc thay đổi biến môi trường của bạn để trỏ đến cài đặt bạn muốn.


0

Trên dòng lệnh Windows, phần sau đây làm việc cho tôi. Trước tiên hãy tìm vị trí thực thi python của bạn:

where python

Điều này sẽ xuất các đường dẫn đến python.exe khác nhau trên hệ thống của bạn. Đây là của tôi:

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

Vì vậy, đối với Python3, nó nằm ở đường dẫn đầu tiên cho tôi, vì vậy tôi cd vào thư mục gốc của ứng dụng nơi tôi muốn tạo thư mục môi trường ảo. Sau đó, tôi chạy đoạn mã sau bao gồm đường dẫn đến tệp thực thi Python3 của mình, đặt tên cho môi trường ảo của tôi là 'venv':

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

Tiếp theo, kích hoạt môi trường ảo:

call venv\Scripts\activate.bat

Cuối cùng, cài đặt các phụ thuộc cho môi trường ảo này:

pip install -r requirements.txt

Yêu cầu này có thể được điền thủ công nếu bạn biết các thư viện / mô-đun cần thiết cho ứng dụng của mình trong môi trường ảo. Nếu bạn có ứng dụng đang chạy trong môi trường khác, thì bạn có thể tự động tạo ra các phụ thuộc bằng cách chạy phần sau (cd vào thư mục ứng dụng trong môi trường nơi nó hoạt động):

pip freeze > requirements.txt

Sau đó, khi bạn có các yêu cầu.txt mà bạn đã 'đóng băng', thì bạn có thể cài đặt các yêu cầu trên một máy khác hoặc môi trường sạch với các mục sau (sau cd vào thư mục ứng dụng):

pip install -r requirements.txt

Để xem phiên bản python của bạn trong môi trường ảo, hãy chạy:

python --version

Sau đó, voila ... bạn có Python3 của bạn đang chạy trong môi trường ảo của bạn. Đầu ra cho tôi:

Python 3.7.2
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.