Sử dụng các phiên bản khác nhau của Python


21

Bối cảnh :

Vì tôi phát triển các chương trình python phải chạy trên các phiên bản python khác nhau, tôi đã cài đặt các phiên bản python khác nhau trên máy tính của mình.

Tôi đang sử dụng FC 13 vì vậy nó đi kèm với python 2.6 được cài đặt sẵn trong /usr/bin/python2.6/usr/lib/python2.6.

Tôi đã cài đặt python 2.5 từ nguồn và để giữ cho mọi thứ gọn gàng, tôi đã sử dụng --prefix=/usrtùy chọn, cài đặt python trong /usr/bin/python2.5/usr/lib/python2.5.

Bây giờ, khi tôi chạy pythonlời nhắc của tôi cho thấy tôi đang sử dụng phiên bản 2.5. Tuy nhiên, tôi đang gặp một số vấn đề với việc cài đặt.

Quản lý gói :

Sử dụng easy_install, các gói luôn được cài đặt /usr/lib/python2.6/site-packages/. Tôi đã tải xuống setuptools.egg cho python 2.5 và cố gắng cài đặt nó, nhưng nó gây ra lỗi cho tôi:

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

Có vẻ như python2.5 không có trong PYTHONPATH của tôi. Tôi nghĩ rằng cài đặt mặc định sẽ tự thêm vào PYTHONPATH, nhưng khi tôi viết echo $PYTHONPATHtại promt, tôi chỉ nhận được một dòng trống.

Câu trả lời:


20

Cách được đề xuất để cài đặt nhiều phiên bản Python là cài đặt từng phiên bản từ nguồn - chúng sẽ cùng tồn tại với nhau. Sau đó, bạn có thể sử dụng virtualenv với trình thông dịch phù hợp để cài đặt các phụ thuộc cần thiết (sử dụng pip hoặc easy_install). Mẹo để cài đặt nhiều trình thông dịch từ nguồn dễ dàng hơn là sử dụng:

sudo make altinstall

thay vì "sudo make install" thông thường hơn. Điều này sẽ thêm số phiên bản vào tệp thực thi (vì vậy bạn có python-2.5, python-2.6, python-3.2, v.v.) để ngăn chặn mọi xung đột với phiên bản hệ thống của Python.


2
Altinstall + virtualenv = python phát triển nirvahna. Cảm ơn!
Alex

13

Điều này nghe có vẻ như là một ứng dụng hoàn hảo cho virtualenv , một công cụ rất phổ biến để tạo các môi trường Python bị cô lập. Đây là một lệnh mẫu để chỉ định phiên bản của Python

$ virtualenv --python=/usr/bin/python2.6 myvirtualenv

Tôi không nghĩ virtualenvlà giải pháp trong trường hợp này. Xem câu trả lời của tôi.
Piotr Dobrogost

5

Sử dụng easy_install, các gói luôn được cài đặt trong /usr/lib/python2.6/site-packages/

Đó là bởi vì distutils thêm dòng shebang cho tất cả các tập lệnh đang được cài đặt. Nếu bạn chạy easy_installtập lệnh trực tiếp, nó sẽ được thực thi với trình thông dịch, nó đã được cài đặt (theo dòng shebang). Mà easy_installđang được chạy phụ thuộc vào PATHkhông PYTHONPATH. Nếu bạn muốn cài đặt một gói trong phiên bản Python 2.5, bạn nên chạy easy_installchỉ định trình thông dịch Python để sử dụng:

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

Nói một cách nghiêm túc virtualenvkhông giúp ích gì ở đây vì nó phải được tạo ra trong bối cảnh Python cơ bản , vấn đề chính xác giống như khi chạy easy_install. Đó là những gì --pythonlập luận của virtualenvlà cho. Vì một số lý do easy_installkhông cung cấp đối số tương tự nên nó phải được chạy với trình thông dịch Python cụ thể như được hiển thị ở trên.


Đây là câu trả lời đầu tiên của tôi ở đây và tôi hy vọng cũng có huy hiệu Necromancer đầu tiên :)
Piotr Dobrogost

Giải thích rất tốt, cảm ơn bạn! Huy hiệu Necromancer cũng kiếm được;)
Alex

2

Tôi cũng đang sử dụng Fedora 13 và PYTHONPATHkhông được đặt.

Trong python, sys.pathsẽ cung cấp cho bạn một danh sách các đường dẫn được sử dụng để nhập tập lệnh.

Tôi không quen với cách easy_installquyết định thư mục đích của nó nhưng tôi chắc chắn sẽ có một đối số dòng lệnh bạn có thể đưa ra.

Hãy thử chỉ định phiên bản python nào sẽ chạy easy_installbên dưới bằng cách đặt trước lệnh của bạn với đường dẫn đầy đủ đến python mà bạn muốn.

Ngoài ra, hãy kiểm tra xem có phải easy_installlà một liên kết tượng trưng trong bin tới tập lệnh trong một phiên bản python mà bạn đã cài đặt không.


1

Virtualenv chắc chắn là một ơn trời ở đây.

Trong thiết lập của tôi, tôi có biến môi trường VIRTUALENV_USE_DISTRIBUTEđược đặt thành 1, để gói Phân phối hiện đại hơn được sử dụng thay cho setuptools. Tôi đã tạo môi trường ảo cho hai phiên bản Python trên hệ thống của mình như sau:

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

Sau đó tôi đã tạo ra ba bí danh trong .bashrc:

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

Do đó tôi có thể sử dụng py2để chuyển sang mặc định của Python 2.6 và py3để chuyển sang mặc định của Python 3.2. Nhập idlesẽ chạy bất kỳ phiên bản nào của IDLE phù hợp với môi trường ảo tôi đang ở.

Cài đặt các gói vào một trong những môi trường ảo này thường chỉ liên quan đến một pip installlệnh.

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.