Sự khác biệt giữa pyenv, virtualenv, anaconda là gì?


141

Tôi là một lập trình viên ruby ​​đang cố gắng học trăn. Tôi là một gia đình xinh đẹp với pyenv vì nó giống như một bản sao và dán từ rbenv. Pyenv giúp cho phép có nhiều hơn một phiên bản trăn trong một hệ thống và cũng để cách ly con trăn mà không chạm vào phần nhạy cảm của hệ thống.

Tôi cho rằng mỗi cài đặt python đi kèm với gói pip. Những gì tôi vẫn không hiểu là, có rất nhiều lib python tốt ngoài đó đề nghị sử dụng virtualenv và anaconda này. Tôi thậm chí có thể tìm thấy plugin virtualenv cho pyenv.

Bây giờ tôi đang bị lẫn lộn với mục đích của hai pyenv và virtualenv. tệ hơn bên trong pyenv có một plugin virtualenv.

câu hỏi của tôi là:

  • sự khác biệt giữa pyenv và virtualenv là gì?
  • Có sự khác biệt nào trong việc sử dụng lệnh pip bên trong cả pyenv và virtualenv không?
  • pyenv virutalenv này làm gì?

giải thích của bạn với ví dụ sẽ được đánh giá cao.



Câu trả lời:


152

Chỉnh sửa: Đó là đáng nói pipở đây là tốt, như condapipcó điểm tương đồng và khác biệt có liên quan đến chủ đề này .

pip: Trình quản lý gói Python.

  • Bạn có thể nghĩ piplà con trăn tương đương với gemlệnh ruby
  • pip không được bao gồm với python theo mặc định.
  • Bạn có thể cài đặt Python bằng homebrew , nó sẽ tự động cài đặt pip:brew install python
  • Phiên bản cuối cùng của OSX không bao gồm pip theo mặc định. Để thêm pip vào phiên bản python của hệ thống mac, bạn có thểsudo easy_install pip
  • Bạn có thể tìm và xuất bản các gói python bằng PyPI: The Python Gói Index
  • Tệp tests.txt có thể so sánh với ruby gemfile
  • Để tạo một tệp văn bản yêu cầu, pip freeze > requirements.txt
  • Lưu ý, tại thời điểm này, chúng tôi đã cài đặt python trên hệ thống của chúng tôi và chúng tôi đã tạo một tệp tests.txt phác thảo tất cả các gói python đã được cài đặt trên hệ thống của bạn.

pyenv: Trình quản lý phiên bản Python

  • Từ các tài liệu : pyenv cho phép bạn dễ dàng chuyển đổi giữa nhiều phiên bản Python. Nó đơn giản, không phô trương và tuân theo truyền thống UNIX của các công cụ đơn mục đích làm tốt một việc. Dự án này được chia rẽ từ rbenv và ruby-build và được sửa đổi cho Python.
  • Nhiều người ngại sử dụng python3 .
  • Nếu bạn cần sử dụng các phiên bản khác nhau của python, pyenvcho phép bạn quản lý việc này một cách dễ dàng.

virtualenv: Trình quản lý môi trường Python.

  • Từ các tài liệu : Vấn đề cơ bản đang được giải quyết là một trong những phụ thuộc và phiên bản, và các quyền gián tiếp. Hãy tưởng tượng bạn có một ứng dụng cần phiên bản 1 của LibFoo, nhưng một ứng dụng khác yêu cầu phiên bản 2. Làm thế nào bạn có thể sử dụng cả hai ứng dụng này? Nếu bạn cài đặt mọi thứ vào /usr/lib/python2.7/site-packages (hoặc bất kể vị trí tiêu chuẩn của nền tảng của bạn là gì), bạn sẽ dễ dàng gặp phải tình huống nâng cấp ứng dụng không nên nâng cấp.
  • Để tạo một virtualenv, chỉ cần gọi virtualenv ENV, nơi ENVlà một thư mục để đặt môi trường ảo mới.
  • Để khởi tạo virtualenv, bạn cần phải source ENV/bin/activate. Để ngừng sử dụng, chỉ cần gọi deactivate.
  • Khi bạn kích hoạt virtualenv, bạn có thể cài đặt tất cả các yêu cầu gói của không gian làm việc bằng cách chạy pip install -rvới requirements.txttệp của dự án .

Anaconda: Quản lý gói + Quản lý môi trường + Thư viện khoa học bổ sung.

  • Từ các tài liệu : Anaconda 4.2.0 bao gồm cài đặt dễ dàng Python (2.7.12, 3.4.5 và / hoặc 3.5.2) và cập nhật của hơn 100 gói Python khoa học và phân tích được xây dựng và thử nghiệm bao gồm NumPy, Pandas , SciPy, Matplotlib và IPython, với hơn 620 gói có sẵn thông qua một đơn giảnconda install <packagename>
  • Là một nhà phát triển web, tôi đã không sử dụng Anaconda. Đó là ~ 3GB bao gồm tất cả các gói.
  • Có một minicondaphiên bản rút gọn, có vẻ như đó có thể là một tùy chọn đơn giản hơn so với sử dụng pip+ virtualenv, mặc dù tôi không có kinh nghiệm sử dụng cá nhân.
  • Mặc dù condacho phép bạn cài đặt các gói, các gói này tách biệt với các gói PyPI, do đó bạn vẫn có thể cần sử dụng thêm pip tùy thuộc vào loại gói bạn cần cài đặt.

Xem thêm:


3
Điều này có thể có thể sử dụng làm mới ngay bây giờ, cf stackoverflow.com/a/49084152/14420
matt wilkie

9
Điều này có thể được cập nhật để đưa vào pipenv vì hiện tại nó có vẻ là công cụ đóng gói Python được đề xuất chính thức từ Python.org?
Wavesailor

1
Có vấn đề gì với việc cài đặt một thư viện trị giá 3 GB? Bạn sẽ không muốn triển khai tất cả các thư viện đó, nhưng chỉ vì bạn đã cài đặt thư viện trị giá 3 GB không có nghĩa là bạn cần triển khai tất cả các thư viện đó. Và đó là một lượng nhỏ dung lượng ổ cứng ngày nay. Tôi hiện đang sử dụng cài đặt anaconda và họ quản lý môi trường của tôi với venv, nhưng tôi đang xem xét liệu có nên sử dụng conda cho môi trường ảo của mình không (tôi không nghĩ rằng tôi sẽ - venv có vẻ như là một công việc trơn tru hơn đối với tôi).
David

@David Tôi hơi muộn, nhưng bạn có thể mở rộng trên venv có vẻ như là một công việc trơn tru hơn với tôi không?
AMC

1

Tương tự đơn giản:

  • pyenv ~ rbenv
  • pip ~ bó
  • ảo env ~ gemet trong rvm. Điều này có thể được quản lý bởi bundler trực tiếp mà không cần gemet.

Vì tôi sử dụng python3 nên tôi thích môi trường ảo tích hợp python3 có tên venv . venv rất đơn giản và dễ sử dụng. Tôi muốn giới thiệu bạn đọc tài liệu chính thức của nó. Các tài liệu ngắn gọn và súc tích.

Trong ruby, chúng ta không thực sự cần một môi trường ảo vì người đóng gói chăm sóc nó. Cả env ảo và bundler đều tuyệt vời nhưng chúng có khái niệm khác nhau nhưng chúng cố gắng giải quyết cùng một vấn đề.

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.