วิธีใดที่เข้ากันได้มากที่สุดในการติดตั้งโมดูล Python บนเครื่อง Mac


125

ฉันเริ่มเรียนรู้งูหลามและรักมัน ฉันทำงานบน Mac เป็นหลักเช่นเดียวกับ Linux ฉันพบว่าบน Linux (Ubuntu 9.04 ส่วนใหญ่) เมื่อฉันติดตั้งโมดูล python โดยใช้ apt-get มันใช้งานได้ดี ฉันสามารถนำเข้าได้โดยไม่มีปัญหา

บน Mac ฉันคุ้นเคยกับการใช้ Macports เพื่อติดตั้งอุปกรณ์ Unixy ทั้งหมด อย่างไรก็ตามฉันพบว่าโมดูล python ส่วนใหญ่ที่ฉันติดตั้งด้วย python นั้นไม่สามารถมองเห็นได้ ฉันใช้เวลาเล่นกับการตั้งค่า PATH และใช้ python_select ไม่มีอะไรได้ผลจริง ๆ และ ณ จุดนี้ฉันไม่เข้าใจจริงๆฉันแค่พูดเล่น ๆ

ฉันรู้สึกว่า Macports ไม่ได้รับความนิยมอย่างกว้างขวางในการจัดการโมดูลหลาม ฉันต้องการเริ่มต้นใหม่โดยใช้แนวทางที่ "ยอมรับ" มากขึ้น (ถ้าเป็นคำที่ถูกต้อง)

ดังนั้นฉันจึงสงสัยว่าวิธีที่นักพัฒนา Mac python ใช้จัดการโมดูลของพวกเขาคืออะไร?

คำถามโบนัส:

คุณใช้ python ของ Apple หรือเวอร์ชันอื่น ๆ หรือไม่? คุณรวบรวมทุกอย่างจากแหล่งที่มาหรือมีตัวจัดการแพ็คเกจที่ทำงานได้ดี (Fink?)


มีบทความดีๆเกี่ยวกับแอปพลิเคชัน PyQt บรรจุภัณฑ์สำหรับ Mac OS X ที่ Ars Technica ย้อนกลับไป: arstechnica.com/open-source/guides/2009/03/…
Todd Gamblin

7
MacPorts เหมาะสำหรับ Python บน Mac หมายเหตุ: คุณต้องติดตั้งแพ็คเกจ Python ผ่าน MacPorts เพื่อให้ติดตั้งในการติดตั้ง MacPorts Python ของคุณ คุณยังสามารถติดตั้งแพ็คเกจโดยไม่ต้องใช้ MacPorts อย่างไรก็ตามคุณต้องทำให้ python เวอร์ชันนั้นเป็นค่าเริ่มต้นผ่าน python_select ก่อนที่จะติดตั้งแพ็คเกจ หากคุณติดตั้งแพ็กเกจแล้วใช้ python_select มันจะไม่สร้างความแตกต่างเนื่องจากจะติดตั้งใน Python เวอร์ชันใดก็ตามที่เป็นค่าเริ่มต้นในขณะติดตั้ง
Michael Aaron Safyan

คำตอบ:


144

วิธีที่นิยมที่สุดในการจัดการแพ็คเกจ python (หากคุณไม่ได้ใช้ตัวจัดการแพ็คเกจระบบของคุณ) คือการใช้ setuptools และ easy_install อาจมีการติดตั้งในระบบของคุณแล้ว ใช้แบบนี้:

easy_install django

easy_install ใช้Python Package Index ซึ่งเป็นแหล่งข้อมูลที่น่าทึ่งสำหรับนักพัฒนา python ลองดูรอบ ๆ ว่ามีแพ็คเกจอะไรบ้าง

ตัวเลือกที่ดีกว่าคือpipซึ่งได้รับแรงฉุดเนื่องจากพยายามแก้ไขปัญหามากมายที่เกี่ยวข้องกับ easy_install Pip ใช้ที่เก็บแพ็กเกจเดียวกันกับ easy_install ซึ่งจะทำงานได้ดีขึ้น การใช้งานครั้งเดียวจริงๆต้องใช้ easy_install สำหรับคำสั่งนี้:

easy_install pip

หลังจากนั้นให้ใช้:

pip install django

ในบางจุดที่คุณอาจจะต้องการที่จะเรียนรู้เกี่ยวกับ bit virtualenv หากคุณทำการพัฒนา python จำนวนมากในโปรเจ็กต์ที่มีความต้องการแพ็กเกจที่ขัดแย้งกัน Virtualenv คือสิ่งที่มาจากสวรรค์ จะช่วยให้คุณมีแพ็คเกจที่แตกต่างกันโดยสิ้นเชิงและสลับไปมาระหว่างแพ็กเกจได้อย่างง่ายดายตามความต้องการ

เกี่ยวกับ python ที่จะใช้การติดกับ python ของ Apple จะทำให้คุณปวดหัวน้อยที่สุด แต่ถ้าคุณต้องการเวอร์ชันที่ใหม่กว่า (Leopard คือ 2.5.1 ฉันเชื่อว่า) ฉันจะไปกับmacports python 2.6


5
ฉันเพิ่งสร้างเครื่องขึ้นมาใหม่และเปลี่ยนไปใช้เฉพาะ Homebrew และ PIP ทันใดนั้นปัญหาการสร้างทั้งหมดที่ฉันได้ก็หายไป
GloryFish

42

คำถามของคุณมีอายุสามปีแล้วและยังมีรายละเอียดบางอย่างที่ไม่ครอบคลุมในคำตอบอื่น ๆ :

คนส่วนใหญ่ที่ฉันรู้จักใช้HomeBrewหรือMacPortsฉันชอบ MacPorts เนื่องจากมีการตัดสภาพแวดล้อม MacOS X เริ่มต้นและการตั้งค่าการพัฒนาของฉัน เพียงแค่ย้ายโฟลเดอร์/ optของคุณออกและทดสอบแพ็กเกจของคุณด้วยสภาพแวดล้อม Python ของผู้ใช้ปกติ

MacPorts สามารถพกพาได้ภายใน Mac เท่านั้น แต่ด้วย easy_install หรือ pip คุณจะได้เรียนรู้วิธีตั้งค่าสภาพแวดล้อมของคุณในทุกแพลตฟอร์ม (Win / Mac / Linux / Bsd ... ) นอกจากนี้ยังมีข้อมูลล่าสุดอยู่เสมอและมีแพ็คเกจเพิ่มเติม

ฉันเองให้ MacPorts จัดการโมดูล Python ของฉันเพื่ออัปเดตทุกอย่าง เช่นเดียวกับตัวจัดการแพ็คเกจระดับสูงอื่น ๆ (เช่น apt-get) มันจะดีกว่ามากสำหรับการยกโมดูลที่หนักหน่วงด้วยการพึ่งพาไบนารีจำนวนมาก ไม่มีวิธีใดที่ฉันจะสร้างการผูก Qt (PySide) ด้วย easy_install หรือ pip Qt มีขนาดใหญ่และใช้เวลามากในการรวบรวม ทันทีที่คุณต้องการแพ็คเกจ Python ที่ต้องการไลบรารีที่ใช้โดยโปรแกรมที่ไม่ใช่ Python ให้พยายามหลีกเลี่ยง easy_install หรือ pip

ในบางจุดคุณจะพบว่ามีบางแพ็คเกจหายไปใน MacPorts ผมไม่เชื่อว่า MacPorts เคยจะทำให้คุณทั้งCheeseShop ตัวอย่างเช่นเมื่อเร็ว ๆ นี้ฉันต้องการโมดูลElixirแต่ MacPorts เสนอเฉพาะ py25-elixir และ py26-elixir เท่านั้นไม่มีเวอร์ชัน py27 ในกรณีเช่นนี้คุณมี:

pip-2.7 ติดตั้ง - น้ำยาอีลิกเซอร์ผู้ใช้

(ตรวจสอบให้แน่ใจว่าคุณพิมพ์ pip- (เวอร์ชัน)) เสมอ

ซึ่งจะสร้างไลบรารี Python เพิ่มเติมในบ้านของคุณ ใช่ Python จะทำงานร่วมกับตำแหน่งไลบรารีมากกว่าหนึ่งแห่ง: ที่หนึ่งที่ควบคุมโดย MacPorts และผู้ใช้ในพื้นที่สำหรับทุกสิ่งที่ขาดหายไปใน MacPorts

ตอนนี้สังเกตว่าฉันชอบ pip มากกว่า easy_install มีเหตุผลที่ดีที่คุณควรหลีกเลี่ยง setuptools และ easy_install นี่เป็นคำอธิบายที่ดีและฉันพยายามหลีกเลี่ยงจากพวกเขา คุณสมบัติที่มีประโยชน์อย่างหนึ่งของ pip คือการให้รายการโมดูลทั้งหมด (ตามเวอร์ชัน) ที่คุณติดตั้งกับ MacPorts, easy_install และ pip ​​เอง:

pip-2.7 ตรึง

หากคุณเริ่มใช้ easy_install แล้วไม่ต้องกังวล pip สามารถรับรู้ทุกสิ่งที่ทำไปแล้วโดย easy_install และแม้แต่อัปเกรดแพ็คเกจที่ติดตั้งด้วย

หากคุณเป็นนักพัฒนาคอยจับตาดูVirtualenvเพื่อควบคุมการตั้งค่าต่างๆและการรวมกันของเวอร์ชันโมดูล คำตอบอื่น ๆ ที่กล่าวถึงแล้วสิ่งที่ยังไม่ได้กล่าวถึงคือโมดูลToxซึ่งเป็นเครื่องมือสำหรับการทดสอบว่าแพคเกจของคุณติดตั้งอย่างถูกต้องกับ Python เวอร์ชันต่างๆ

แม้ว่าโดยปกติแล้วฉันจะไม่มีความขัดแย้งของเวอร์ชัน แต่ฉันก็ต้องการมี Virtualenv เพื่อตั้งค่าสภาพแวดล้อมที่สะอาดและรับมุมมองที่ชัดเจนเกี่ยวกับการอ้างอิงแพ็กเกจของฉัน ด้วยวิธีนี้ฉันไม่เคยลืมการอ้างอิงใด ๆ ใน setup.py ของฉัน

หากคุณใช้ MacPorts โปรดทราบว่าไม่ได้เลือกแพ็กเกจเดียวกันหลายเวอร์ชันอีกต่อไปเช่นเดเบียนสไตล์เก่าที่มีแพ็คเกจ python_select พิเศษ (ยังคงมีให้เข้ากันได้) ตอนนี้คุณมีคำสั่ง select เพื่อเลือกว่าจะใช้ Python เวอร์ชันใด (คุณสามารถเลือกเวอร์ชันที่ติดตั้งโดย Apple):

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

$ port select python python32

เพิ่มสารพิษด้านบนและโปรแกรมของคุณควรพกพาได้จริงๆ


30

โปรดดูสภาพแวดล้อมการพัฒนาหลาม OS X วิธีที่ดีที่สุดคือการใช้MacPorts ดาวน์โหลดและติดตั้ง MacPorts จากนั้นติดตั้ง Python ผ่าน MacPorts โดยพิมพ์คำสั่งต่อไปนี้ใน Terminal:

sudo port ติดตั้ง python26 python_select
sudo port เลือก - ตั้งค่า python python26

หรือ

sudo port ติดตั้ง python30 python_select
sudo port เลือก - ตั้งค่า python python30

ใช้คำสั่งชุดแรกเพื่อติดตั้ง Python 2.6 และชุดที่สองเพื่อติดตั้ง Python 3.0 จากนั้นใช้:

sudo port ติดตั้ง py26-packagename

หรือ

sudo port ติดตั้ง py30-packagename

ในคำสั่งดังกล่าวเปลี่ยนแพคเกจที่มีชื่อของแพคเกจสำหรับตัวอย่าง:

sudo port ติดตั้ง py26-setuptools

คำสั่งเหล่านี้จะติดตั้งแพ็กเกจโดยอัตโนมัติ (และการอ้างอิง) สำหรับเวอร์ชัน Python ที่กำหนด

หากต้องการดูรายการแพ็คเกจทั้งหมดสำหรับ Python ให้พิมพ์:

รายการพอร์ต | grep py26-

หรือ

รายการพอร์ต | grep py30-

คำสั่งใดที่คุณใช้ขึ้นอยู่กับเวอร์ชันของ Python ที่คุณเลือกติดตั้ง


1
สำหรับบันทึก MacPorts เวอร์ชันล่าสุดsudo python_select python30ถูกแทนที่ด้วยsudo port select --set python python30ไฟล์.
Benjamin Hodgson

7

ฉันใช้ MacPorts เพื่อติดตั้ง Python และโมดูลของบุคคลที่สามที่ติดตามโดย MacPorts /opt/localและฉันติดตั้งโมดูลที่ติดตั้งด้วยตนเอง (ที่ไม่ได้อยู่ในที่เก็บ MacPorts) /usr/localและสิ่งนี้ไม่เคยทำให้เกิดปัญหาใด ๆ ฉันคิดว่าคุณอาจสับสนเกี่ยวกับการใช้สคริปต์ MacPorts และตัวแปรสภาพแวดล้อมบางอย่าง

MacPorts python_selectใช้เพื่อเลือก Python เวอร์ชัน "ปัจจุบัน" แต่ไม่มีส่วนเกี่ยวข้องกับโมดูล สิ่งนี้ช่วยให้คุณสามารถติดตั้งทั้ง Python 2.5 และ Python 2.6 โดยใช้ MacPorts และสลับระหว่างการติดตั้ง

$PATHตัวแปรสภาพแวดล้อมที่ไม่ได้ส่งผลกระทบต่อสิ่งที่โมดูลหลามจะถูกโหลด $PYTHONPATHคือสิ่งที่คุณกำลังมองหา $PYTHONPATHควรชี้ไปที่ไดเร็กทอรีที่มีโมดูล Python ที่คุณต้องการโหลด ในกรณีของฉัน$PYTHONPATHตัวแปรของฉันมี/usr/local/lib/python26/site-packages. หากคุณใช้ Python ของ MacPorts จะเป็นการตั้งค่าไดเรกทอรีอื่น ๆ ที่เหมาะสมสำหรับคุณดังนั้นคุณจะต้องเพิ่มเส้นทางเพิ่มเติม$PYTHONPATHเท่านั้น แต่อีกครั้ง$PATHไม่ได้ใช้เลยเมื่อ Python ค้นหาโมดูลที่คุณติดตั้ง

$PATH จะใช้ในการหา executables ดังนั้นหากคุณติดตั้งหลาม MacPorts' ให้แน่ใจว่าอยู่ในของคุณ/opt/local/bin$PATH


6

ไม่มีอะไรผิดปกติกับการใช้การติดตั้ง MacPorts Python หากคุณกำลังติดตั้งโมดูล python จาก MacPorts แต่มองไม่เห็นนั่นอาจหมายความว่าคุณไม่ได้เรียกใช้ Python MacPorts ที่คุณติดตั้งไว้ ในเทอร์มินัลเชลล์คุณสามารถใช้พา ธ สัมบูรณ์เพื่อเรียกใช้ Pythons ต่างๆที่อาจติดตั้งได้ ตัวอย่างเช่น:

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

ในการรับ python ที่ถูกต้องตามค่าเริ่มต้นจำเป็นต้องตรวจสอบให้แน่ใจว่าเชลล์ $ PATH ของคุณได้รับการตั้งค่าอย่างถูกต้องเพื่อให้แน่ใจว่าพบไฟล์ปฏิบัติการที่ถูกต้องก่อน อีกวิธีหนึ่งคือการกำหนดเชลล์นามแฝงให้กับงูเหลือมต่างๆ

การติดตั้ง python.org (MacPython) ก็ใช้ได้เช่นกันตามที่คนอื่นแนะนำ easy_install สามารถช่วย แต่อีกครั้งเพราะแต่ละเช่นงูใหญ่อาจจะมีของตัวเองคำสั่งให้แน่ใจว่าคุณได้รับการกล่าวอ้างที่เหมาะสมeasy_installeasy_install


2
หากเขาใช้ MacPorts วิธีที่ถูกต้องในการทำให้ Python เวอร์ชันนั้นเป็นค่าเริ่มต้นคือไม่ยุ่งกับ PATH แต่ให้ติดตั้ง "python_select" และปล่อยให้มันสลับลิงก์สัญลักษณ์ที่จำเป็นโดยอัตโนมัติเพื่อทำให้ Python เวอร์ชันนั้นเป็นค่าเริ่มต้น
Michael Aaron Safyan

3
python_select จัดการเฉพาะ python symlink ใน / opt / local / bin และไม่มีการรับประกันว่า / opt / local / bin มาก่อน / usr / local / bin หรือ / usr / bin ใน $ PATH ของคุณ (แม้ว่าการติดตั้ง MacPorts ครั้งแรกจะพยายาม ทำ) ประเด็นก็คือมีหลายเวอร์ชันให้ใช้งานการใช้แค่ "python" หรือแม้แต่ "python2.5" นั้นเป็นเรื่องเล็กน้อยโดยทั่วไป: คุณไม่รู้ว่า Python ตัวใดที่คุณจะจบลงเว้นแต่คุณจะรู้ $ PATH ผิดพลาดและ / หรือใช้เส้นทางสัมบูรณ์
Ned Deily

6

หากคุณใช้ Python จาก MacPorts จะมี easy_install ของตัวเองอยู่ที่: /opt/local/bin/easy_install-2.6 (สำหรับ py26 นั่นคือ) มันไม่เหมือนกับการเรียก easy_install โดยตรงแม้ว่าคุณจะใช้ python_select เพื่อเปลี่ยนคำสั่ง python เริ่มต้นของคุณ


1
เช่นเดียวกับ pip ด้วยการตั้งค่า MacPorts ของฉันฉันเรียกใช้ pip-2.6 (ซึ่งอยู่ใน / opt / local / bin /) เพื่อติดตั้งโมดูล python ที่เล่นได้ดีกับ python ของ MacPorts คุณสามารถsudo port install py2.6-pipรับ pip
zlovelady

4

คุณได้พิจารณาeasy_installหรือยัง? มันจะไม่ซิงโครไนซ์ macports ของคุณหรืออะไรทำนองนั้น แต่จะดาวน์โหลดแพ็คเกจล่าสุดและการอ้างอิงที่จำเป็นทั้งหมดโดยอัตโนมัติเช่น

easy_install nose

สำหรับชุดทดสอบหน่วยจมูกหรือ

easy_install trac

สำหรับตัวtracติดตามข้อผิดพลาด

มีข้อมูลเพิ่มเติมเล็กน้อยในหน้าEasyInstallของพวกเขาด้วย


1
easy_install ก็ใช้ได้ โปรดทราบว่าเช่นเดียวกับที่คุณติดตั้ง python ไว้หลายเวอร์ชันคุณสามารถติดตั้ง easy_install หลายเวอร์ชันได้โดยง่ายซึ่งแต่ละเวอร์ชันจะเชื่อมโยงกับการติดตั้ง / เวอร์ชัน python ที่แตกต่างกัน คุณต้องแน่ใจว่าคุณเข้าใจว่าคุณกำลังเรียกใช้อันไหน (ซึ่ง (1) สามารถช่วยได้)
Ned Deily

3

สำหรับการติดตั้ง MacPython ฉันพบวิธีแก้ปัญหาที่มีประสิทธิภาพในการแก้ไขปัญหาด้วย setuptools (easy_install) ในบล็อกโพสต์นี้:

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

เคล็ดลับที่มีประโยชน์อย่างหนึ่ง ได้แก่ การค้นหาว่า python เวอร์ชันใดที่ใช้งานอยู่ในเทอร์มินัล:

which python

2

เมื่อคุณติดตั้งโมดูลด้วย MacPorts จะไม่เข้าสู่ Python เวอร์ชันของ Apple แต่โมดูลเหล่านี้จะถูกติดตั้งใน Python เวอร์ชัน MacPorts ที่เลือกไว้

คุณสามารถเปลี่ยนรุ่นของงูใหญ่จะถูกใช้โดยเริ่มต้นใช้พอร์ตแม็เรียกpython_select คำแนะนำที่นี่

นอกจากนี้ยังมีeasy_install ซึ่งจะใช้ python ในการติดตั้งโมดูล python


python_selectเลิกใช้แล้วดูคำตอบที่ใหม่กว่า
askewchan


1

เกี่ยวกับเวอร์ชัน python ที่จะใช้ Mac OS มักจะจัดส่ง python เวอร์ชันเก่า เป็นความคิดที่ดีที่จะอัปเกรดเป็นเวอร์ชันที่ใหม่กว่า คุณสามารถดาวน์โหลด .dmg จากhttp://www.python.org/download/ หากคุณทำเช่นนั้นอย่าลืมอัปเดตเส้นทาง คุณสามารถค้นหาคำสั่งที่แน่นอนได้ที่นี่http://farmdev.com/thoughts/66/python-3-0-on-mac-os-x-alongside-2-6-2-5-etc-/



-1

ติดตั้งหนึ่งในแพ็คเกจ fink โดยตรง (Django 1.6 ตั้งแต่ปี 2013- พ.ย. )

fink install django-py27
fink install django-py33

หรือสร้างตัวเองเป็นอัจฉริยะ:

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

หรือใช้ fink django บวกกับแพ็คเกจที่ติดตั้ง pip อื่น ๆ ใน 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
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.