ใช้ Python เวอร์ชันอื่น


21

พื้นหลัง :

ตั้งแต่ฉันพัฒนาโปรแกรมไพ ธ อนที่ต้องทำงานในเวอร์ชันไพ ธ อนที่แตกต่างกันฉันได้ติดตั้งไพ ธ อนเวอร์ชันต่าง ๆ บนคอมพิวเตอร์ของฉัน

ฉันใช้เอฟซี 13 จึงมาพร้อมกับงูหลาม 2.6 ที่ติดตั้งในและ/usr/bin/python2.6/usr/lib/python2.6

ผมติดตั้งหลาม 2.5 จากแหล่งที่มาและเพื่อให้สิ่งที่เรียบร้อยผมใช้--prefix=/usrตัวเลือกซึ่งติดตั้งในหลามและ/usr/bin/python2.5/usr/lib/python2.5

ตอนนี้เมื่อฉันเรียกใช้pythonข้อความแจ้งของฉันฉันกำลังใช้เวอร์ชัน 2.5 อย่างไรก็ตามฉันมีปัญหากับการติดตั้ง

การจัดการแพ็คเกจ :

ใช้ easy_install /usr/lib/python2.6/site-packages/แพคเกจมีการติดตั้งเสมอใน ฉันดาวน์โหลดsetuptools.egg สำหรับ python 2.5 และพยายามติดตั้ง แต่มีข้อผิดพลาด:

/usr/lib/python2.5/site-packages does NOT support .pth files

ดูเหมือนว่า python2.5 ไม่ได้อยู่ใน PYTHONPATH ของฉัน ฉันคิดว่าการติดตั้งเริ่มต้นจะเพิ่มตัวเองลงใน PYTHONPATH แต่เมื่อฉันเขียนecho $PYTHONPATHที่ promt ฉันเพิ่งได้รับบรรทัดว่างเปล่า

คำตอบ:


20

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

sudo make altinstall

แทนที่จะติดตั้ง "sudo make install" มากกว่าปกติ สิ่งนี้จะเพิ่มหมายเลขรุ่นลงในไฟล์เรียกทำงาน (ดังนั้นคุณจึงมี python-2.5, python-2.6, python-3.2 และอื่น ๆ ) เพื่อป้องกันความขัดแย้งใด ๆ กับ Python เวอร์ชันระบบ


2
Altinstall + virtualenv = python การพัฒนา nirvahna ขอบคุณ!
อเล็กซ์

13

ดูเหมือนว่าเป็นแอพพลิเคชั่นที่สมบูรณ์แบบสำหรับvirtualenvซึ่งเป็นเครื่องมือยอดนิยมสำหรับการสร้างสภาพแวดล้อม Python แบบแยก นี่เป็นคำสั่งตัวอย่างเพื่อระบุเวอร์ชันของ Python

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv

ฉันไม่คิดว่าvirtualenvเป็นวิธีแก้ปัญหาในกรณีนี้ ดูคำตอบของฉัน
Piotr Dobrogost

5

ใช้easy_installแพคเกจติดตั้งอยู่เสมอ /usr/lib/python2.6/site-packages/

นั่นเป็นเพราะ distutils เพิ่มบรรทัด shebang ให้กับสคริปต์ทั้งหมดที่กำลังติดตั้ง หากคุณเรียกใช้easy_installสคริปต์โดยตรงสคริปต์จะถูกเรียกใช้งานด้วยล่ามที่ติดตั้งด้วย (ตามบรรทัด shebang) ซึ่งeasy_installมีการใช้ขึ้นอยู่กับคุณไม่ได้PATH PYTHONPATHหากคุณต้องการติดตั้งแพ็กเกจในอินสแตนซ์ Python 2.5 คุณควรรันการeasy_installระบุ Python interpreter เพื่อใช้:

/usr/bin/python2.5/python easy_install ...

อย่างเคร่งครัดพูดvirtualenvไม่ได้ช่วยที่นี่เช่นนั้นจะต้องถูกสร้างขึ้นในบริบทของฐานeasy_installงูหลามซึ่งเป็นสิ่งที่เป็นปัญหาเช่นเดียวกับการทำงาน นั่นคือ--pythonเหตุผลที่virtualenvมีไว้เพื่อ ด้วยเหตุผลบางอย่างeasy_installไม่ได้ให้ข้อโต้แย้งแบบอะนาล็อกดังนั้นจึงต้องทำงานกับล่าม Python ที่เฉพาะเจาะจงดังที่แสดงไว้ด้านบน


มันเป็นคำตอบแรกของฉันที่นี่และฉันหวังว่า Necromancer Badge คนแรกจะได้รับเช่นกัน :)
Piotr Dobrogost

คำอธิบายที่ดีมากขอบคุณ! หมอผีผู้ได้รับตราอย่างดี;)
อเล็กซ์

2

ฉันใช้ Fedora 13 และPYTHONPATHไม่ได้ตั้งค่า

ภายในไพ ธ อนsys.pathจะแสดงรายการพา ธ ที่ใช้สำหรับการนำเข้าสคริปต์

ฉันไม่คุ้นเคยกับการeasy_installตัดสินใจไดเรกทอรีปลายทาง แต่ฉันแน่ใจว่าจะมีอาร์กิวเมนต์บรรทัดคำสั่งที่คุณสามารถให้ได้

ลองระบุเวอร์ชันของงูหลามที่จะทำงานeasy_installภายใต้คำสั่งของคุณด้วยพา ธ แบบเต็มไปยังไพ ธ อนที่คุณต้องการ

ตรวจสอบด้วยว่าeasy_installsymlink ใน bin ไปยังสคริปต์ภายในเวอร์ชัน python ที่คุณติดตั้งไว้หรือไม่


1

Virtualenv เป็นสวรรค์ที่นี่แน่นอน

ในการตั้งค่าของฉันฉันมีการVIRTUALENV_USE_DISTRIBUTEตั้งค่าตัวแปรสภาพแวดล้อมเป็น 1 เพื่อให้มีการใช้แพ็คเกจการกระจายที่ทันสมัยกว่าแทน setuptools ฉันสร้างสภาพแวดล้อมเสมือนจริงสำหรับ Python สองเวอร์ชันในระบบของฉันดังนี้:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

ฉันสร้างนามแฝงสามรายการใน.bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

ดังนั้นฉันสามารถใช้py2เพื่อเปลี่ยนเป็นค่าเริ่มต้นของ Python 2.6 และpy3เปลี่ยนเป็นค่าเริ่มต้นของ Python 3.2 การเข้าidleจะเรียกใช้ IDLE เวอร์ชันใดก็ตามที่เหมาะสมกับสภาพแวดล้อมเสมือนของฉัน

การติดตั้งแพ็กเกจลงในหนึ่งในสภาพแวดล้อมเสมือนเหล่านี้มักจะเกี่ยวข้องกับpip installคำสั่ง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.