2017-02-01 26 views
18

Tôi cố gắng để cài đặt một gói Python với lệnh nàyVirtualenv là gì và tại sao tôi nên sử dụng nó?

pip install <name of package> 

tôi nhận được lỗi phép và tôi không chắc chắn lý do tại sao. Tôi có thể chạy nó với sudo, nhưng ai đó đã nói với tôi đó là một ý tưởng tồi, và tôi nên sử dụng một virtualenv thay thế.

Virtualenv là gì? Nó làm gì cho tôi?

+0

Đọc bài viết này: http://flask.pocoo.org/docs/0.12/installation/#virtualenv –

Trả lời

23

A virtualenv là bản cài đặt Python gọn nhẹ, độc lập. Chúng được thiết kế để được thiết lập với tối thiểu là phiền phức và "chỉ hoạt động" mà không yêu cầu kiến ​​thức chuyên sâu hoặc kiến ​​thức chuyên sâu.

Trong Python 3.3 hoặc mới hơn, bạn có thể tạo một virtualenv như sau:

$ python3 -m venv ENV_DIR 

Đối với Windows, bạn nên thay thế python3 với đường dẫn đầy đủ đến python.exe:

>C:\Python34\python.exe -m venv ENV_DIR 

(này là một cài đặt Python điển hình, hệ thống của bạn có thể thay đổi.)

Trong các phiên bản cũ hơn của Python, bao gồm Python 2, một trong các lệnh sau sẽ hoạt động trong hầu hết ca ses:

$ virtualenv ENV_DIR 
$ venv ENV_DIR 
$ pyvenv ENV_DIR 
$ pyvenv3 ENV_DIR 

ENV_DIR phải là một thư mục không tồn tại. Thư mục có thể có bất kỳ tên nào, nhưng để giữ cho các hướng dẫn này đơn giản, tôi sẽ giả sử bạn đã tạo virtualenv của mình trong một thư mục có tên là venv (ví dụ: python3 -m venv ./venv).

Để làm việc trong virtualenv, bạn kích hoạt nó:

$ . ./venv/bin/activate 
(venv)$ 

Hoặc sử dụng này nếu bạn có một hệ thống các cửa sổ:

$ venv\Scripts\activate 

Các (venv) tại dấu nhắc shell cho phép bạn biết được virtualenv bạn đã kích hoạt, nhưng bạn có thể tắt tính năng này nếu bạn không thích nó. Bạn có thể chạy tất cả các lệnh Python thường lệ, và họ sẽ có địa phương để virtualenv của bạn:

(venv)$ pip install requests numpy 
[...] 
(venv)$ python 
[...] 
>>> import requests 
>>> import numpy as np 
>>> 

python sẽ chạy phiên bản Python rằng bạn đã cài đặt thành virtualenv bạn, do đó (ví dụ), bạn không cần phải gõ python3 để lấy Python 3. Python nó chạy sẽ có quyền truy cập vào tất cả các mô-đun thư viện chuẩn và tất cả các gói bạn đã cài đặt vào virtualenv, nhưng (theo mặc định) không có gói nào được cài đặt trong thư mục site-packages toàn hệ thống. Quy tắc cuối cùng này rất quan trọng: bằng cách hạn chế virtualenv của bạn chỉ sử dụng các gói được cài đặt cục bộ, bạn có thể đảm bảo rằng bạn kiểm soát chính xác phụ thuộc của dự án của bạn, ngay cả khi một số gói hệ thống mới được cài đặt hoặc cập nhật vào tuần tới .Nếu bạn thích, bạn có thể nhận được một danh sách các gói cài đặt của bạn:

(venv)$ pip freeze 
requests==2.13.0 
numpy==1.12.0 
(venv)$ 

pip cũng có thể phân tích định dạng này và cài đặt từ nó, và nó sẽ cài đặt các phiên bản tương tự, ngay cả khi cập nhật đã được phát hành trong thời gian này:

(venv)$ pip freeze >requirements.txt 

(some-other-venv)$ pip install -r requirements.txt 
[...] 
(some-other-venv)$ python 
>>> import requests 
>>> import numpy as np 
>>> 

bạn có thể lấy ra khỏi virtualenv bằng cách khử hoạt nó:

(venv)$ deactivate 
$ python 
[...] 
>>> import requests 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
ImportError: No module named 'requests' 

bạn có thể tạo bao nhiêu virtualenvs như bạn muốn, và họ sẽ không int erfere với nhau, cũng không với các gói hệ thống của bạn. Một virtualenv là "chỉ" một thư mục với một loạt các tập tin nhị phân và kịch bản theo nó, vì vậy bạn có thể loại bỏ một virtualenv giống như cách bạn loại bỏ bất kỳ thư mục (rm -r venv trên Unix). Nếu virtualenv được kích hoạt khi bạn loại bỏ nó, bạn có thể gây nhầm lẫn shell của bạn, vì vậy nó có thể là một ý tưởng tốt để deactivate đầu tiên trong trường hợp đó.

1

Một số lần bạn không được cấp quyền root và bạn có thể sẽ không thể sử dụng sudo. Nhiều lần khác, không nên sử dụng sudo để cài đặt các gói vì nó có thể ghi đè lên một số gói có thể đang được sử dụng bởi một số ứng dụng khác.

Virtualenv có thể giúp bạn tạo một môi trường riêng biệt mà bạn không cần quyền root cũng như có thể điều chỉnh môi trường theo nhu cầu của bạn. Nó bao gồm cài đặt python độc lập chỉ tương tác với môi trường được tạo cụ thể của bạn. Vì vậy, về cơ bản, nó mang lại cho bạn một chút tự do cũng như tránh làm hỏng (hoặc sửa đổi) môi trường gốc có thể lưu trữ nhiều chức năng cũ của ứng dụng cũ.

Cài đặt cũng khá dễ dàng.

Các vấn đề liên quan