วิธีที่เหมาะสมในการจัดการหลามหลายรุ่นคืออะไร?


21

ฉันมีเครื่องที่ติดตั้ง Python 2.6 เป็น Python เริ่มต้น จากนั้นฉันติดตั้ง Python 2.7 และสร้าง / usr / bin / python ด้วยตนเองเป็น symlink ไปที่การติดตั้งใหม่

จากนั้นผมก็ทำงานเป็นปัญหาที่มีคำสั่งที่ไม่พบ ฉันพยายามติดตั้งใหม่:

sudo apt-get remove command-not-found

และฉันได้รับข้อผิดพลาดนี้:

/usr/bin/python does not match the
python default version. It must be
reset to point to python2.6

แต่ฉันต้องการให้ Python 2.7 เป็นค่าเริ่มต้น ฉันจะแก้ไขระเบียบนี้ได้อย่างไร

คำตอบ:


16

การเปลี่ยนค่าเริ่มต้นหลาม (หรือ Perl ฯลฯ ) บนระบบปฏิบัติการคือจริงๆความคิดที่ดี ล่ามนี้เป็นส่วนหนึ่งของระบบปฏิบัติการจริงและอาจมีส่วนประกอบระบบปฏิบัติการอื่น ๆ ที่เขียนขึ้นเพื่อทำงานกับล่ามรุ่นนั้นโดยเฉพาะ

ตัวอย่างเช่น Redhat เครื่องมือ yum ที่ดำเนินการอัพเดตซอฟต์แวร์ระบบเป็นแอพพลิเคชั่นหลาม คุณไม่ต้องการทำลายสิ่งนี้จริงๆ แอปพลิเคชันดังกล่าวอาจขึ้นอยู่กับโมดูลหลามที่ไม่ได้มาตรฐานซึ่งอาจติดตั้งซึ่งเวอร์ชันที่คุณติดตั้งอาจไม่มี ตัวอย่างเช่นบน Ubuntu ฉันเชื่อว่าเครื่องมือระบบปฏิบัติการบางตัวที่เขียนใน Python ใช้ ORM ที่ชื่อว่า Storm ซึ่งไม่ได้เป็นส่วนหนึ่งของไลบรารีมาตรฐานของ Python Clean Python 2.7 ที่ติดตั้งของคุณติดตั้งโมดูล Storm รุ่นที่ระบุไว้โดยเฉพาะหรือไม่? มีเวอร์ชั่นของ Storm บ้างไหม? ไม่มี? จากนั้นคุณก็เสีย OS ของคุณ

วิธีที่ถูกต้องในการทำเช่นนี้คือติดตั้งไพ ธ อนที่คุณต้องการและตั้งค่าบัญชีผู้ใช้ของคุณเพื่อใช้งานโดยการตั้งค่า. bash_profile พา ธ และอื่น ๆ คุณอาจต้องการค้นหาโมดูล virtualenv สำหรับ Python


1
Googled ทางของฉันที่นี่ จะ -1 ถ้าฉันมีตัวแทนในกองนี้ ทำไม? เพราะแนวทางที่แนะนำบอกว่า "ติดตั้ง python เวอร์ชันที่คุณต้องการ" เท่านั้น วิธีคือการที่ทำได้โดยไม่ต้องฉีดหลามระบบหรือไม่
jez

@jez ผู้ใช้ควรอ้างอิงถึงคำแนะนำในการติดตั้งสำหรับแอพพลิเคชั่นและระบบปฏิบัติการที่เป็นทางเลือก ในแพ็คเกจตัวติดตั้งภาษาทั่วไปจะติดตั้งในตำแหน่งที่ไม่เป็นอันตรายไม่เขียนทับส่วนประกอบหลักของระบบปฏิบัติการดังนั้นการเขียนทับเวอร์ชั่นของระบบปฏิบัติการจะเป็นกรณีพิเศษ
Simon Hibbs

8

ฉันจะแก้ไขระเบียบนี้ได้อย่างไร

pythonไม่มีอะไรมากไปกว่าการติดตั้ง มันจะยกเลิกการเปลี่ยนแปลงของคุณ (symlink)

ทำไมคุณต้องการเป็นค่าเริ่มต้น ทุกครั้งที่คุณต้องการเพียงใช้python2.7หรือรวม#!/usr/bin/python2.7(shebang) ที่จุดเริ่มต้นของสคริปต์ (ปฏิบัติการ) ของคุณ

หากคุณยืนยันpython2.7ว่าเป็นค่าเริ่มต้นทั้งระบบให้ใช้ Ubuntu รุ่นใหม่กว่า (ปัจจุบันคือ Ubuntu 11.04 ชื่อรหัส Natty) มันใช้รุ่นนั้นเป็นค่าเริ่มต้น

ในอนาคตหลีกเลี่ยงการแทรกแซงด้วยตนเองเหมือนที่คุณทำกับสิ่ง symlink นี่เป็นเรื่องจริงโดยเฉพาะอย่างยิ่งสำหรับไฟล์ที่มีการจัดการ distro และโดยเฉพาะอย่างยิ่งสำหรับสัตว์ที่ซับซ้อนเช่นการติดตั้ง Python


ฉันคิดว่ามันสมเหตุสมผลแล้วที่จะเปลี่ยนการติดตั้งไพ ธ อนเริ่มต้นเมื่อฉันอัพเกรด ฉันต้องการมันเป็นค่าเริ่มต้นเพราะฉันต้องการทำงานกับงูหลามที่ใหม่กว่า ... เป็นค่าเริ่มต้น เมื่อฉันพิมพ์pythonจาก bash ฉันต้องการรับ python ใหม่ มีวิธีที่ดีกว่าในการทำสิ่งนี้มากกว่าสิ่งที่ฉันทำหรือไม่?
ripper234

เพื่อทราบ - ฉันไม่คิดว่ามีอะไรผิดปกติในวิธีที่ฉันติดตั้ง python 2.7 การเคลื่อนไหว "นอกรีต" เพียงอย่างเดียวคือการเปลี่ยน symlink ซึ่งฉันคิดว่าเป็นวิธีที่เหมาะสมในการตั้งเป็นค่าเริ่มต้น มีวิธีที่ดีกว่า?
ripper234

2
@ripper: ฉันคิดว่าฉันมาที่หัวข้อนี้ช้าไปหน่อย ดังที่ Tshepang กล่าวว่าpythonแพ็คเกจบน Ubuntu กำหนดรุ่นของระบบ ตอนนี้มันเป็นไปได้ที่จะปรับแต่งการติดตั้งของคุณเพื่อให้ python 2.7 เป็นค่าเริ่มต้นโดยการสร้างแพ็คเกจ python ของคุณเอง แต่ถ้าเป็นเช่นนั้นคุณจะกลายเป็นผู้ดูแลการติดตั้ง Python แทน Ubuntu ได้อย่างมีประสิทธิภาพ ได้รับการจัดการบน Debian / Ubuntu โปรดทราบว่าแพ็กเกจ Python อื่น ๆ ในระบบได้รับการกำหนดค่าให้ทำงานกับ 2.6 เป็นค่าเริ่มต้นดังนั้นอาจมีผลให้เกิดการแตกได้
Faheem Mitha

1
@Tshepang: สรุปดีมาก!
Faheem Mitha

12
@ ripper234: อย่าเปลี่ยนแปลงอะไรเลย/usr/binมันถูกสงวนไว้สำหรับการแจกจ่ายของคุณ ให้สร้าง/usr/local/bin/pythonลิงก์สัญลักษณ์python2.7แทน จากนั้นสคริปต์ที่ใช้#!/usr/bin/env python(สำนวนที่แนะนำ) รวมถึงการพิมพ์pythonบนบรรทัดคำสั่งจะเรียกใช้ Python 2.7 สคริปต์จากการแจกจ่ายที่ต้องการให้ Python จากการแจกจ่ายสามารถโทร#!/usr/bin/pythonออกได้ต่อไป
Gilles 'หยุดความชั่วร้าย'

2

คำเตือน: ฉันเพิ่งโพสต์คำตอบเดียวกันนี้เพื่อสแต็คล้น:

/programming/2812520/pip-dealing-with-multiple-python-versions/50319252

นี่คือปัญหาของฉัน ใช้งานได้กับ Python3 คุณสมบัติหลักคือ:

  • Python แต่ละเวอร์ชันรวบรวมจากแหล่งที่มา
  • ทุกรุ่นติดตั้งอยู่ภายในเครื่อง
  • ห้ามหยุดการติดตั้ง Python เริ่มต้นของระบบของคุณในทางใดทางหนึ่ง
  • Python แต่ละเวอร์ชันแยกได้ด้วย virtualenv

ขั้นตอนดังต่อไปนี้:

  1. หากคุณติดตั้งงูหลามรุ่นพิเศษหลายรุ่นด้วยวิธีอื่นให้กำจัดออกเช่นลบ$ HOME / .local / lib / python3.xฯลฯ (รวมถึงเวอร์ชันที่ติดตั้งทั่วโลกด้วย) อย่าแตะต้อง python3 เวอร์ชันเริ่มต้นของระบบของคุณ

  2. ดาวน์โหลดซอร์สสำหรับเวอร์ชั่นไพ ธ อนต่างๆภายใต้โครงสร้างไดเรกทอรีต่อไปนี้

    $HOME/
        python_versions/ : download Python-*.tgz packages here and "tar xvf" them.  You'll get directories like this:
          Python-3.4.8/
          Python-3.6.5/
          Python-3.x.y/
          ...
  3. ในแต่ละ "งูใหญ่-3.xy / directory" ทำต่อไปนี้ (จะไม่ใช้ "sudo" ในขั้นตอนใด ๆ !):

    mkdir root
    ./configure --prefix=$PWD/root 
    make -j 2
    make install
    virtualenv --no-site-packages -p root/bin/python3.x env
  4. ที่ "python_versions /" สร้างไฟล์แบบนี้:

    env_python3x.bash:
    
    #!/bin/bash
    echo "type deactivate to exit"
    source $HOME/python_versions/Python-3.x.y/env/bin/activate
  5. ตอนนี้เมื่อใดก็ตามที่คุณต้องการเลือกใช้ python3.x ให้ทำ

    source $HOME/python_versions/env_python3x.bash

    เพื่อเข้าสู่ virtualenv

  6. ในขณะที่อยู่ใน virtualenv ให้ติดตั้งแพ็กเกจหลามที่คุณชื่นชอบด้วย

    pip install --upgrade package_name
  7. หากต้องการออกจาก virtualenv และ python เวอร์ชันให้พิมพ์ "deactivate"


0

เราใส่ python ดิสทริบิวชันลงบน Mac และ Ubuntu เป็นจำนวนมากและนี่คือคำแนะนำของฉัน

  1. ปล่อยให้ระบบไม่ได้รับการจัดการกับงูใหญ่: อย่าใช้เลย

  2. หากคุณต้องการการแจกจ่ายหลามหลักเพียงหนึ่งครั้งให้ดาวน์โหลดและติดตั้งCanopyจากการ enthought เมื่อทำการติดตั้งให้เลือก "set as system python ของฉัน" จากนั้นคุณสามารถติดตั้งแพ็คเกจจาก GUI package manager ของ Canopy

    • Canopy สามารถใช้งานร่วมกับpipคำสั่ง PyPi package manager ที่ให้คุณติดตั้งแพ็คเกจ (เช่นpip install python-twitter)
  3. หากคุณวางแผนที่จะใช้สภาพแวดล้อมเสมือน (เช่นคุณมีการพัฒนาโปรแกรมหลามและต้องการสภาพแวดล้อมที่หลามทุ่มเทสะอาดสำหรับแต่ละด้วยวิธีการที่ง่ายในการสลับไปมาระหว่างพวกเขา) ผมอยากแนะนำให้งูกว่าหลังคาเนื่องจากมันเป็นสภาพแวดล้อมเสมือนเครื่องมือผู้จัดการ นี้จะช่วยให้คุณ

0

pyenv

https://github.com/pyenv/pyenv

Pyenv ช่วยให้คุณจัดการรุ่นหลามหลายโดยไม่ sudo สำหรับผู้ใช้คนเดียวเหมือนNode.js NVMและทับทิม RVM

ติดตั้ง Pyenv:

curl https://pyenv.run | bash

จากนั้นเพิ่มใน.bashrc:

export PATH="${HOME}/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

ค้นหา Python version เพื่อติดตั้ง:

pyenv install --list

ติดตั้งเวอร์ชั่นหลามที่คุณต้องการ:

# Increase the chances that the build will have all dependencies.
# https://github.com/pyenv/pyenv/wiki/Common-build-problems
sudo apt build-dep python3
sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
  libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
  xz-utils tk-dev libffi-dev liblzma-dev python-openssl git

# Build and install a Python version from source.
pyenv install 3.8.0

รายการรุ่น Python ที่มี:

pyenv versions

ตอนนี้เรามี:

* system (set by /home/cirsan01/.pyenv/version)
  3.8.0

เลือกรุ่นหลามอื่น:

pyenv global 3.8.0
python --version
python3 --version

เอาต์พุตทั้งสอง:

Python 3.8.0

ตอนนี้เราสามารถทำการติดตั้งและใช้งานแพ็คเกจได้ตามปกติ:

pip install cowsay
python -c 'import cowsay; cowsay.tux("Python is fun")'
cowsay 'hello'

เราสามารถยืนยันได้ว่าทุกอย่างถูกติดตั้งในสภาพแวดล้อมที่สะอาดด้วย:

python -c 'import cowsay; print(cowsay.__file__)'
which cowsay

ต่อการใช้งานโครงการ

ในส่วนก่อนหน้าเราเห็นวิธีการใช้ pyenv ในการตั้งค่าส่วนกลาง

อย่างไรก็ตามสิ่งที่คุณต้องการโดยทั่วไปคือการตั้งค่าไพ ธ อนและแพคเกจเฉพาะตามแต่ละโครงการ นี่คือวิธีที่จะทำ

ก่อนอื่นให้ติดตั้ง Python version ที่คุณต้องการเหมือนก่อน

จากนั้นในไดเรกทอรีโครงการของคุณให้ตั้งค่าเวอร์ชั่นไพ ธ อนที่ต้องการด้วย:

pyenv local 3.8.0

ซึ่งสร้างไฟล์.python-versionที่มีสตริงรุ่น

และตอนนี้เรามาติดตั้งแพคเกจเฉพาะที่สำหรับโครงการของเรา: สิ่งที่ต้องทำ: ไม่มีทางที่ดีที่ดูเหมือน: /programming/30407446/pyenv-choose-virtualenv-directory/59267972#59267972

ตอนนี้เมื่อมีคนต้องการใช้โครงการของคุณพวกเขาจะทำ:

pyenv local

ซึ่งตั้งค่าเวอร์ชัน Python ให้ถูกต้อง

หัวข้อที่เกี่ยวข้อง:

ทดสอบบน Ubuntu 18.04, pyenv 1.2.15

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