gỡ cài đặt Python bằng cách biên dịch mã nguồn?


18

Tôi đã cài đặt Python 2.7.9 trên Ubuntu 14.04 bằng cách biên dịch mã nguồn của nó , bởi .configre, makemake altinstall. make altinstalllà vì tôi không muốn ghi đè lên Python 2.7.6 mặc định. Bản thân tôi đã cài đặt 2.7.9 /usr/local/bin/python2.7và nhiều tệp khác trong các thư mục khác /usr/local. Từ README trong gói cài đặt nguồn:

Trên các hệ thống Unix và Mac nếu bạn có ý định cài đặt nhiều phiên bản Python bằng cùng một tiền tố cài đặt (đối số --prefix cho tập lệnh cấu hình), bạn phải lưu ý rằng tệp thực thi python chính của bạn không bị ghi đè bởi cài đặt phiên bản khác.

Tất cả các tệp và thư mục được cài đặt bằng cách sử dụng "make altinstall" chứa phiên bản chính và phụ và do đó có thể sống cạnh nhau. "make install" cũng tạo $ {tiền tố} / bin / python dùng để chỉ $ {tiền tố} /bin/pythonX.Y.

Nếu bạn định cài đặt nhiều phiên bản bằng cùng một tiền tố, bạn phải quyết định phiên bản nào (nếu có) là phiên bản "chính" của bạn. Cài đặt phiên bản đó bằng cách sử dụng "make install". Cài đặt tất cả các phiên bản khác bằng cách sử dụng "make altinstall".

Ví dụ: nếu bạn muốn cài đặt Python 2.5, 2.6 và 3.0 với 2.6 là phiên bản chính, bạn sẽ thực thi "make install" trong thư mục bản dựng 2.6 của mình và "tạo altinstall" trong các thư mục khác.

Bây giờ tôi muốn gỡ cài đặt tự cài đặt 2.7.9.

  1. May mắn là tôi vẫn có mã nguồn, nhưng thật không may, Makefile không có phần gỡ cài đặt

    $ sudo make uninstall
    make: *** No rule to make target `uninstall'.  Stop.
  2. Sau đó, tôi đã thử một cách khác: đầu tiên tạo một deb từ nguồn và biên dịch, cài đặt deb (hy vọng ghi đè lên các tệp đã cài đặt từ đó make altinstall), sau đó gỡ cài đặt deb.

    Nhưng khi tôi tạo ra các tập tin deb bằng checkinstall, tôi không chắc chắn nếu và làm thế nào tôi nên làm khác nhau cho make altinstalltừ cho make install. Những gì tôi đã cố gắng là:

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

    Tôi tự hỏi làm thế nào tôi có thể tạo một deb để cài đặt deb sẽ nhân đôi quá trình cài đặt make altinstall?

  3. Hoặc cách bạn gỡ cài đặt python 2.7.9 của tôi là gì?

Lưu ý: gói nguồn trong liên kết đầu tiên cũng có setup.py, install-shbên cạnh đó README.


Python không cài đặt ở nhiều nơi. Tôi sẽ chỉ loại bỏ các tập tin bằng tay.
Faheem Mitha

cảm ơn. những gì không phải là nhiều nơi sau đó?
Tim

Hãy xem một trong các gói nhị phân. Về cơ bản, đó là những nơi giống nhau, ngoại trừ /usr/localđược sử dụng thay vì /usr. dpkg -L python2.7dpkg -L python2.7-minimal. Và bạn cần 2.7.9gì?
Faheem Mitha

Tôi nghe nói rằng nó có pip theo mặc định. Nhưng sau khi cài đặt, tôi không thấy nó có pip.
Tim

Bạn có thể cài đặt pip apt-get install python-pip.
Faheem Mitha

Câu trả lời:


20

Các lệnh sau sẽ loại bỏ make altinstallpython -ed của bạn :

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

Bạn cũng có thể phải làm

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

Mặc dù make altinstallđã phục vụ tốt cho tôi nếu "python hệ thống" có số Major.minor khác với số bạn cài đặt, nó không hoạt động tốt nếu chỉ có số micro (vị trí thứ ba) khác nhau. Số đó được loại trừ khỏi tệp nhị phân đã cài đặt và bạn kết thúc với hai phiên bản pythonX.Y. Đây luôn là một vấn đề nhưng một khi các bản phân phối bắt đầu giao hàng với các tiện ích hệ thống dựa trên 2.7.X thì vấn đề này đã nghiêm trọng hơn vì 2.7 được coi là phần cuối cùng của loạt Python2.

IMO cách tiếp cận tốt nhất để giải quyết vấn đề này là ngăn không cho nó trở thành một: cấu hình python để cài đặt trong một thư mục không được sử dụng bởi bất kỳ python nào khác. Trên hệ thống của tôi họ đi theo /opt/python/X.Y.Z.

Để sử dụng bất kỳ Pythons nào được cài đặt ở đó, bạn sử dụng [virualenv][1]để tạo môi trường mới:

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

hoặc sử dụng [virtualenvwrapper][2]. Tôi có một số bí danh cho các phiên bản mới nhất trong loạt tôi làm việc cùng.

Nếu bạn đang sử dụng toxđể thử nghiệm với nhiều phiên bản (bạn nên), bí danh sau sẽ giúp nó tìm thấy phiên bản khác nhau:

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'

(đây là các phiên bản mới nhất, tôi sử dụng một thiết lập hơi khác bằng cách duy trì các liên kết từ /opt/python/2.7mới nhất /opt/python/2.7.9và cho các số nhỏ khác, trong quá trình tải xuống, xây dựng và cài đặt phiên bản python mới)

Những cài đặt này không bao giờ được sử dụng trực tiếp. Chúng luôn được sử dụng làm cơ sở cho các virtualenvmôi trường duy nhất, do đó tôi không quan tâm rằng chúng không nằm trong PATH bình thường của tôi.


2
Đừng xóa /usr/local/lib/python2.7! Tất cả các mô-đun python toàn cầu được cài đặt bởi pip sống trong /usr/local/lib/python2.7/dist-packages. Tất cả các mô-đun sẽ phá vỡ!
abhaga

2
@abhaga Bạn không nên cài đặt với pipbên ngoài của một virtualenvngày bất kỳ cài đặt Linux
Anthon

Chúng ta cũng không nên gỡ cài đặt các gói bằng cách xóa thủ công các tệp và thư mục. :) Đây là những thực hành tốt và luôn có những lúc chúng ta cần phá vỡ chúng. Nhưng điều quan trọng là phải biết rằng không an toàn để loại bỏ thư mục đó.
abhaga

Trong CentOS7 của tôi, có một số khác nhau: 1. bao gồm: /usr/local/include/python2.7, không có bin; 2. tập tin người đàn ông là /usr/local/share/man/man1/python2.7.1; 3. Một tệp khác: /usr/local/bin/python2.7-config
Bin S

7

Bắt đầu từ rmdanh sách của @ Anthon và áp dụng lời khuyên @ bin-s để tìm kiếm các tệp mới hơn, tôi đã đưa ra tập lệnh bash này để xóa sạch hoàn toàn Python-3.6.6 của tôi (đã được cài đặt từ các nguồn với 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.

Sử dụng cẩn thận (ví dụ: thêm -Itùy chọn trong rm cmd để xác minh mỗi lần giết).


rất đẹp. Bây giờ python3.X không hiển thị khi tôi nhập python3 và nhấn tab
Prometheus

1

Thông thường tất cả các tệp được cài đặt trong gần một phút. Bạn có thể sử dụng "find" để kiểm tra tất cả các tệp đã cài đặt gần như cùng một lúc, sau đó "rm" chúng theo cách thủ công. Chúc nó hữu ích.

find /usr/local/ -type f -newer <some latest old file>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.