python สองเวอร์ชันบน linux วิธีทำให้ 2.7 เป็นค่าเริ่มต้น


124

ฉันมี python สองเวอร์ชันใน linuxbox ของฉัน:

$python
Python 2.6.6 (r266:84292, Jul 10 2013, 22:48:45) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 


$ /usr/local/bin/python2.7
Python 2.7.3 (default, Oct  8 2013, 15:53:09) 
[GCC 4.4.7 20120313 (Red Hat 4.4.7-3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 

$ which python
/usr/bin/python
$ ls -al /usr/bin/python
-rwxr-xr-x. 2 root root 4864 Jul 10 22:49 /usr/bin/python

ฉันจะทำให้ 2.7 เป็นเวอร์ชันเริ่มต้นได้อย่างไรเมื่อฉันพิมพ์pythonมันทำให้ฉันเป็น 2.7


1
เมื่อฉันทำสิ่งนี้กับ fedora ของฉันยำหรือ apt-get ไม่ได้ผลอีกต่อไป
ผู้ใช้

@ ผู้ใช้: ใช่ฉันทำลาย Mandrake โบราณในทำนองเดียวกัน (เปลี่ยน/usr/bin/env pythonเป็นค่าเฉลี่ย 2.6 แทนที่จะเป็น 2.3 หมายถึงครึ่งหนึ่งของคำสั่งในrpmและทั้งหมดurpmiหยุดทำงาน)
ยกเลิก

ฉันทำตามขั้นตอนต่อไปนี้เพื่อติดตั้ง Django บน Centos 5: 1st ติดตั้ง Python 3.6 จากซอร์สโค้ด 2nd: ในเชลล์ให้พิมพ์คำสั่งต่อไปนี้ "alias python = / usr / local / bin / python3.6" 3rd: รันคำสั่งต่อไปนี้เพื่อติดตั้ง Django "pip3 install Django" 4th: "python -m django --version" เพื่อตรวจสอบ Django ติดตั้งด้วยเวอร์ชัน "1.10.5"
showmyroutes

สำหรับฉันคือการเชื่อมโยงที่ชี้ไปยังอ่อน/usr/bin/python python2ฉันเพิ่งเปลี่ยนเป็นpython3.6
munish

คำตอบ:


173

คุณอาจไม่ต้องการเปลี่ยน Python เริ่มต้นของคุณจริงๆ

distro ของคุณติดตั้งระบบมาตรฐานในหลามและอาจมีสคริปต์ที่ขึ้นอยู่กับความเป็นอยู่ในปัจจุบันนี้และเลือกโดย/usr/bin โดยปกติ#! /usr/bin/env pythonคุณสามารถใช้งานสคริปต์ Python 2.6 ใน 2.7 ได้ แต่คุณต้องการเสี่ยงหรือไม่?

ยิ่งไปกว่านั้นการลิงด้วย/usr/binสามารถทำลายความสามารถของผู้จัดการแพ็คเกจในการจัดการแพ็คเกจได้ และการเปลี่ยนลำดับของไดเร็กทอรีในของคุณPATHจะส่งผลกระทบต่อสิ่งอื่น ๆ มากมายนอกเหนือจาก Python (อันที่จริงมันเป็นเรื่องปกติมากที่จะมีไว้/usr/local/binข้างหน้า/usr/binและอาจเป็นสิ่งที่คุณต้องการจริงๆ แต่ถ้าคุณมีในทางกลับกันก็น่าจะมีเหตุผลที่ดีสำหรับสิ่งนั้น)

แต่คุณไม่จำเป็นต้องมีการเปลี่ยนแปลงเริ่มต้นของคุณหลามที่จะได้รับระบบทำงาน 2.7 pythonเมื่อคุณพิมพ์


ขั้นแรกคุณสามารถตั้งค่านามแฝงเชลล์:

alias python=/usr/local/bin/python2.7

พิมพ์พร้อมต์หรือใส่ไว้ในของคุณ~/.bashrcหากคุณต้องการให้การเปลี่ยนแปลงเป็นแบบถาวรและตอนนี้เมื่อคุณพิมพ์pythonจะรัน 2.7 ที่คุณเลือก แต่เมื่อบางโปรแกรมในระบบของคุณพยายามเรียกใช้สคริปต์โดย/usr/bin/env pythonรันมาตรฐาน 2.6


อีกวิธีหนึ่งคือสร้างสภาพแวดล้อมเสมือนจริงจาก 2.7 ของคุณ (หรือแยก venvs สำหรับโปรเจ็กต์ต่างๆ) และทำงานของคุณภายใน Venv


1
:( คุณพูดถูกขออภัยฉันได้สร้างลิงก์ symb ใหม่แล้วตามคำตอบของ @ rohit ตอนนี้yumคำสั่งของฉันใช้ไม่ได้! ฉันพยายามสร้างลิงก์ sym กลับ แต่ไม่ได้ผลsudo ln -sf /usr/bin/python2.6 /usr/bin/pythonใด ๆ
Anthony

@ Anthony: ฉันเดาว่า/usr/bin/pythonจริงๆแล้วไม่ใช่ symlink มาก่อนมันเป็นสคริปต์ของ wrapper หรือเรียกใช้งานได้และตอนนี้คุณได้เขียนทับแล้วและไม่สามารถเรียกคืนได้ หากยังคงทำงานคุณสามารถดาวน์โหลดแพคเกจหลามและติดตั้งได้โดยไม่ต้องrpm yum
ยกเลิก

ฉันยังสามารถรับล่าม 2.6 ได้เมื่อฉันพิมพ์python2.6มันก็ยังอยู่ที่นั่น
Anthony

7
@Anthony: และในอนาคตหากมีคนบอกให้คุณเปลี่ยนสิ่งต่างๆใน / usr / bin (หรือที่ใดก็ได้ใน / usr นอกจาก / usr / local) ให้จดบันทึกว่ามีอะไรบ้างและข้อมูลสำรอง ...
ยกเลิก

ตัวเองยุ่งอะไรกัน !! ฉันมีกล่อง centos อื่นซึ่งอาจมีสคริปต์นั้น ถ้าฉันคัดลอกจากที่นั่นและใส่ลงใน / usr / bin ของกล่องนี้ คุณคิดว่ามันจะได้ผลไหม?
Anthony

19

เพิ่ม/usr/local/binที่คุณตัวแปรสภาพแวดล้อมก่อนหน้านี้ในรายการกว่าPATH/usr/bin

โดยทั่วไปสิ่งนี้จะทำในไฟล์ rc ของเชลล์ของคุณเช่นสำหรับ bash คุณจะใส่สิ่งนี้ใน.bashrc:

export PATH="/usr/local/bin:$PATH"

นี้จะทำให้เปลือกของคุณดูครั้งแรกสำหรับpythonในก่อนที่มันจะไปกับหนึ่งใน/usr/local/bin/usr/bin

(แน่นอนว่านี่หมายความว่าคุณต้อง/usr/local/bin/pythonชี้ไปที่python2.7- หากยังไม่ได้ทำคุณจะต้องเชื่อมโยงสัญลักษณ์)


เป็นไปได้ว่าอาจจำเป็นต้องตั้งค่า PYTHONHOME ให้เหมาะสม / ไม่ตั้งค่าหากกำหนดโดยบางสิ่ง
Marcin

1
สิ่งนี้ไม่อันตรายเกือบเท่ากับโซลูชันที่แนะนำให้เปลี่ยน / usr / bin เอง… แต่ฉันยังคิดว่ามันไม่ใช่สิ่งที่ OP ต้องการจริงๆ
ยกเลิก

สิ่งนี้ช่วยฉันได้หลังจากอัปเกรดจาก Ubuntu 14.x เป็น 16.x
learn2day

4

ป้อนคำสั่ง

which python

//output:
/usr/bin/python

cd /usr/bin
ls -l

คุณจะเห็นอะไรแบบนี้

lrwxrwxrwx 1 root   root            9 Mar  7 17:04  python -> python2.7

python2.7 เริ่มต้นของคุณนั้นเชื่อมโยงกับข้อความ 'python'

ดังนั้นเอา softlink python

sudo rm -r python

จากนั้นลองคำสั่งด้านบนอีกครั้ง

ls -l

คุณจะเห็นว่าซอฟต์ลิงค์ถูกลบออก

-rwxr-xr-x 1 root   root      3670448 Nov 12 20:01  python2.7

จากนั้นสร้าง softlink ใหม่สำหรับ python3.6

ln -s /usr/bin/python3.6 python

จากนั้นลองใช้คำสั่งpythonในเทอร์มินัล

//output:
Python 3.6.7 (default, Oct 22 2018, 11:32:17) 
[GCC 8.2.0] on linux

พิมพ์help, copyright, creditsหรือlicenseสำหรับข้อมูลเพิ่มเติม


1
โพสต์ของคุณไม่ใช่คำตอบสำหรับคำถามของ OP
Frank

สิ่งนี้ช่วยแก้ปัญหาที่แปลกมากสำหรับฉัน เมื่อฉันตรวจสอบเวอร์ชัน python จากรูทหรือเทอร์มินัลปกติมันแสดง 3.6.8 แต่ถ้าฉันสร้าง. sh และพิมพ์ python -version ไว้ข้างในนั่นคือพิมพ์ 2.7 ปรากฎว่าเป็นเพราะมีซอฟต์ลิงค์ตามที่กล่าวไว้ข้างต้น ทำตามขั้นตอนและได้รับการแก้ไขแล้ว ขอบคุณ
S4nd33p

ขอบคุณ! สิ่งนี้ช่วยแก้ปัญหา "จำเป็นต้องใช้ python 3 หรือใหม่กว่า"
Tamim Attafi

4

ตรวจสอบเวอร์ชันปัจจุบันของ python โดย:

$ python --version

จากนั้นตรวจสอบว่า python เป็นลิงก์สัญลักษณ์ไปยังไฟล์ใด

  $ ll /usr/bin/python

เอาท์พุทเช่น:

 lrwxrwxrwx 1 root root 9 Jun 16  2014 /usr/bin/python -> python2.7*

ตรวจสอบเวอร์ชันอื่น ๆ ของ python:

$ ls /usr/bin/python*

เอาท์พุทเช่น:

/usr/bin/python     /usr/bin/python2.7-config  /usr/bin/python3.4         /usr/bin/python3.4m-config  /usr/bin/python3.6m         /usr/bin/python3m
/usr/bin/python2    /usr/bin/python2-config    /usr/bin/python3.4-config  /usr/bin/python3.6          /usr/bin/python3.6m-config  /usr/bin/python3m-config
/usr/bin/python2.7  /usr/bin/python3           /usr/bin/python3.4m        /usr/bin/python3.6-config   /usr/bin/python3-config     /usr/bin/python-config

หากต้องการเปลี่ยนเวอร์ชันปัจจุบันของ python เป็น 3.6 เวอร์ชันแก้ไขไฟล์ ~ / .bashrc:

vim ~/.bashrc

เพิ่มบรรทัดด้านล่างในตอนท้ายของไฟล์และบันทึก:

alias python=/usr/local/bin/python3.6

ในการติดตั้ง pip สำหรับ python 3.6

$ sudo apt-get install python3.6 python3.6-dev
$ sudo curl https://bootstrap.pypa.io/ez_setup.py -o - | sudo python3.6
$ sudo easy_install pip

เมื่อประสบความสำเร็จตรวจสอบเวอร์ชันปัจจุบันของ pip:

$ pip3 -V

เอาท์พุทเช่น:

pip 1.5.4 from /usr/lib/python3/dist-packages (python 3.6)

2

ระบบปฏิบัติการทั้งหมดมาพร้อมกับ python เวอร์ชันเริ่มต้นและอยู่ใน / usr / bin สคริปต์ทั้งหมดที่มาพร้อมกับระบบปฏิบัติการ (เช่น yum) ชี้เวอร์ชันของ python ที่อยู่ใน / usr / bin เมื่อคุณต้องการติดตั้ง python เวอร์ชันใหม่คุณไม่ต้องการทำลายสคริปต์ที่มีอยู่ซึ่งอาจใช้ไม่ได้กับ python เวอร์ชันใหม่

วิธีที่ถูกต้องคือการติดตั้ง python เป็นเวอร์ชันสำรอง

e.g.
wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tar.bz2 
tar xf Python-2.7.3.tar.bz2
cd Python-2.7.3
./configure --prefix=/usr/local/
make && make altinstall

ตอนนี้ด้วยการทำสิ่งนี้สคริปต์ที่มีอยู่เช่น yum ยังคงใช้งานได้กับ / usr / bin / python และเวอร์ชัน python เริ่มต้นของคุณจะเป็นเวอร์ชันที่ติดตั้งใน / usr / local / bin เช่นเมื่อคุณพิมพ์ python คุณจะได้ 2.7.3

สิ่งนี้เกิดขึ้นเนื่องจาก ตัวแปร $ PATH มี / usr / local / bin ก่อน usr / bin

/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin

หาก python2.7 ยังไม่มีผลเป็นเวอร์ชัน python เริ่มต้นคุณจะต้องทำ

export PATH="/usr/lib64/qt-3.3/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin"

-8

ฉันเดาว่าคุณได้ติดตั้งเวอร์ชัน 2.7 ด้วยตนเองในขณะที่ 2.6 มาจากแพ็คเกจ?

คำตอบง่ายๆคือ: ถอนการติดตั้งแพ็คเกจ python

สิ่งที่ซับซ้อนกว่าคืออย่าติดตั้งด้วยตนเองใน / usr / local สร้างแพ็คเกจด้วยเวอร์ชัน 2.7 จากนั้นอัปเกรด

การจัดการบรรจุภัณฑ์ขึ้นอยู่กับการแจกจ่ายที่คุณใช้


5
แพคเกจ Python นั้นแทบจะแน่นอนโดย distro CentOS ใช้ RPM และครึ่งหนึ่งของเครื่องมือ RPM และ YUM เขียนด้วย Python
ยกเลิก

เรียน Michael โปรดแนะนำตัวเลือกในการถอนการติดตั้ง python2.7 ด้วยตนเอง!
AVA

วิธีแก้ปัญหาง่ายๆคือการลบทุกอย่างภายใต้ / usr / local / แต่วิธีนี้คุณจะลบทุกอย่างที่คุณรวบรวมและติดตั้งด้วยตนเอง ไม่มีวิธีที่ดีในการติดตามว่าไฟล์ใดเป็นของซอฟต์แวร์ใดใน / usr / local และด้วยเหตุนี้การติดตั้งสิ่งใดจึงมักไม่สนับสนุน บางทีคุณอาจมีงูเหลือมอยู่ที่นั่น หาก / usr / local / bin มีเฉพาะไฟล์ปฏิบัติการ python คุณมีโอกาสดีที่การลบจะไม่ทำลายสิ่งอื่นใด
emesik

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