Tôi sẽ chỉ tránh sử dụng virtualenv
sau Python3.3 + và thay vào đó sử dụng thư viện vận chuyển tiêu chuẩn venv
. Để tạo một môi trường ảo mới, bạn sẽ gõ:
$ python3 -m venv <MYVENV>
virtualenv
cố gắng sao chép nhị phân Python vào thư mục bin của môi trường ảo. Tuy nhiên, nó không cập nhật các liên kết tệp thư viện được nhúng vào nhị phân đó, vì vậy nếu bạn xây dựng Python từ nguồn vào một thư mục không có hệ thống với các tên đường dẫn tương đối, thì nhị phân Python bị phá vỡ. Vì đây là cách bạn tạo một bản sao phân phối Python, nó là một lỗ hổng lớn. BTW để kiểm tra các liên kết tệp thư viện nhúng trên OS X, sử dụng otool
. Ví dụ từ trong môi trường ảo của bạn, gõ:
$ otool -L bin/python
python:
@executable_path/../Python (compatibility version 3.4.0, current version 3.4.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1238.0.0)
Do đó, tôi sẽ tránh virtualenvwrapper
và pipenv
. pyvenv
bị phản đối pyenv
dường như được sử dụng thường xuyên ở những nơi virtualenv
được sử dụng nhưng tôi cũng sẽ tránh xa nó vì tôi nghĩ venv
cũng làm những gì pyenv
được xây dựng cho.
venv
tạo các môi trường ảo trong hệ vỏ mới và được hộp cát , với các thư viện có thể cài đặt được và người dùng có thể sử dụng nhiều python . Mới mẻ vì môi trường ảo chỉ bắt đầu với các thư viện tiêu chuẩn đi kèm với python, bạn phải cài đặt lại bất kỳ thư viện nào khác pip install
trong khi môi trường ảo đang hoạt động. Sandboxed vì không có cài đặt thư viện mới nào có thể nhìn thấy bên ngoài môi trường ảo, vì vậy bạn có thể xóa toàn bộ môi trường và bắt đầu lại mà không lo ảnh hưởng đến cài đặt python cơ sở của bạn. Thư viện do người dùng cài đặt vì thư mục đích của môi trường ảo được tạo mà không cósudo
trong một số thư mục bạn đã sở hữu, vì vậy bạn sẽ không cần sudo
quyền để cài đặt thư viện vào đó. Cuối cùng, nó là an toàn cho nhiều python , vì khi môi trường ảo kích hoạt, shell chỉ nhìn thấy phiên bản python (3.4, 3.5, v.v.) được sử dụng để xây dựng môi trường ảo đó.
pyenv
tương tự như venv
ở chỗ nó cho phép bạn quản lý nhiều môi trường python. Tuy nhiên, với việc pyenv
bạn không thể tiện lợi cài đặt thư viện rollback vào một số trạng thái bắt đầu và bạn có thể sẽ cần admin
đặc quyền tại một số điểm để cập nhật thư viện. Vì vậy, tôi nghĩ rằng nó cũng là tốt nhất để sử dụng venv
.
Trong vài năm qua, tôi đã tìm thấy nhiều vấn đề trong các hệ thống xây dựng (gói emacs, trình xây dựng ứng dụng độc lập python, trình cài đặt ...) mà cuối cùng lại gặp vấn đề virtualenv
. Tôi nghĩ python sẽ là một nền tảng tốt hơn khi chúng tôi loại bỏ tùy chọn bổ sung này và chỉ sử dụng venv
.