Apa cara paling kompatibel untuk menginstal modul python pada Mac?

125

Saya mulai belajar python dan menyukainya. Saya bekerja pada Mac terutama juga Linux. Saya menemukan bahwa di Linux (kebanyakan Ubuntu 9,04) ketika saya menginstal modul python menggunakan apt-get berfungsi dengan baik. Saya dapat mengimpornya tanpa kesulitan.

Di Mac, saya terbiasa menggunakan Macports untuk menginstal semua hal Unixy. Namun, saya menemukan bahwa sebagian besar modul python yang saya instal dengannya tidak terlihat oleh python. Saya telah menghabiskan waktu bermain-main dengan pengaturan PATH dan menggunakan python_select. Tidak ada yang benar-benar berhasil dan pada titik ini saya tidak benar-benar mengerti, sebaliknya saya hanya mencari-cari.

Saya mendapat kesan bahwa Macports tidak dicintai secara universal untuk mengelola modul python. Saya ingin memulai dengan menggunakan pendekatan yang lebih "diterima" (jika itu kata yang tepat).

Jadi, saya bertanya-tanya, apa metode yang digunakan pengembang python Mac untuk mengelola modul mereka?

Pertanyaan bonus:

Apakah Anda menggunakan python Apple, atau versi lain? Apakah Anda mengkompilasi semuanya dari sumber atau ada paket palungan yang berfungsi dengan baik (Fink?).

GloryFish
sumber
Ada artikel yang bagus tentang pengemasan aplikasi PyQt untuk Mac OS X di Ars Technica beberapa waktu lalu: arstechnica.com/open-source/guides/2009/03/…
Todd Gamblin
7
MacPorts sangat cocok untuk Python di Mac. CATATAN: Anda perlu menginstal paket Python melalui MacPorts agar dapat diinstal ke instalasi MacPorts Python Anda. Anda juga dapat menginstal paket tanpa menggunakan MacPorts; namun, Anda perlu menjadikan versi python sebagai default melalui python_select SEBELUM menginstal paket. Jika Anda menginstal paket dan kemudian menggunakan python_select, itu tidak akan membuat perbedaan, karena akan menginstal ke versi Python mana pun yang merupakan default pada saat instalasi.
Michael Aaron Safyan

Jawaban:

144

Cara paling populer untuk mengelola paket python (jika Anda tidak menggunakan manajer paket sistem Anda) adalah dengan menggunakan setuptools dan easy_install. Mungkin sudah diinstal pada sistem Anda. Gunakan seperti ini:

easy_install django

easy_install menggunakan Indeks Paket Python yang merupakan sumber daya yang luar biasa untuk pengembang python. Silakan melihat-lihat untuk melihat paket apa yang tersedia.

Opsi yang lebih baik adalah pip , yang mendapatkan traksi, karena mencoba untuk memperbaiki banyak masalah yang terkait dengan easy_install. Pip menggunakan repositori paket yang sama dengan easy_install, hanya berfungsi lebih baik. Sungguh satu-satunya waktu penggunaan perlu menggunakan easy_install adalah untuk perintah ini:

easy_install pip

Setelah itu, gunakan:

pip install django

Pada titik tertentu Anda mungkin ingin belajar sedikit tentang virtualenv . Jika Anda melakukan banyak pengembangan python pada proyek-proyek dengan persyaratan paket yang saling bertentangan, virtualenv adalah anugerah. Ini akan memungkinkan Anda untuk memiliki versi yang berbeda dari berbagai paket, dan beralih di antara mereka dengan mudah tergantung kebutuhan Anda.

Mengenai python mana yang harus digunakan, tetap menggunakan python Apple akan memberi Anda paling sedikit sakit kepala, tetapi jika Anda membutuhkan versi yang lebih baru (Leopard adalah 2.5.1 saya percaya), saya akan menggunakan macports python 2.6.

keenam
sumber
5
Saya baru-baru ini membangun kembali mesin saya dan telah beralih menggunakan hanya Homebrew dan PIP, tiba-tiba semua masalah build yang saya alami hilang.
GloryFish
42

Pertanyaan Anda sudah berusia tiga tahun dan ada beberapa detail yang tidak tercakup dalam jawaban lain:

Kebanyakan orang yang saya kenal menggunakan HomeBrew atau MacPorts , saya lebih suka MacPorts karena sifatnya yang bersih dari apa yang merupakan lingkungan default Mac OS X dan pengaturan pengembangan saya. Cukup pindahkan folder / opt Anda dan uji paket Anda dengan lingkungan Python pengguna normal

MacPorts hanya portable di dalam Mac, tetapi dengan easy_install atau pip Anda akan belajar cara mengatur lingkungan Anda di platform apa pun (Win / Mac / Linux / Bsd ...). Selain itu akan selalu lebih terkini dan dengan lebih banyak paket

Saya pribadi membiarkan MacPorts menangani modul Python saya untuk menjaga semuanya diperbarui. Seperti halnya manajer paket tingkat tinggi lainnya (yaitu: apt-get) itu jauh lebih baik untuk pengangkatan modul yang berat dengan banyak dependensi biner. Tidak ada cara saya akan membangun binding Qt saya (PySide) dengan easy_install atau pip. Qt sangat besar dan membutuhkan banyak untuk dikompilasi. Segera setelah Anda menginginkan paket Python yang membutuhkan pustaka yang digunakan oleh program non Python, cobalah untuk menghindari easy_install atau pip

Pada titik tertentu Anda akan menemukan bahwa ada beberapa paket yang hilang di dalam MacPorts. Saya tidak percaya bahwa MacPorts akan memberi Anda seluruh CheeseShop . Sebagai contoh, baru-baru ini saya membutuhkan modul Elixir , tetapi MacPorts hanya menawarkan py25-elixir dan py26-elixir, tidak ada versi py27. Dalam kasus-kasus seperti ini Anda memiliki:

pip-2.7 instal --user elixir

(pastikan Anda selalu mengetikkan pip- (versi))

Itu akan membangun perpustakaan Python tambahan di dir rumah Anda. Ya, Python akan bekerja dengan lebih dari satu lokasi perpustakaan: satu dikontrol oleh MacPorts dan satu pengguna lokal untuk segala sesuatu yang hilang dalam MacPorts.

Sekarang perhatikan bahwa saya lebih menyukai pip daripada easy_install. Ada alasan bagus Anda harus menghindari setuptools dan easy_install. Berikut adalah penjelasan yang bagus dan saya mencoba untuk menjauh dari mereka. Salah satu fitur pip yang sangat berguna adalah memberi Anda daftar semua modul (beserta versinya) yang Anda instal dengan MacPorts, easy_install dan pip sendiri:

pembekuan pip-2.7

Jika Anda sudah mulai menggunakan easy_install, jangan khawatir, pip dapat mengenali semua yang sudah dilakukan oleh easy_install dan bahkan memutakhirkan paket yang diinstal dengannya.

Jika Anda seorang pengembang, awasi virtualenv untuk mengontrol berbagai pengaturan dan kombinasi versi modul. Jawaban lain sudah menyebutkannya, yang belum disebutkan sejauh ini adalah modul Tox , alat untuk menguji bahwa paket Anda menginstal dengan benar dengan versi Python yang berbeda.

Meskipun saya biasanya tidak memiliki konflik versi, saya ingin memiliki virtualenv untuk mengatur lingkungan yang bersih dan mendapatkan pandangan yang jelas tentang dependensi paket saya. Dengan begitu saya tidak pernah melupakan dependensi di setup.py saya

Jika Anda menggunakan MacPorts, ketahuilah bahwa beberapa versi dari paket yang sama tidak dipilih lagi seperti gaya Debian lama dengan paket python_select tambahan (masih ada untuk kompatibilitas). Sekarang Anda memiliki perintah pilih untuk memilih versi Python yang akan digunakan (Anda bahkan dapat memilih yang diinstal Apple):

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

$ port select python python32

Tambahkan racun di atasnya dan program Anda harus benar-benar portabel

SystematicFrank
sumber
30

Silakan lihat lingkungan pengembangan Python OS X . Cara terbaik adalah menggunakan MacPorts . Unduh dan instal MacPorts, lalu instal Python via MacPorts dengan mengetikkan perintah berikut di Terminal:

sudo port instal python26 python_select
port sudo pilih --set python python26

ATAU

sudo port instal python30 python_select
port sudo pilih --set python python30

Gunakan set pertama perintah untuk menginstal Python 2.6 dan set kedua untuk menginstal Python 3.0. Kemudian gunakan:

sudo port install py26-packagename

ATAU

sudo port install py30-packagename

Pada perintah di atas, ganti nama paket dengan nama paket, misalnya:

port sudo instal py26-setuptools

Perintah-perintah ini akan secara otomatis menginstal paket (dan dependensinya) untuk versi Python yang diberikan.

Untuk daftar lengkap paket yang tersedia untuk Python, ketik:

daftar porta | grep py26-

ATAU

daftar porta | grep py30-

Perintah mana yang Anda gunakan tergantung pada versi Python yang Anda pilih untuk menginstal.

Michael Aaron Safyan
sumber
1
Sebagai catatan, dalam versi terbaru MacPorts sudo python_select python30telah diganti dengan sudo port select --set python python30.
Benjamin Hodgson
7

Saya menggunakan MacPorts untuk menginstal Python dan modul pihak ketiga yang dilacak oleh MacPorts /opt/local, dan saya memasang modul yang diinstal secara manual (yang tidak ada dalam repositori MacPorts) ke dalamnya /usr/local, dan ini tidak pernah menyebabkan masalah. Saya pikir Anda mungkin bingung dengan penggunaan skrip MacPorts dan variabel lingkungan tertentu.

MacPorts python_selectdigunakan untuk memilih versi Python "saat ini", tetapi tidak ada hubungannya dengan modul. Ini memungkinkan Anda untuk, misalnya, menginstal Python 2.5 dan Python 2.6 menggunakan MacPorts, dan beralih di antara instalasi.

The $PATHvariabel lingkungan tidak tidak mempengaruhi apa modul Python dimuat. $PYTHONPATHadalah apa yang kamu cari. $PYTHONPATHharus mengarah ke direktori yang berisi modul Python yang ingin Anda muat. Dalam kasus saya, $PYTHONPATHvariabel saya berisi /usr/local/lib/python26/site-packages. Jika Anda menggunakan Python MacPorts, ia mengatur direktori lain yang tepat untuk Anda, jadi Anda hanya perlu menambahkan jalur tambahan$PYTHONPATH . Tetapi sekali lagi, $PATHtidak digunakan sama sekali ketika Python mencari modul yang telah Anda instal.

$PATH adalah digunakan untuk mencari executables, jadi jika Anda menginstal MacPorts' Python, pastikan /opt/local/bindalam Anda $PATH.

mipadi
sumber
6

Tidak ada yang salah dengan menggunakan instalasi MacPorts Python. Jika Anda memasang modul python dari MacPorts tetapi tidak melihatnya, itu artinya Anda tidak menggunakan python MacPorts yang Anda instal. Dalam shell terminal, Anda dapat menggunakan jalur absolut untuk memanggil berbagai Python yang mungkin diinstal. Sebagai contoh:

$ /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

Untuk mendapatkan python yang tepat secara default mengharuskan shell $ PATH Anda diset dengan benar untuk memastikan bahwa executable yang tepat ditemukan terlebih dahulu. Solusi lain adalah mendefinisikan alias shell ke berbagai ular sanca.

Instalasi python.org (MacPython) juga baik, seperti yang disarankan orang lain. easy_install dapat membantu tetapi, sekali lagi, karena setiap instance Python mungkin memiliki easy_installperintahnya sendiri , pastikan Anda menggunakan hak easy_install.

Ned Deily
sumber
2
Jika ia menggunakan MacPorts, cara yang benar untuk menjadikan versi Python sebagai default adalah tidak mengacaukan PATH, tetapi untuk menginstal "python_select" dan membiarkannya secara otomatis mengganti tautan simbolis yang diperlukan untuk menjadikan versi Python sebagai default.
Michael Aaron Safyan
3
python_select hanya mengelola symlink python di / opt / local / bin dan tidak ada jaminan bahwa / opt / local / bin datang sebelum / usr / local / bin atau / usr / bin di $ PATH Anda (walaupun instalasi awal MacPorts mencoba untuk lakukan). Intinya adalah, dengan beberapa versi yang tersedia, hanya menggunakan "python" atau bahkan "python2.5" adalah sedikit omong kosong secara umum: Anda tidak tahu Python mana yang akan Anda buat kecuali Anda mengetahui $ Jebakan PATH dan / atau gunakan jalur absolut.
Ned Deily
6

Jika Anda menggunakan Python dari MacPorts, ia memiliki easy_install sendiri yang terletak di: /opt/local/bin/easy_install-2.6 (untuk py26, artinya). Ini tidak sama dengan hanya memanggil easy_install secara langsung, bahkan jika Anda menggunakan python_select untuk mengubah perintah python default Anda.

Tudor
sumber
1
Sama untuk pip. Dengan pengaturan MacPorts saya, saya menjalankan pip-2.6 (yang ada di / opt / local / bin /) untuk menginstal modul python yang bermain bagus dengan python MacPorts. Anda bisa sudo port install py2.6-pipmendapatkan pip.
zlovelady
4

Sudahkah Anda melihat ke easy_install sama sekali? Itu tidak akan menyinkronkan macports Anda atau hal-hal seperti itu, tetapi secara otomatis akan mengunduh paket terbaru dan semua dependensi yang diperlukan, yaitu

easy_install nose

untuk paket pengujian unit hidung, atau

easy_install trac

untuk tracpelacak bug.

Ada sedikit informasi lebih lanjut di halaman EasyInstall mereka juga.

Mark Rushakoff
sumber
1
easy_install baik-baik saja. Perlu diketahui bahwa, seperti halnya Anda memiliki beberapa versi python diinstal, mudah untuk menginstal beberapa versi easy_install, masing-masing terkait dengan instalasi / versi python yang berbeda. Anda hanya perlu memastikan bahwa Anda memahami yang mana yang Anda panggil (yang (1) dapat membantu).
Ned Deily
2

Ketika Anda menginstal modul dengan MacPorts, itu tidak masuk ke versi Python Apple. Sebaliknya modul-modul tersebut diinstal ke versi MacPorts dari Python yang dipilih.

Anda dapat mengubah versi Python mana yang digunakan secara default menggunakan port mac yang disebut python_select . instruksi di sini .

Juga, ada easy_install . Yang akan menggunakan python untuk menginstal modul python.

Jon W
sumber
python_selectsudah tidak digunakan lagi, lihat jawaban yang lebih baru.
askewchan
2

Anda mungkin sudah memiliki pip3pra-instal, jadi coba saja!

Shayan Amani
sumber
-1

Saya menggunakan easy_install dengan Apple Python, dan itu berfungsi seperti pesona.

las3rjock
sumber
-1

Langsung menginstal salah satu paket fink (Django 1.6 pada 2013-Nov)

fink install django-py27
fink install django-py33

Atau buat sendiri virtualenv:

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

Atau gunakan fink django plus paket pip lain yang diinstal dalam 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
Kurt Schwehr
sumber