Mengkompilasi python saya sendiri telah merusak skrip sistem?


1

(Bagi mereka yang tidak terbiasa dengannya, CrunchBang pada dasarnya adalah Squeeze Debian yang sudah dikonfigurasikan.)

Jadi beberapa waktu yang lalu, saya menulis naskah dan ingin menggunakan fitur Python yang diperkenalkan pada 2.7. Karena versi terbaru yang saya dapatkan dari apt repo Debian Squeeze adalah 2.6.6.8, saya memutuskan untuk mengunduh sumber terbaru dan membuatnya sendiri. Setelah mengatasi sendiri ketergantungan, saya akhirnya dapat sesuatu, dan menyelesaikan proyek saya.

Namun, sejak itu, sejumlah skrip sistem telah berhenti berfungsi. Saya perhatikan bahwa mereka (skrip yang sekarang rusak) semuanya dimulai dengan #!/usr/bin/env python [1] dan bergantung pada satu atau lebih hal yang telah diinstal oleh apt-get / synaptic, tetapi dikaitkan dengan Python 2.6. Beberapa yang telah saya perbaiki dengan mengubah tajuk secara manual #!/usr/bin/python, tapi sekarang aku mulai bertanya-tanya

  1. Apakah ini normal untuk orang yang menggulung Python sendiri?
  2. Apakah saya salah mengkompilasi / mengatur 2.7?
  3. Apakah tidak masuk akal untuk mengharapkan paket diinstal dengan apt-get / synaptic untuk 'mengunci' dengan versi dependensi yang mereka instal?
  4. Haruskah saya entah bagaimana mengkonfigurasi ulang / mengkonfigurasi $ PATH saya sehingga /usr file ditemukan sebelum /usr/local mengajukan?
  5. Haruskah saya menghapus file hardlink / usr / local / bin / python dan semua skrip saya mulai dengan #!/usr/local/bin/python2.7?
  6. Apakah saya harus menginstal secara manual semua perpustakaan yang hilang, dll /usr/local? Jika demikian, apa cara terbaik untuk melakukan ini?
  7. Haruskah saya melaporkan bug ke pengelola paket, memproyeksikan sendiri, atau keduanya?

[1] Yang mana, karena cara jalur saya diatur, memanggil saya /usr/local/bin/python (2.7) daripada sistem /usr/bin/python (2.6)

Jawaban:


1

Ini cukup normal sehingga kebanyakan orang yang membangun lingkungan Python sendiri menggunakan sesuatu seperti virtualenv untuk mengelolanya. Mengganti Perl, Python, atau Ruby yang disediakan sistem hampir tidak pernah merupakan ide yang baik, dan ketiga bahasa menyediakan cara bagi pengembang untuk mengelola instalasi pribadi mereka sendiri (untuk Perl ada PerlBrew dan untuk Ruby ada RVM).


Itu luar biasa! Saya mendengar tentang virtualenv dalam konteks penyebaran, tidak menyadari itu berguna untuk pengembangan juga. Kurasa aku juga tidak ingin menggunakan apt-get untuk ini? Jadi saya harus menghapus /usr/local/binmkvir/python, mkvirtualenv -p /usr/local/bin/python2.7 dev lalu workon X / deactivate?
Nate Parsons

Saya tidak yakin apa yang Anda tanyakan ( /usr/local/binmkvir/python terlihat agak bingung), tapi apt-get install virtualenv baik-baik saja. Kamu melakukan ingin menghapus, atau setidaknya merelokasi python executable yang Anda buat dan gunakan virtualenv untuk menginstalnya dengan benar sehingga Anda dapat menggunakannya tanpa mengganggu sistem Python; lihat virtualenv dokumentasi.
geekosaur

Ups, oleh /usr/local/binmkvir/python maksud saya /usr/local/bin/python. Tentu saja itu hanya keberuntungan saya bahwa saya perlu v1.5.1 + untuk menggunakan Python 2.7, dan apt terbaru yang akan saya berikan adalah 1.4.9. Saya kira saya punya cara untuk pergi. (dan saya harus buta, karena saya masih tidak melihat di mana dalam dokumen itu dikatakan untuk ular piton lainnya. Yang paling dekat saya lihat adalah README Python mengatakan untuk menginstal semua kecuali versi primer)
Nate Parsons

Itu tidak mengatakan itu secara eksplisit; itu tersirat oleh fakta bahwa mengesampingkan Perl / Python / Ruby yang disediakan sistem hampir pasti untuk memecahkan banyak hal (seperti yang terjadi pada Anda). "hati-hati: api itu panas"
geekosaur

Jadi, mengapa nasihat itu hampir selalu untuk make install daripada make altinstall? Ini seperti mengatakan "letakkan komputer Anda dalam api"
Nate Parsons
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.