2009-07-31 35 views
117

Tôi bắt đầu học python và yêu thích nó. Tôi làm việc trên một máy Mac chủ yếu cũng như Linux. Tôi thấy rằng trên Linux (Ubuntu 9,04 chủ yếu) khi tôi cài đặt một mô-đun python bằng cách sử dụng apt-get nó hoạt động tốt. Tôi có thể nhập nó mà không gặp rắc rối gì.Cách tương thích nhất để cài đặt các mô-đun python trên máy Mac là gì?

Trên máy Mac, tôi đã quen với việc sử dụng Macports để cài đặt tất cả các thứ Unixy. Tuy nhiên, tôi thấy rằng hầu hết các mô-đun python tôi cài đặt với nó không được nhìn thấy bởi python. Tôi đã dành một số thời gian chơi xung quanh với các thiết lập PATH và sử dụng python_select. Không có gì đã thực sự làm việc và vào thời điểm này tôi không thực sự hiểu, thay vào đó tôi chỉ là poking xung quanh.

Tôi có ấn tượng rằng Macports không được yêu thích rộng rãi để quản lý các mô-đun python. Tôi muốn bắt đầu mới bằng cách sử dụng phương pháp tiếp cận "được chấp nhận" nhiều hơn (nếu đó là từ thích hợp).

Vì vậy, tôi đã tự hỏi, phương pháp mà các nhà phát triển Mac trăn sử dụng để quản lý các mô-đun của họ là gì?

câu hỏi Bonus:

Bạn có sử dụng python của Apple, hoặc một số phiên bản khác? Bạn có biên dịch mọi thứ từ nguồn hoặc có trình quản lý gói có hoạt động tốt hay không (Fink?).

+0

Có một bài viết tốt đẹp về đóng gói ứng dụng PyQt dành cho Mac OS X tại Ars Technica một khi trở lại: http://arstechnica.com/ mã nguồn mở/hướng dẫn/2009/03/cách triển khai-pyqt-ứng dụng-trên-windows-và-mac-os-x.ars – tgamblin

+7

MacPorts là hoàn hảo cho Python trên máy Mac. LƯU Ý: bạn cần phải cài đặt các gói Python thông qua MacPorts để chúng được cài đặt vào cài đặt MacPorts Python của bạn. Bạn cũng có thể cài đặt các gói mà không cần sử dụng MacPorts; tuy nhiên, bạn cần tạo phiên bản python đó mặc định thông qua python_select TRƯỚC KHI cài đặt gói. Nếu bạn cài đặt gói và sau đó sử dụng python_select, nó sẽ không tạo ra sự khác biệt, vì nó sẽ được cài đặt vào bất kỳ phiên bản Python nào là mặc định tại thời điểm cài đặt. –

Trả lời

138

Cách phổ biến nhất để quản lý gói python (nếu bạn không sử dụng trình quản lý gói hệ thống) là sử dụng setuptools và easy_install. Nó có thể đã được cài đặt trên hệ thống của bạn. Sử dụng nó như sau:

easy_install django 

easy_install sử dụng Python Package Index là tài nguyên tuyệt vời cho các nhà phát triển python. Có một cái nhìn xung quanh để xem những gì gói có sẵn.

Tùy chọn tốt hơn là pip, được tăng lực khi cố gắng fix a lot of the problems được liên kết với easy_install. Pip sử dụng cùng một kho lưu trữ gói như easy_install, nó chỉ hoạt động tốt hơn.Thực sự là thời gian sử dụng chỉ cần sử dụng easy_install là cho lệnh này:

easy_install pip 

Sau đó, sử dụng:

pip install django 

Tại một số điểm có thể bạn sẽ muốn tìm hiểu một chút về virtualenv. Nếu bạn làm rất nhiều phát triển python trên các dự án với các yêu cầu gói xung đột, virtualenv là một ơn trời. Nó sẽ cho phép bạn có các phiên bản hoàn toàn khác nhau của các gói khác nhau và chuyển đổi giữa các gói dễ dàng tùy theo nhu cầu của bạn.

Về việc python nào sử dụng, gắn với python của Apple sẽ cho bạn ít đau đầu nhất, nhưng nếu bạn cần phiên bản mới hơn (Leopard là 2.5.1 tôi tin), tôi sẽ đi với con trăn macports.

+4

Gần đây tôi đã xây dựng lại máy của mình và đã chuyển sang sử dụng chỉ Homebrew và PIP, đột nhiên tất cả các vấn đề về xây dựng mà tôi đã bỏ đi. – GloryFish

3

Bạn đã xem xét easy_install chưa? Nó sẽ không đồng bộ hóa macports hoặc bất cứ điều gì như thế của bạn, nhưng nó sẽ tự động tải về các gói mới nhất và tất cả phụ thuộc cần thiết, tức là

easy_install nose 

cho gói kiểm tra đơn vị mũi, hoặc

easy_install trac 

cho trac trình theo dõi lỗi.

Có thêm một chút thông tin trên trang EasyInstall của họ.

+1

easy_install là tốt. Chỉ cần lưu ý rằng, giống như bạn có thể có nhiều phiên bản của python được cài đặt, thật dễ dàng để có nhiều phiên bản của easy_install được cài đặt, mỗi phiên bản được liên kết với một cài đặt/phiên bản python khác nhau. Bạn chỉ cần đảm bảo rằng bạn hiểu bạn đang gọi cái nào (cái nào (1) có thể giúp ích). –

2

Khi bạn cài đặt mô-đun với MacPorts, nó không đi vào phiên bản Python của Apple. Thay vào đó, các mô đun đó được cài đặt vào phiên bản MacPorts của Python được chọn.

Bạn có thể thay đổi phiên bản Python nào được sử dụng theo mặc định bằng cách sử dụng cổng mac có tên là python_select. hướng dẫn here.

Ngoài ra, có easy_install. Mà sẽ sử dụng python để cài đặt các mô-đun python.

+0

'python_select' hiện không còn được dùng nữa, xem các câu trả lời mới hơn. – askewchan

-1

Tôi sử dụng easy_install bằng Python của Apple và nó hoạt động như một sự quyến rũ.

30

Vui lòng xem Python OS X development environment. Cách tốt nhất là sử dụng MacPorts. Tải về và cài đặt MacPorts, sau đó cài đặt Python qua MacPorts bằng cách gõ các lệnh sau trong Terminal:

 
sudo port install python26 python_select 
sudo port select --set python python26 

HOẶC

 
sudo port install python30 python_select 
sudo port select --set python python30 

Sử dụng các thiết lập đầu tiên của lệnh để cài đặt Python 2.6 và set thứ hai để cài đặt Python 3.0. Sau đó sử dụng:

 
sudo port install py26-packagename 

HOẶC

 
sudo port install py30-packagename 

Trong lệnh trên, thay thế packagename với tên của gói, ví dụ:

 
sudo port install py26-setuptools 

Những lệnh này sẽ tự động cài đặt gói (và các phụ thuộc của nó) cho phiên bản Python đã cho.

Đối với một danh sách đầy đủ các gói có sẵn cho Python, gõ:

 
port list | grep py26- 

HOẶC

 
port list | grep py30- 

Những lệnh bạn sử dụng phụ thuộc vào phiên bản Python bạn đã chọn để cài đặt.

+1

Để ghi lại, trong các phiên bản gần đây của MacPorts 'sudo python_select python30' đã được thay thế bằng' sudo port select --set python python30'. –

6

Không có gì sai khi sử dụng cài đặt MacPorts Python. Nếu bạn đang cài đặt các mô-đun python từ MacPorts nhưng sau đó không nhìn thấy chúng, có thể có nghĩa là bạn không gọi python MacPorts mà bạn đã cài đặt. Trong một trình bao đầu cuối, bạn có thể sử dụng các đường dẫn tuyệt đối để gọi các Pythons khác nhau có thể được cài đặt.Ví dụ:

$ /usr/bin/python2.5   # Apple-supplied 2.5 (Leopard) 
$ /opt/local/bin/python2.5 # MacPorts 2.5 
$ /opt/local/bin/python2.6 # MacPorts 2.6 
$ /usr/local/bin/python2.6 # python.org (MacPython) 2.6 
$ /usr/local/bin/python3.1 # python.org (MacPython) 3.1 

Để có được trăn đúng theo mặc định yêu cầu đảm bảo trình bao $ PATH của bạn được đặt đúng để đảm bảo rằng thực thi đúng được tìm thấy trước. Một giải pháp khác là xác định bí danh vỏ cho các trăn khác nhau.

Cài đặt python.org (MacPython) cũng tốt, như những người khác đã đề xuất. easy_install có thể giúp nhưng, một lần nữa, bởi vì mỗi cá thể Python có thể có lệnh easy_install riêng của mình, hãy chắc chắn rằng bạn đang gọi đúng easy_install.

+2

Nếu anh ta sử dụng MacPorts, cách chính xác để làm cho phiên bản của Python mặc định không phải là lộn xộn với PATH, nhưng để cài đặt "python_select" và để nó tự động chuyển các liên kết tượng trưng cần thiết để làm cho phiên bản của Python mặc định. –

+3

python_select chỉ quản lý các liên kết python trong/opt/local/bin và không đảm bảo rằng/opt/local/bin xuất hiện trước/usr/local/bin hoặc/usr/bin trong $ PATH của bạn (mặc dù cài đặt ban đầu của MacPorts làm như vậy). Vấn đề là, với nhiều phiên bản có sẵn, chỉ sử dụng "python" hoặc thậm chí "python2.5" là một chút của một crapshoot nói chung: bạn không biết Python nào bạn sẽ kết thúc trừ khi bạn nhận thức được $ PATH cạm bẫy và/hoặc sử dụng đường dẫn tuyệt đối. –

7

tôi sử dụng MacPorts để cài đặt Python và bất kỳ các module của bên thứ ba theo dõi bởi MacPorts vào /opt/local, và tôi cài đặt bất kỳ module được cài đặt bằng tay (những người không trong kho MacPorts) vào /usr/local, và điều này đã không bao giờ gây ra bất kỳ vấn đề. Tôi nghĩ bạn có thể bị nhầm lẫn khi sử dụng một số kịch bản MacPorts và biến môi trường nhất định.

MacPorts python_select được sử dụng để chọn phiên bản "hiện tại" của Python, nhưng không liên quan gì đến các mô-đun. Điều này cho phép bạn, ví dụ: cài đặt cả Python 2.5 và Python 2.6 bằng MacPorts và chuyển đổi giữa các lần cài đặt.

Biến môi trường $PATH không không ảnh hưởng đến những gì Mô-đun Python được tải. $PYTHONPATH là những gì bạn đang tìm kiếm. $PYTHONPATH nên trỏ đến các thư mục chứa các mô-đun Python bạn muốn tải. Trong trường hợp của tôi, biến số $PYTHONPATH của tôi chứa /usr/local/lib/python26/site-packages. Nếu bạn sử dụng Python của MacPorts, nó sẽ thiết lập các thư mục thích hợp khác cho bạn, vì vậy bạn chỉ cần thêm các đường dẫn bổ sung tới $PYTHONPATH. Nhưng một lần nữa, $PATH không được sử dụng chút nào khi Python tìm kiếm các mô-đun bạn đã cài đặt.

$PATH sử dụng để tìm thực thi, vì vậy nếu bạn cài đặt MacPorts' Python, hãy chắc chắn /opt/local/bin là trong $PATH của bạn.

3

Để cài đặt MacPython, tôi tìm thấy một giải pháp hiệu quả để sửa chữa các vấn đề với setuptools (easy_install) trong bài viết trên blog này:

http://droidism.com/getting-running-with-django-and-macpython-26-on-leopard

Một mẹo tiện dụng bao gồm việc tìm kiếm ra những phiên bản của python đang hoạt động trong các thiết bị đầu cuối:

which python 
6

Nếu bạn sử dụng Python từ MacPorts, nó đã nó easy_install riêng nằm tại địa chỉ: /opt/local/bin/easy_install-2.6 (ví py26, tha t là). Nó không phải là một trong những giống như chỉ đơn giản là gọi easy_install trực tiếp, ngay cả khi bạn sử dụng python_select để thay đổi lệnh python mặc định của bạn.

+1

Tương tự cho pip. Với thiết lập MacPorts của tôi, tôi chạy pip-2.6 (có trong/opt/local/bin /) để cài đặt các mô-đun python chơi tốt với python MacPorts. Bạn có thể 'sudo port install py2.6-pip' để lấy pip. – zlovelady

40

Câu hỏi của bạn đã được ba tuổi và có một số chi tiết không được đề cập trong câu trả lời khác:

Hầu hết mọi người tôi biết sử dụng HomeBrew hoặc MacPorts, tôi thích MacPorts vì cắt sạch của một mặc định những gì là Mac OS Môi trường X và thiết lập phát triển của tôi.Chỉ cần di chuyển thư mục /opt của bạn và kiểm tra các gói của bạn với môi trường Python thông thường của người dùng

MacPorts chỉ di động trong Mac, nhưng với easy_install hoặc pip bạn sẽ tìm hiểu cách thiết lập môi trường trong bất kỳ nền tảng nào (Win/Mac/Linux/Bsd ...). Hơn nữa, nó sẽ luôn được cập nhật hơn và có nhiều gói hơn

Cá nhân tôi cho phép MacPorts xử lý các mô-đun Python của tôi để cập nhật mọi thứ. Giống như bất kỳ trình quản lý gói cao cấp nào khác (ví dụ: apt-get), nó sẽ tốt hơn cho việc nâng các mô-đun với nhiều phụ thuộc nhị phân. Không có cách nào tôi sẽ xây dựng các ràng buộc Qt của tôi (PySide) với easy_install hoặc pip. Qt là rất lớn và mất rất nhiều để biên dịch. Ngay khi bạn muốn gói Python cần thư viện được các chương trình không Python sử dụng, hãy cố gắng tránh easy_install hoặc pip

Tại một số điểm bạn sẽ thấy rằng có một số gói bị thiếu trong MacPorts. Tôi không tin rằng MacPorts sẽ bao giờ cung cấp cho bạn toàn bộ CheeseShop. Ví dụ, gần đây tôi cần mô-đun Elixir, nhưng MacPorts chỉ cung cấp py25-elixir và py26-elixir, không có phiên bản py27. Trong những trường hợp như thế này bạn có:

pip-2.7 cài đặt elixir --user

(chắc chắn rằng bạn luôn gõ pip- (phiên bản))

Điều đó sẽ xây dựng một thư viện Python thêm trong thư mục nhà của bạn. Có, Python sẽ làm việc với nhiều vị trí thư viện: một được kiểm soát bởi MacPorts và một địa chỉ người dùng cục bộ cho mọi thứ bị thiếu trong MacPorts.

Bây giờ, hãy chú ý rằng tôi ủng hộ pip qua easy_install. Có một lý do chính đáng là bạn nên tránh setuptools và easy_install. Đây là good explanation và tôi cố gắng tránh xa chúng. Một tính năng rất hữu ích của pip được tạo cho bạn một danh sách tất cả các module (cùng phiên bản của họ) mà bạn cài đặt với MacPorts, easy_install và pip bản thân:

pip-2.7 đóng băng

Nếu bạn đã bắt đầu sử dụng easy_install, đừng lo lắng, pip có thể nhận ra mọi thứ đã được thực hiện bởi easy_install và thậm chí nâng cấp các gói được cài đặt với nó.

Nếu bạn là nhà phát triển, hãy theo dõi virtualenv để kiểm soát các thiết lập khác nhau và kết hợp các phiên bản mô-đun. Các câu trả lời khác đã đề cập đến nó, những gì không được đề cập cho đến nay là mô-đun Tox, một công cụ để kiểm tra gói của bạn cài đặt đúng với các phiên bản Python khác nhau.

Mặc dù tôi thường không có xung đột phiên bản, tôi muốn có virtualenv để thiết lập môi trường trong sạch và có được cái nhìn rõ ràng về các gói phụ thuộc của tôi. Bằng cách đó tôi không bao giờ quên bất kỳ phụ thuộc nào trong setup.py

Nếu bạn đi tìm MacPorts, hãy nhớ rằng nhiều phiên bản của cùng một gói không được chọn nữa như kiểu Debian cũ với gói python_select bổ sung (nó vẫn ở đó khả năng tương thích).Bây giờ bạn có lệnh select để chọn Python phiên bản sẽ được sử dụng (thậm chí bạn có thể chọn những người của Apple được cài đặt):

$ port select python 
Available versions for python: 
    none 
    python25-apple 
    python26-apple 
    python27 (active) 
    python27-apple 
    python32 

$ port select python python32 

Thêm tox trên đầu trang của nó và các chương trình của bạn nên được thực sự di

-1

Trực tiếp cài đặt một trong các gói Fink (Django 1.6 như năm 2013-tháng mười một)

fink install django-py27 
fink install django-py33 

Hoặc tạo cho mình một virtualenv:

fink install virtualenv-py27 
virtualenv django-env 
source django-env/bin/activate 
pip install django 
deactivate # when you are done 
.210

Hoặc sử dụng Fink django cộng với bất kỳ gói pip cài đặt khác trong một virtualenv

fink install django-py27 
fink install virtualenv-py27 
virtualenv django-env --system-site-packages 
source django-env/bin/activate 
# django already installed 
pip install django-analytical # or anything else you might want 
deactivate # back to your normally scheduled programming 
Các vấn đề liên quan