Menggunakan berbagai versi Python

21

Latar belakang :

Karena saya mengembangkan program python yang harus dijalankan pada versi python yang berbeda, saya telah menginstal versi python yang berbeda di komputer saya.

Saya menggunakan FC 13 sehingga ia datang dengan python 2.6 pra-instal di /usr/bin/python2.6dan /usr/lib/python2.6.

Saya menginstal python 2.5 dari sumber, dan untuk menjaga semuanya tetap rapi, saya menggunakan --prefix=/usropsi, yang menginstal python di /usr/bin/python2.5dan /usr/lib/python2.5.

Sekarang, ketika saya menjalankan pythonprompt saya menunjukkan saya menggunakan versi 2.5. Namun, saya mengalami beberapa masalah dengan pemasangan.

Manajemen paket :

Menggunakan easy_install, paket selalu diinstal /usr/lib/python2.6/site-packages/. Saya mengunduh setuptools.egg untuk python 2.5 dan mencoba menginstalnya, tetapi itu memberi saya kesalahan:

/usr/lib/python2.5/site-packages does NOT support .pth files

Tampaknya python2.5 tidak ada di PYTHONPATH saya. Saya pikir instalasi default akan menambah dirinya sendiri ke PYTHONPATH, tetapi ketika saya menulis echo $PYTHONPATHdi promt, saya hanya menerima baris kosong.

Alex
sumber

Jawaban:

20

Cara yang disarankan untuk menginstal beberapa versi Python adalah dengan menginstal masing-masing dari sumber - mereka dengan senang hati akan hidup berdampingan. Anda kemudian dapat menggunakan virtualenv dengan juru bahasa yang sesuai untuk menginstal dependensi yang diperlukan (menggunakan pip atau easy_install). Trik untuk mempermudah pemasangan beberapa interpreter dari sumber adalah dengan menggunakan:

sudo make altinstall

bukannya "sudo make install" yang lebih biasa. Ini akan menambahkan nomor versi ke executable (sehingga Anda akan memiliki python-2.5, python-2.6, python-3.2 dll) sehingga mencegah konflik dengan versi sistem Python.

VPeric
sumber
2
Altinstall + virtualenv = pengembangan python nirvahna. Terima kasih!
Alex
13

Ini terdengar seperti aplikasi yang sempurna untuk virtualenv , alat yang sangat populer untuk membuat lingkungan Python yang terisolasi. Ini adalah perintah sampel untuk menentukan versi Python

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv
Adam Byrtek
sumber
Saya tidak berpikir virtualenvadalah solusi dalam hal ini. Lihat jawaban saya.
Piotr Dobrogost
5

Dengan menggunakan easy_install, paket selalu diinstal dalam /usr/lib/python2.6/site-packages/

Itu karena distutils menambahkan baris shebang ke semua skrip yang diinstal. Jika Anda menjalankan easy_installskrip secara langsung, skrip dieksekusi dengan penerjemah yang diinstal dengan (sesuai dengan baris shebang). Yang easy_installdijalankan tergantung pada PATHtidak Anda PYTHONPATH. Jika Anda ingin menginstal sebuah paket dengan Python 2.5 misalnya, Anda harus menjalankan easy_installjuru bahasa Python yang menentukan untuk digunakan:

/usr/bin/python2.5/python easy_install ...

Sebenarnya virtualenvtidak membantu di sini karena harus dibuat dalam konteks basis Python yang persis sama dengan menjalankan masalah easy_install. Itulah gunanya --pythonargumen virtualenv. Untuk beberapa alasan easy_installtidak memberikan argumen analog sehingga harus dijalankan dengan juru bahasa Python khusus seperti yang ditunjukkan di atas.

Piotr Dobrogost
sumber
Ini jawaban pertama saya di sini dan saya harap lencana Necromancer pertama :)
Piotr Dobrogost
Penjelasan yang sangat bagus, terima kasih! Lencana Necromancer diterima dengan baik;)
Alex
2

Saya juga menggunakan Fedora 13 dan PYTHONPATHtidak disetel.

Dalam python, sys.pathakan memberi Anda daftar jalur yang digunakan untuk mengimpor skrip.

Saya tidak terbiasa dengan bagaimana easy_installmemutuskan direktori tujuannya tetapi saya yakin akan ada argumen baris perintah yang bisa Anda berikan.

Coba tentukan versi python mana yang akan dijalankan easy_installdengan mendahului perintah Anda dengan path lengkap ke python yang Anda inginkan.

Juga periksa apakah easy_installsymlink di bin ke skrip dalam satu versi python yang telah Anda instal.

bkersten
sumber
1

Virtualenv jelas merupakan anugerah di sini.

Dalam pengaturan saya, saya memiliki variabel lingkungan VIRTUALENV_USE_DISTRIBUTEdiatur ke 1, sehingga paket distribusi yang lebih modern digunakan daripada setuptools. Saya membuat lingkungan virtual untuk dua versi Python di sistem saya seperti:

$ virtualenv -p python2.6 py2
$ virtualenv -p python3.2 py3

Saya kemudian membuat tiga alias di .bashrc:

alias py2='source $HOME/py2/bin/activate'
alias py3='source $HOME/py3/bin/activate'
alias idle='python -m idlelib.idle'

Jadi saya dapat menggunakan py2untuk beralih ke default Python 2.6 dan py3untuk beralih ke default Python 3.2. Masuk idleakan menjalankan versi IDLE mana pun yang sesuai untuk lingkungan virtual saya.

Instalasi paket ke salah satu lingkungan virtual ini biasanya hanya melibatkan pip installperintah.

pythoneer
sumber