Sử dụng pip so với MacPorts để cài đặt các gói Python


12

Tôi có thể cài đặt một gói python ( ví dụ , numpy) trên máy Mac của tôi hoặc thông qua Macports:

port install py-numpy

hoặc thông qua pip:

pip install numpy

Những ưu / nhược điểm chung của từng phương pháp là gì? Khi nào nên sử dụng mỗi phương pháp?

  • Khi nào tôi nên thích cái này hơn cái kia?
  • Có vấn đề cho dù gói tôi đang cài đặt là nhỏ hay lớn (ví dụ numpy)?
  • Có phụ thuộc vào phiên bản python tôi đang sử dụng ( 2.xso với 3.x, hoặc của Apple pythonso với MacPort python) không?
  • Có vấn đề gì không nếu tôi có nhiều phiên bản pythoncài đặt trên máy Mac của mình?
  • Chúng có thể được sử dụng đồng thời?

Tôi hy vọng câu trả lời có một danh sách ngắn về một số ưu / nhược điểm của từng phương pháp với một số thảo luận về thời điểm nên chọn phương pháp này.


Liên quan, nhưng quá cụ thể: stackoverflow.com/questions/16895282/ trên . Tôi đang yêu cầu các gói python nói chung chứ không chỉ matplotlib.
jvriesem

AFAIK những cái này đã được cài đặt - bạn có thể kiểm tra trong terminal:> python và lệnh tiếp theo> nhập numpy là np và nếu không có lỗi thì bạn có nó. Giải pháp thay thế là sử dụng anaconda từ continuum.io/doads - có nhiều tính năng và cài đặt thêm với pip sẽ đi vào thư mục anaconda của bạn.
Yoan

@Yoan: numpychỉ là một ví dụ. Tôi đang hỏi về việc cài đặt các gói nói chung.
jvriesem

Câu trả lời:


3

Chúng có thể được sử dụng đồng thời, và không có vấn đề gì giữa việc trộn cả hai (với một cảnh báo lớn và gotcha ...)

Caveat

Thông báo trước là macports / homebrew và pip sẽ không có nhận thức về từng cái đã được cài đặt so với cái khác.

Vì vậy, ví dụ, giả sử bạn cài đặt python 3.6 trên máy Mac. Bạn muốn nltk, không có sẵn về mặt kỹ thuật cho phiên bản đó trên Macports, nhưng nó là trên pip. Vì vậy, bạn cài đặt trên pip. Hai tháng sau, bạn thấy nó được cài đặt trên Macports và chọn cài đặt nó. Bây giờ bạn có hai phiên bản khác nhau nltktrên máy của mình, vì vậy hãy cẩn thận .

Gotcha

Nếu bạn sử dụng pip với Macports, bạn cần đảm bảo rằng đó là pip được cài đặt thông qua Macports và được liên kết với phiên bản python đó. Vì vậy, ví dụ, bạn sẽ thấy một py35-pip, py36-pip, v.v.

Khi bạn cài đặt pip phù hợp, bạn sử dụng selectlệnh của Macports để đảm bảo rằng nó được kích hoạt với phiên bản python phù hợp:

sudo port select

Kinh nghiệm của tôi là cài đặt các mô-đun vào khu vực toàn cầu Python được tạo bởi MacPorts gây ra xung đột. Sớm hay muộn, MacPorts sẽ cố gắng cài đặt một cổng mà bạn đã cài đặt bằng pip. Nó sẽ đưa ra một thông báo lỗi về một tệp trong cổng đó hiện diện nhưng không được cài đặt bởi MacPorts. Tôi nghĩ câu trả lời của @ IanC là tốt hơn: cài đặt vào khu vực Python toàn cầu chỉ sử dụng MacPorts, chỉ cài đặt trong môi trường ảo chỉ bằng pip.
Jim DeLaHunt

4

Bạn nên sử dụng pipvì đó là công cụ gốc Python để quản lý cài đặt gói nhưng bạn không nên cài đặt mọi thứ vào cài đặt Python cơ bản. Có thể là một mớ hỗn độn khi phải sắp xếp các phụ thuộc phiên bản cố định giữa nhiều kho phần mềm nếu bạn đang cài đặt mọi thứ vào cài đặt Python cơ bản trên máy của mình.

Thay vào đó, bạn nên cài đặt virtualenv và sau đó sử dụng nó để quản lý các cài đặt Python ảo khác nhau và tất cả các gói gói cài đặt pip liên quan cho từng môi trường ảo.

Điều này cho phép bạn chuyển từ làm việc với, giả sử, beautifulsoup1.x trong một kho lưu trữ phần mềm sang beautifulsoup2.x trong kho lưu trữ khác mà không phải lội qua địa ngục quản lý phụ thuộc.


0

Tôi vừa thực hiện một thử nghiệm nhanh để tìm kiếm cùng một gói bằng Homebrew , MacPortspip3 :

brew search numpy
sudo port search --name --glob '*numpy'
pip3 search numpy

MacPorts pip3 có cùng gói (phiên bản 1.18.1 ), trong khi Homebrew có phiên bản 1.16 .

Khi cộng tác với những người khác, tốt nhất nên đồng ý về cách môi trường phát triển của bạn được định cấu hình hoặc bạn sẽ bắt đầu va chạm vào sự bất thường và nhận được các kết quả thử nghiệm khác nhau. Do đó, công cụ tốt nhất là công cụ mà tất cả các bạn đều đồng ý ;-)

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.