easy_install / pip hoặc apt-get


30

Như đã lưu ý trong trang wiki Ubuntu trên Rails , đá quý nên quản lý các phụ thuộc Rails / Ruby của bạn.

Thực hành tốt nhất với các gói Python như Django là gì? Tôi có nên cài đặt chúng thông qua apt-get hay tôi nên để easy_install / pip tìm nạp chúng từ PyPi?

Câu trả lời:


29

Có một số đối số:

  1. Sử dụng Kho / PPA vì chúng sẽ giúp bạn luôn ổn định và cập nhật với các bản sửa lỗi bảo mật.

    Điều này chủ yếu là đúng. Nếu, ví dụ, nếu bạn cài đặt python-djangonhư tôi có, bạn sẽ nhận được các bản cập nhật bảo mật. Điều này là tốt bởi vì bạn chỉ phải theo kịp apt nhưng bạn vẫn phải kiểm tra mọi thứ trước khi bạn đẩy các bản cập nhật (mặc dù việc kiểm tra sẽ ổn mỗi lần).

    Bạn có thể lập luận rằng nếu bạn đã sử dụng pip, bạn có thể không bao giờ kiểm tra cập nhật.

  2. Sử dụng pipđể bạn có thể sử dụng các phiên bản "ổn định" thích hợp.

    Không có nghi ngờ gì về điều đó: Các repos tụt hậu so với thế giới thực. Django là 2.0 nhưng bản repos cho phiên bản LTS của Ubuntu (rất nhiều người gắn bó với máy chủ) bạn chỉ nhận được 1.8 trên Ubuntu 16.4 lts với Python 2 nhưng vẫn nhận được cập nhật bảo mật trên nó.

    pipcung cấp cho bạn mới nhất mọi lúc. Bạn chỉ cần cập nhật chúng cho mình.

  3. Nâng cấp cài đặt Python được sử dụng lại có thể là một cơn ác mộng

    Khi bạn nâng cấp Ubuntu lên phiên bản tiếp theo, nó sẽ nâng cấp rất nhiều gói. Rất nhiều thứ thay đổi. Tôi biết trong Django, điều này có nghĩa là bạn phải cẩn thận để đề phòng sự không tương thích về mã, sự phản đối ... Nhưng điều tương tự cũng áp dụng cho tất cả các mã Python khác.

    Điều tương tự cũng đúng pipnhưng với pipbạn có thể làm một việc tại một thời điểm. Bạn biết những gì gây ra vấn đề để bạn biết nơi để tìm cách khắc phục.

  4. pip+ virtualenvcho phép bạn giữ mọi thứ riêng biệt

    virtualenvcho phép bạn có các môi trường Python nhỏ, di động. Điều này cho phép bạn có một số môi trường Python khác nhau chạy cùng nhau trên cùng một máy.

    Lợi ích rõ ràng dường như là để bảo trì vì bạn có thể quản lý môi trường giống như cách bạn quản lý mã. Ngay cả lưu trữ môi trường trong VCS nữa ... nhưng bạn nên nhớ rằng có mười hai virtualenvs khác nhau có nghĩa là mười hai môi trường bạn cần kiểm tra và cập nhật.


Chỉnh sửa: Sau một loạt các nâng cấp khủng khiếp trên máy chủ để chuyển nó từ Lucid sang Chính xác, tôi đã chuyển từ một hỗn hợp Apt + pip (nr 1 và 2) sang tình huống pip + virtualenv (nr. 4) thuần túy. Thay vì có một virtualenv trên mỗi trang web, tôi đã có một chia sẻ giữa một chục trang web. Điều này đang làm việc cho bây giờ.

Tôi cũng đã phải viết một đoạn script nhỏ để kiểm tra trạng thái của các gói được cài đặt với pip. Nếu có bản cập nhật, tôi phải áp dụng chúng theo cách thủ công (điều này tốt vì tôi đã kiểm tra chúng cục bộ, trong một virtualenv cục bộ). Đây là tất cả vẫn còn một chút đau đớn hơn so với ban đầu nhưng tốt hơn nhiều về lâu dài.


10
  • Gói từ kho

    Chúng nên được cài đặt bất cứ khi nào ứng dụng của bạn theo một cách nào đó cụ thể cho Ubuntu . Họ đảm bảo cho bạn một phiên bản ổn định mà bạn có thể cài đặt trên các máy Ubuntu, chúng được hỗ trợ và đôi khi trưởng thành hơn so với phiên bản bạn nhận được thông qua pip. Nếu bạn triển khai một loạt các máy chủ Ubuntu, hoặc nếu bạn đang viết một ứng dụng Ubuntu, hãy sử dụng chúng, nếu có .

    Chúng đôi khi cũng chứa các sửa đổi dành riêng cho Ubuntu.

  • pip vs easy_install

    Không có nhiều điều để nói về những điều đó, như tin tặc Django James Bennett nói:

    Xin vui lòng, vì tình yêu của Guido, hãy ngừng sử dụng setuptools và easy_install, và sử dụng distutils và pip thay thế.

    Để thảo luận chuyên sâu về sự khác biệt, hãy xem Trên bao bì của James Bennett (của django) và Một vài điều chỉnh cho các món ăn trên bao bì của Ian Bicking (của mozilla).

Nếu bạn muốn an toàn, hãy thử triển khai pip của bạn bằng virtualenv . Điều này cung cấp cho bạn một môi trường python bị cô lập, vì vậy bạn có thể chắc chắn rằng ứng dụng của bạn sẽ chạy trên bất kỳ máy nào.

Đợi một chút, tôi tin rằng một số người sẽ không đồng ý với tôi.

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.