Cách tương thích nhất để cài đặt các mô-đun python trên máy Mac là gì?


125

Tôi đang bắt đầu học trăn và yêu nó. Tôi làm việc trên máy Mac chủ yếu cũng như Linux. Tôi đang tìm thấy điều đó trên Linux (chủ yếu là Ubuntu 9.04) khi tôi cài đặt mô-đun python bằ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.

Trên Mac, tôi đã quen với việc sử dụng Macports để cài đặt tất cả những 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 bị python nhìn thấy. Tôi đã dành một chút thời gian để chơi xung quanh với các cài đặt PATH và sử dụng python_select. Không có gì thực sự hiệu quả và tại thời điểm này tôi không thực sự hiểu, thay vào đó tôi chỉ chọc ngoáy.

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

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

Câu hỏi thưởng:

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


Có một bài viết rất hay về việc đóng gói các ứng dụng PyQt cho Mac OS X tại Ars Technica một thời gian trước: arstechnica.com/open-source/guides/2009/03/ Lỗi
Todd Gamblin

7
MacPorts hoàn hảo cho Python trên Mac. LƯU Ý: bạn cần cài đặt các gói Python thông qua MacPorts để chúng được cài đặt vào bản 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 phiên bản python đó thành 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.
Michael Aaron Safyan

Câu trả lời:


144

Cách phổ biến nhất để quản lý các gói python (nếu bạn không sử dụng trình quản lý gói hệ thống của mình) 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ư thế này:

easy_install django

easy_install sử dụng Chỉ số gói Python là một 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ói có sẵn.

Một tùy chọn tốt hơn là pip , đang đạt được lực kéo, vì nó cố gắng khắc phục rất nhiều vấn đề liên quan đến 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ự thời gian sử dụng duy nhất 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 bạn có thể sẽ muốn tìm hiểu một chút về virtualenv . Nếu bạn thực hiện nhiều phát triển python trên các dự án 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 chúng dễ dàng tùy theo nhu cầu của bạn.

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


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

42

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ác câu trả lời khác:

Hầu hết mọi người tôi biết đều sử dụng HomeBrew hoặc MacPorts , tôi thích MacPorts hơn vì nó hoàn toàn là môi trường Mac OS X mặc định 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 người dùng bình thường

MacPorts chỉ có thể 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 của mình 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à với nhiều gói hơn

Cá nhân tôi để 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 cấp cao nào khác (ví dụ: apt-get), sẽ tốt hơn nhiều 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 có thể xây dựng các ràng buộc Qt (PySide) của mình bằng 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 có gói Python cần thư viện được sử dụng bởi các chương trình không phải Python, 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ẽ 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ó:

cài đặt pip-2.7 - thuốc tiên

(đảm bảo bạn luôn gõ pip- (phiên bản))

Điều đó sẽ xây dựng một thư viện Python bổ sung trong thư mục nhà của bạn. Có, Python sẽ hoạt động với nhiều hơn một vị trí thư viện: một vị trí được điều khiển bởi MacPorts và một địa phương người dùng cho mọi thứ còn thiếu trong MacPorts.

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

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ằng 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 để mắt đến virtualenv để kiểm soát các thiết lập và kết hợp các phiên bản mô-đun khác nhau. Các câu trả lời khác đã đề cập đến nó, điều chưa được đề cập cho đến nay là mô-đun Tox , một công cụ để kiểm tra rằng gói của bạn cài đặt chính xác 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ột môi trường sạch sẽ và có được cái nhìn rõ ràng về các phụ thuộc gói của tôi. Bằng cách đó, tôi không bao giờ quên bất kỳ sự phụ thuộc nào trong setup.py của mình

Nếu bạn dùng MacPort, hãy lưu ý rằng nhiều phiên bản của cùng một gói sẽ không được chọn nữa như kiểu Debian cũ với gói python_select bổ sung (nó vẫn ở đó để tương thích). Bây giờ bạn có lệnh select để chọn phiên bản Python nào sẽ được sử dụng (thậm chí bạn có thể chọn phiên bản Apple đã 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 độc tố lên trên và các chương trình của bạn phải thực sự di động


30

Xin vui lòng xem môi trường phát triển Python OS X . Cách tốt nhất là sử dụng MacPorts . Tải xuống và cài đặt MacPorts, sau đó cài đặt Python qua MacPorts bằng cách nhập các lệnh sau trong Terminal:

cổng sudo cài đặt python26 python_select
cổng sudo chọn - set python python26

HOẶC LÀ

cổng sudo cài đặt python30 python_select
cổng sudo chọn --set python python30

Sử dụng bộ lệnh đầu tiên để cài đặt Python 2.6 và bộ thứ hai để cài đặt Python 3.0. Sau đó sử dụng:

cổng sudo cài đặt py26-packagename

HOẶC LÀ

cổng sudo cài đặt py30-packagename

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

cổng sudo cài đặt py26-setuptools

Các 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.

Để biết danh sách đầy đủ các gói có sẵn cho Python, hãy nhập:

danh sách cổng | grep py26-

HOẶC LÀ

danh sách cổng | grep py30-

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.
Benjamin Hodgson

7

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

MacPorts python_selectđược sử dụng để chọn phiên bản "hiện tại" của Python, nhưng nó 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.

Các $PATHbiến môi trường không ảnh hưởng đến những gì mô-đun Python được tải. $PYTHONPATHlà những gì bạn đang tìm kiếm. $PYTHONPATHnên trỏ đến các thư mục chứa các mô-đun Python mà bạn muốn tải. Trong trường hợp của tôi, $PYTHONPATHbiến 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 phù hợp khác cho bạn, vì vậy bạn chỉ cần thêm các đường dẫn bổ sung vào $PYTHONPATH. Nhưng một lần nữa, hoàn toàn $PATHkhông được sử dụng khi Python tìm kiếm các mô-đun bạn đã cài đặt.

$PATH được sử dụng để tìm các tệp thực thi, vì vậy nếu bạn cài đặt Python của MacPorts, hãy đảm bảo /opt/local/bincó trong tệp của bạn $PATH.


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 thấy chúng, điều đó có thể có nghĩa là bạn không gọi python của MacPorts mà bạn đã cài đặt. Trong một vỏ thiết bị đầ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 con trăn đúng theo mặc định, đòi hỏi phải đảm bảo shell của bạn $ PATH được đặt đúng để đảm bảo rằng tệp thực thi đúng được tìm thấy trước tiên. Một giải pháp khác là xác định bí danh vỏ cho các con 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, vì mỗi phiên bản Python có thể có easy_installlệnh riêng , hãy đảm bảo bạn đang gọi đúng easy_install.


2
Nếu anh ta sử dụng MacPorts, cách chính xác để biến phiên bản Python đó thành mặc định không phải là gây rối với PATH, mà là 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 để biến phiên bản Python đó thành mặc định.
Michael Aaron Safyan

3
python_select chỉ quản lý các liên kết python trong / opt / local / bin và không có gì đả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 cố gắng 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" nói chung là một chút nhảm nhí: bạn không biết Python nào sẽ kết thúc trừ khi bạn biết về $ Cạm bẫy và / hoặc sử dụng đường dẫn tuyệt đối.
Ned Deily

6

Nếu bạn sử dụng Python từ MacPorts, nó có easy_install riêng của nó nằm tại địa chỉ: /opt/local/bin/easy_install-2.6 (ví py26, đó là). Nó không giống với cách 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 mình.


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 của MacPorts. Bạn có thể sudo port install py2.6-pipđể có được pip.
zlovelady

4

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

easy_install nose

cho gói thử nghiệm đơn vị mũi, hoặc

easy_install trac

cho trình tractheo dõi lỗi.

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


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


2

Khi bạn cài đặt các 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 lên phiên bản MacPorts của Python đã 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 python_select . hướng dẫn tại đây .

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


python_selectbây giờ không được dùng nữa, xem câu trả lời mới hơn.
askewchan

2

Bạn có thể đã được pip3cài đặt sẵn, vì vậy hãy thử nó!


1

Về việc sử dụng phiên bản python nào, Mac OS thường xuất xưởng một phiên bản python cũ. Đó là một ý tưởng tốt để nâng cấp lên phiên bản mới hơn. Bạn có thể tải xuống một .dmg từ http://www.python.org/doad/ . Nếu bạn làm điều đó, hãy nhớ cập nhật đường dẫn. Bạn có thể tìm thấy các lệnh chính xác tại đây http://farmdev.com/ Dùts / 66 / python-3-0-on-mac-os-x-alongside-2-2-5-etc-/



-1

Cài đặt trực tiếp một trong các gói fink (Django 1.6 kể từ 2013-tháng 11)

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

Hoặc sử dụng fink django cộng với bất kỳ gói cài đặt pip nào khác trong 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
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.