ถอนการติดตั้ง Python ที่ติดตั้งโดยแหล่งรวบรวม?


18

ผมติดตั้ง Python 2.7.9 บน Ubuntu 14.04 โดยการรวบรวมแหล่งที่มาโดย.configre, และmake เป็นเพราะฉันไม่ต้องการเขียนทับ Python 2.7.6 ที่เป็นค่าเริ่มต้น ฉันเองที่ติดตั้งอยู่ใน 2.7.9 และไฟล์อื่น ๆ อีกมากมายในไดเรกทอรีอื่น ๆ ภายใต้ จากREADMEในแพ็คเกจการติดตั้งต้นทาง:make altinstallmake altinstall/usr/local/bin/python2.7/usr/local

บนระบบ Unix และ Mac หากคุณตั้งใจจะติดตั้ง Python หลายเวอร์ชันโดยใช้คำนำหน้าการติดตั้งเดียวกัน (- อาร์กิวเมนต์อาร์กิวเมนต์ของสคริปต์กำหนดค่า) คุณต้องดูแลว่าไฟล์ Python หลักของคุณจะไม่ถูกเขียนทับโดยการติดตั้งเวอร์ชันอื่น

ไฟล์และไดเรกทอรีทั้งหมดที่ติดตั้งโดยใช้ "make altinstall" มีรุ่นหลักและรุ่นรองจึงสามารถใช้งานแบบเคียงข้างกันได้ "make install" ยังสร้าง $ {prefix} / bin / python ซึ่งอ้างถึง $ {prefix} /bin/pythonX.Y

หากคุณตั้งใจจะติดตั้งหลาย ๆ เวอร์ชันโดยใช้คำนำหน้าเหมือนกันคุณจะต้องตัดสินใจว่าเวอร์ชันใด (ถ้ามี) คือเวอร์ชัน "หลัก" ของคุณ ติดตั้งเวอร์ชันนั้นโดยใช้ "ทำการติดตั้ง" ติดตั้งรุ่นอื่น ๆ ทั้งหมดโดยใช้ "make altinstall"

ตัวอย่างเช่นหากคุณต้องการติดตั้ง Python 2.5, 2.6 และ 3.0 โดยเป็นเวอร์ชันหลักคุณจะต้องดำเนินการ "make install" ในไดเรกทอรี build 2.6 ของคุณและ "make altinstall" ในที่อื่น ๆ

ตอนนี้ฉันต้องการถอนการติดตั้งตัวเองติดตั้ง 2.7.9

  1. โชคดีที่ฉันยังมีซอร์สโค้ดอยู่ แต่น่าเสียดายที่ส่วน ไฟล์ Makefileไม่มีการถอนการติดตั้ง

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
    
  2. จากนั้นฉันลองอีกวิธีหนึ่ง: สร้าง deb จากแหล่งที่มาและการคอมไพล์ครั้งแรกติดตั้ง deb (หวังว่าจะเขียนทับไฟล์ที่ติดตั้งจากmake altinstall) จากนั้นถอนการติดตั้ง deb

    แต่เมื่อผมสร้างไฟล์ deb โดยcheckinstallผมไม่แน่ใจว่าถ้าและวิธีการที่ฉันควรจะทำแตกต่างกันสำหรับการจากmake altinstall make installสิ่งที่ฉันพยายามคือ:

    $ checkinstall altinstall
    
    ...
    
    Installing with altinstall...
    
    ========================= Installation results ===========================
    /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: 4: /var/tmp/tmp.4ZzIiwqBNL/installscript.sh: altinstall: not found
    
    ...
    

    ฉันสงสัยว่าฉันสามารถสร้าง deb เพื่อให้การติดตั้ง deb จะทำซ้ำขั้นตอนการติดตั้งของmake altinstall?

  3. หรือคุณจะถอนการติดตั้ง python 2.7.9 อย่างไร?

หมายเหตุ: แพคเกจแหล่งที่มาในการเชื่อมโยงเป็นครั้งแรกนอกจากนี้ยังมีsetup.py, นอกเหนือจากการinstall-shREADME


Python ไม่ได้ติดตั้งในหลาย ๆ ที่ ฉันจะลบไฟล์ด้วยตนเอง
Faheem Mitha

ขอบคุณ. อะไรคือสถานที่เหล่านั้นไม่มากนัก?
StackExchange สำหรับ All

ลองดูที่หนึ่งในแพ็คเกจไบนารี มันเป็นหลักตำแหน่งเดียวกันผมคิดว่ายกเว้นว่าจะถูกนำมาใช้แทน/usr/local และ แล้วคุณต้องการอะไร /usrdpkg -L python2.7dpkg -L python2.7-minimal2.7.9
Faheem Mitha

ฉันได้ยินมาว่ามันมี pip ตามค่าเริ่มต้น แต่หลังจากติดตั้งแล้วฉันไม่พบว่ามันมี pip
StackExchange สำหรับ All

คุณสามารถติดตั้ง apt-get install python-pippip
Faheem Mitha

คำตอบ:


20

คำสั่งต่อไปนี้จะลบmake altinstallหลาม -ed ของคุณ:

rm -f /usr/local/bin/python2.7
rm -f /usr/local/bin/pip2.7
rm -f /usr/local/bin/pydoc
rm -rf /usr/local/bin/include/python2.7
rm -f /usr/local/lib/libpython2.7.a
rm -rf /usr/local/lib/python2.7

คุณอาจต้องทำ

rm -f /usr/local/share/man/python2.7.1
rm -rf /usr/local/lib/pkgconfig
rm -f /usr/local/bin/idle
rm -f /usr/local/bin/easy_install-2.7

แม้ว่าจะmake altinstallให้บริการฉันได้ดีถ้า "system python" มีหมายเลข major.minor ที่แตกต่างจากที่คุณติดตั้ง แต่มันก็ใช้งานไม่ได้หากหมายเลข micro (ตำแหน่งที่สาม) แตกต่างกัน หมายเลขนั้นถูกแยกออกจากไบนารีที่ติดตั้งไว้และคุณจะจบด้วยสองรุ่น pythonX.Y นี่เป็นปัญหาเสมอ แต่เมื่อการกระจายเริ่มต้นการจัดส่งด้วยยูทิลิตี้ของระบบตาม 2.7.X ปัญหานี้มีความรุนแรงมากขึ้นเนื่องจาก 2.7 ควรเป็นชุดสุดท้ายของ Python2

IMO วิธีที่ดีที่สุดในการแก้ปัญหานี้คือป้องกันไม่ให้เป็นหนึ่ง: กำหนดค่าหลามเพื่อติดตั้งในไดเรกทอรีที่ไม่ได้ใช้โดยหลามอื่น ๆ /opt/python/X.Y.Zในระบบของฉันพวกเขาไปอยู่ภายใต้

หากต้องการใช้ Pythons ใด ๆ ที่ติดตั้งไว้ที่นั่นคุณ[virualenv][1]จะต้องสร้างสภาพแวดล้อมใหม่:

virtualenv --python=/opt/python/2.7.9/bin/python2.7 venv
source venv/bin/activate

[virtualenvwrapper][2]หรือการใช้งาน ฉันมีชื่อแทนสำหรับเวอร์ชั่นล่าสุดในซีรี่ส์ที่ฉันใช้ด้วย

หากคุณใช้toxสำหรับการทดสอบกับหลาย ๆ เวอร์ชัน (คุณควร) นามแฝงต่อไปนี้จะช่วยในการค้นหาเวอร์ชันต่างๆ:

alias tox='PATH=/opt/python/2.7.9/bin:/opt/python/2.6.9/bin:/opt/python/3.4.3/bin:/opt/python/3.3.6/bin:/opt/python/3.5-dev/bin:$PATH tox'

(ปัจจุบันเป็นรุ่นล่าสุดฉันใช้การตั้งค่าที่แตกต่างกันเล็กน้อยโดยการรักษาลิงก์จาก/opt/python/2.7ไปยังล่าสุด/opt/python/2.7.9และสำหรับตัวเลขรองอื่น ๆ เช่นกันภายในกระบวนการดาวน์โหลดการสร้างและการติดตั้งเวอร์ชันหลามใหม่)

การติดตั้งเหล่านี้จะไม่ถูกใช้โดยตรง พวกเขามักจะใช้เป็นพื้นฐานสำหรับvirtualenvสภาพแวดล้อมเท่านั้นดังนั้นฉันไม่สนใจว่าพวกเขาไม่ได้อยู่ในเส้นทางปกติของฉัน


2
อย่าลบ /usr/local/lib/python2.7! โมดูลหลามโกลบอลทั้งหมดติดตั้งโดย pip live ใน /usr/local/lib/python2.7/dist-packages โมดูลทั้งหมดจะแตก!
abhaga

2
@abhaga คุณไม่ควรติดตั้งpipนอกvirtualenvบนใด ๆการติดตั้งลินุกซ์
โธ

เราไม่ควรถอนการติดตั้งแพ็คเกจด้วยการลบไฟล์และไดเรกทอรีด้วยตนเอง :) นี่เป็นแนวทางปฏิบัติที่ดีและมีโอกาสเสมอเมื่อเราต้องการทำลายพวกเขา แต่สิ่งสำคัญคือต้องรู้ว่าไม่ปลอดภัยที่จะลบไดเรกทอรีนั้น
abhaga

ใน CentOS7 ของฉันมีบางอย่างที่แตกต่างกัน: 1. ควรมี: /usr/local/include/python2.7 โดยไม่มี bin; 2. ไฟล์ man คือ /usr/local/share/man/man1/python2.7.1; 3. ไฟล์อื่น: /usr/local/bin/python2.7-config
Bin S

7

เริ่มต้นจากรายการ @ Anthon rmและใช้คำแนะนำ @ bin-s เพื่อค้นหาไฟล์ใหม่ฉันมากับ bash-script นี้เพื่อกำจัด Python-3.6.6 ของฉัน (ซึ่งถูกติดตั้งจากแหล่งที่มาด้วยmake altinstall):

prefix='/usr/local/'
pyver='3.6'

rm -rf \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/pydoc \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}bin/python${pyver} \
    ${prefix}bin/pip${pyver} \
    ${prefix}bin/include/python${pyver} \
    ${prefix}lib/libpython${pyver}.a \
    ${prefix}lib/python${pyver} \
    ${prefix}lib/pkgconfig/python-${pyver}.pc \
    ${prefix}lib/libpython${pyver}m.a \
    ${prefix}bin/python${pyver}m \
    ${prefix}bin/2to3-${pyver} \
    ${prefix}bin/python${pyver}m-config \
    ${prefix}bin/idle${pyver} \
    ${prefix}bin/pydoc${pyver} \
    ${prefix}bin/pyvenv-${pyver} \
    ${prefix}share/man/man1/python${pyver}.1 \
    ${prefix}include/python${pyver}m
    ${prefix}bin/pydoc ## WARN: skip if other pythons in local exist.

ใช้ด้วยความระมัดระวัง (เช่นเพิ่ม-Iตัวเลือกใน rm cmd เพื่อตรวจสอบการฆ่าแต่ละครั้ง)


ดีมาก. ตอนนี้ python3.X ไม่ปรากฏขึ้นเมื่อฉันพิมพ์ python3 และกด tab
Prometheus

1

โดยปกติไฟล์ทั้งหมดจะถูกติดตั้งในเกือบหนึ่งนาที คุณสามารถใช้ "ค้นหา" เพื่อตรวจสอบไฟล์ที่ติดตั้งทั้งหมดเกือบจะในเวลาเดียวกันจากนั้น "rm" ด้วยตนเอง หวังว่าจะเป็นประโยชน์

find /usr/local/ -type f -newer <some latest old file>
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.