2011-01-29 34 views
5

Nếu tôi đang học phát triển python trên OSX (Snow Leopard), cách tốt nhất tôi nên quản lý gói python của mình?lời khuyên thông thường về quản lý gói python trên OSX dành cho người mới bắt đầu

Tôi rất vui mừng về số lượng lớn các gói python tuyệt vời trên mạng. Tôi rất thích bắt đầu học chúng, nhưng quản lý gói đã khiến tôi hoàn toàn bối rối. Rõ ràng là tôi không biết mình đang làm gì. Tôi thấy nhiều câu hỏi về Stack Overflow giải quyết việc quản lý gói và mọi người thường trả lời họ bằng cách nói "Tại sao bạn không chỉ sử dụng x? Hãy xem nó dễ dàng như thế nào trong dòng đơn này mà tôi đã sao chép từ vỏ của mình"

$ x install something 

Câu trả lời hay cho đến khi x không xử lý được một số phụ thuộc cụ thể hoặc không thể xử lý gói y. Dưới đây là những gì tôi đã cố gắng:

  1. Tôi bắt đầu chỉ cài đặt mọi thứ với easy_install.
  2. Tôi sớm nhận thấy rằng một số gói quan trọng bị thiếu phụ thuộc (PIL) vì vậy tôi đã tìm kiếm và phát hiện MacPorts.
  3. Tôi bắt đầu sử dụng MacPorts và tất cả các biến môi trường của tôi thực sự khó hiểu, vì vậy tôi đã học đủ bash để cấu hình lại PATH, PYTHONPATHsys.path để làm mọi thứ hoạt động (và làm cho cửa sổ đầu cuối của tôi trông thật ngọt). MacPorts có vẻ tuyệt vời trong một thời gian.
  4. Nhưng sau đó tôi đã nhầm lẫn về phiên bản của các mô-đun khác nhau mà tôi đang sử dụng và tôi tìm thấy nhiều vấn đề phụ thuộc hơn (GDAL) ...
  5. Sau đó, một số người rất thông minh khuyên tôi chuyển sang Homebrew. Vì vậy, tôi đã gỡ cài đặt MacPorts và cài đặt Homebrew.
  6. Bây giờ tôi có Homebrew, tôi không thể cài đặt nhiều thứ, bởi vì tôi không biết cách tạo Formula cho hầu hết các gói python mà tôi muốn sử dụng. Nếu một gói được liệt kê tại pypi, tôi không biết nếu tôi thực sự nên sử dụng Homebrew, hoặc chỉ tìm ra cách để cấu hình easy_install để cài đặt vào thư mục Homebrew. Và tôi vẫn không biết làm thế nào tôi nên tiếp cận thiếu phụ thuộc tốt nhất. Có lẽ có một số kho chứa bí mật của công thức liên quan đến python? hoặc một cách dễ dàng để chuyển đổi portfiles thành Công thức?

Tôi biết rằng câu trả lời đúng có thể phụ thuộc vào những gì tôi đang cố cài đặt.Tôi đang cố gắng để cài đặt bộ gói cho phép tôi:

  1. chơi xung quanh và tự động hóa tất cả mọi thứ với python
    • appscript
    • PIL
    • pygame
  2. làm công việc liên quan đến GIS trong python
    • gdal
    • quyến rũ
    • PostGIS
    • scipy
  3. khám phá những khả năng kỳ diệu của các ứng dụng web
    • django
    • google-app-engine

tôi 'hoàn toàn sẵn sàng xóa sạch mọi thứ khỏi máy tính của tôi, điều này phải hơi lộn xộn với các gói phần mềm bây giờ. Nếu tôi nên học virtualenv hoặc chỉ tìm hiểu thêm về quy trình cơ bản của việc kiểm tra các phụ thuộc và tự cài đặt chúng, tôi rất sẵn lòng làm điều đó. Nếu tôi chỉ nên đào sâu vào Homebrew, tôi cũng rất vui khi làm điều đó. Làm thế nào tôi nên đối phó với những vấn đề này, mà thường ngăn cản tôi làm những gì tôi thực sự muốn làm (làm cho công cụ gọn gàng với python)?

Trả lời

3

Theo tôi, cách tốt nhất để xử lý các gói python là phải có một bộ Python cài đặt tách biệt với Python hệ thống, một cho mỗi phiên bản bạn cần. Bằng cách này tôi không gây ô nhiễm python chính với các phiên bản cũ của gói, và tôi có thể xóa chúng và cài đặt lại chúng mà không có bất kỳ dự án của tôi có vấn đề.

Chi tiết:

Trên OS X, sử dụng phiên bản Macports là tốt. Điều này cũng đúng với homebrew, mặc dù tôi chưa bao giờ sử dụng nó. (Trên Linux tôi cài đặt Python từ nguồn vào/opt/pythonxx /, ví dụ/opt/python25 /,/opt/python26 /,/opt/python27 và/opt/python31.)

Sau đó tôi không bao giờ cài đặt bất kỳ gói vào những trăn, với ngoại lệ của virtualenv, distributepip, mà tôi cài đặt trong tất cả chúng. Khi tôi muốn cài đặt một gói phần mềm cho một dự án, tôi thực hiện một virtualenv cho dự án đó với phiên bản python tôi sử dụng cho nó:

$ cd /home/projects 
$ /opt/python27/bin/virtualenv acoolproject 
$ cd acoolproject 
$ ./bin/pip install ThepackageIneed. 

Khi bạn cài đặt từng dự án phụ thuộc riêng biệt, bạn tránh các vấn đề phụ thuộc và các cuộc xung đột phiên bản và phiên bản nhầm lẫn.

Bạn có thể kích hoạt và vô hiệu hóa các môi trường với virtualenv, tôi có xu hướng không bao giờ làm điều đó, tôi sử dụng python thực thi một cách rõ ràng thay vì:

$ ./bin/python main.py 

hoặc

$ /home7projects/acoolproject/bin/python 

Nếu tôi cần những điều mà bạn có thể 't chỉ cần cài đặt với pip, như Plone, hoặc nginx hoặc véc ni, tôi sử dụng zc.buildout để tạo ra một cấu hình môi trường có thể tái tạo, zc.buildout cũng sẽ chạy trong sự cô lập, vì vậy không có gói nào được cài đặt trong pythons chính.

6

Tôi sẽ đề xuất những điều sau đây một cách mạnh mẽ. Tôi sử dụng chúng để quản lý gói cơ bản.

Tutorial/blog mà nên giúp đỡ:

0

Nếu bạn đang sử dụng Homebrew, có thể bạn sẽ muốn sử dụng pip để cài đặt gói Python. pip có thể được cài đặt thông qua Homebrew, nhưng Homebrew không bao gồm các công thức cho các gói Python khác. Nhưng nó khá dễ dàng để cài đặt các gói sử dụng pip - đơn giản như

$ pip install <package> 

(Tên gói có thể được tìm thấy trên PyPI.) Nếu bạn cài đặt pip qua Homebrew, đó là tất cả bạn cần làm.

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