Nhiều phiên bản Python trên cùng một máy?


87

Có tài liệu chính thức trên trang web Python ở đâu đó, về cách cài đặt và chạy nhiều phiên bản Python trên cùng một máy trên Linux không?

Tôi có thể tìm thấy rất nhiều bài đăng và câu trả lời trên blog, nhưng tôi muốn biết liệu có cách chính thức "tiêu chuẩn" nào để thực hiện việc này không?

Hay tất cả điều này phụ thuộc vào hệ điều hành?

Câu trả lời:


79

Tôi nghĩ nó hoàn toàn độc lập. Chỉ cần cài đặt chúng, sau đó bạn có các lệnh như /usr/bin/python2.5/usr/bin/python2.6. Liên kết /usr/bin/pythonđến liên kết bạn muốn sử dụng làm mặc định.

Tất cả các thư viện đều nằm trong các thư mục riêng biệt (được đặt tên theo phiên bản).

Nếu bạn muốn biên dịch các phiên bản theo cách thủ công, thì đây là từ tệp readme của mã nguồn Python:

Cài đặt nhiều phiên bản

Trên hệ thống Unix và Mac, nếu bạn định cài đặt nhiều phiên bản Python bằng cách sử dụng cùng một tiền tố cài đặt (- đối số - tiền tố 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 "make altinstall" đều chứa phiên bản chính và phụ và do đó có thể tồn tại song song. "make install" cũng tạo $ {prefix} / bin / python3 tham chiếu đến $ {prefix} /bin/pythonX.Y. Nếu bạn định cài đặt nhiều phiên bản sử dụ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 build 2.6 của mình và "make altinstall" trong các thư mục khác.


5
Cảm ơn, "thực hiện cài đặt" trên chính và "thực hiện cài đặt" trên phụ đã làm rõ ràng.
Andriy Drozdyuk

4
Bất kỳ cách chính xác để chia sẻ thư viện giữa các phiên bản? Giả sử tôi có MySQLdb cho 2.6, sau đó cài đặt 2.7. làm cách nào để cung cấp MySQLdb cho 2.7?
romeroqj

Tất cả thông tin bạn cung cấp là dành cho Unix / Linux và Mac OS, vì vậy rõ ràng là không "hoàn toàn độc lập" với OS như OP yêu cầu. Đối với Windows, quá trình này khá khác biệt nhưng không kém phần dễ dàng.
wwwayne

28

Trên Windows, chúng được cài đặt vào các thư mục riêng biệt, "C: \ python26" và "C: \ python31", nhưng các tệp thực thi có cùng tên "python.exe".

Tôi đã tạo một thư mục "C: \ python" khác có chứa "python.bat" và "python3.bat" đóng vai trò là trình bao bọc cho "python26" và "python31" tương ứng và đã thêm "C: \ python" vào PATHbiến môi trường.

Điều này cho phép tôi nhập pythonhoặc python3trong các trình bao bọc Python .bat của tôi để bắt đầu một trình mà tôi mong muốn.

Trên Linux, bạn có thể sử dụng #!thủ thuật để chỉ định phiên bản bạn muốn một tập lệnh sử dụng.


Thêm gì vào các tệp .bat đó?
Aidis

Sẽ không tán thành câu trả lời này chỉ vì nó rất cụ thể cho Windows và câu hỏi liên quan đến Linux, nếu không thì thông tin tuyệt vời.
Jim Aho

2
Người sử dụng không còn tồn tại, tôi thực sự muốn tập tin batch
Wargog

6
Đây là những gì tôi đặt trong tệp python.bat của mình (chỉ một dòng): "c: \ python27 \ python% *" Sau đó, tôi chỉ gọi nó bình thường, tức là 'python test.py' và% * sẽ lấy tất cả các đối số và chuyển nó đến tệp thực thi thực tế. Bạn cũng có thể sử dụng mklink trực tiếp trong thư mục C: \ bin của mình. Xem ở đây để biết chi tiết: stackoverflow.com/a/13953614/865929
Sean Glover

1
Bây giờ bạn chỉ có thể chạy py -3.4hoặc py -2.7và chương trình py(bên dưới C:\Windows) sẽ chọn trình thông dịch python đó (giả sử nó đã được cài đặt).
JamesThomasMoon1979 11/02/19

12

Cập nhật 2019: Sử dụng asdf

Ngày nay, tôi khuyên bạn nên sử dụng asdf để cài đặt các phiên bản khác nhau của trình thông dịch Python bên cạnh nhau.

Lưu ý1: asdfkhông chỉ hoạt động cho Python mà cho tất cả các ngôn ngữ chính.

Note2: asdfhoạt động tốt khi kết hợp với các trình quản lý gói phổ biến như pipenvthơ .

Nếu bạn đã cài đặt asdf, bạn có thể dễ dàng tải xuống / cài đặt trình thông dịch Python mới:

# Install Python plugin for asdf:
asdf plugin-add python

# List all available Python interpreters:
asdf list-all python

# Install the Python interpreters that you need:
asdf install python 3.7.4
asdf install python 3.6.9
# etc...

# If you want to define the global version:
asdf global python 3.7.4

# If you want to define the local (project) version:
# (this creates a file .tool-versions in the current directory.)
asdf local python 3.7.4

Câu trả lời cũ: Cài đặt Python từ nguồn

Nếu bạn cần cài đặt nhiều phiên bản Python (bên cạnh phiên bản chính) trên Ubuntu / Mint : (sẽ hoạt động tương tự trên các Unix khác.)

1) Cài đặt các Gói cần thiết để biên dịch nguồn

$ sudo apt-get install build-essential checkinstall
$ sudo apt-get install libreadline-gplv2-dev libncursesw5-dev libssl-dev libsqlite3-dev tk-dev libgdbm-dev libc6-dev libbz2-dev

2) Tải xuống và giải nén phiên bản Python mong muốn

Tải xuống Nguồn Python cho Linux dưới dạng tarball và chuyển nó sang /usr/src.

Giải nén gói đã tải xuống tại chỗ. (thay thế 'x's bằng phiên bản đã tải xuống của bạn)

$ sudo tar xzf Python-x.x.x.tgz

3) Biên dịch và cài đặt nguồn Python

$ cd Python-x.x.x
$ sudo ./configure
$ sudo make altinstall

Thùng Python mới của bạn hiện đã được đặt tại /usr/local/bin. Bạn có thể kiểm tra phiên bản mới:

$ pythonX.X -V
Python x.x.x
$ which pythonX.X
/usr/local/bin/pythonX.X

# Pip is now available for this version as well:
$ pipX.X -V
pip X.X.X from /usr/local/lib/pythonX.X/site-packages (python X.X)

6

Cách cài đặt các phiên bản Python khác nhau thực sự phụ thuộc vào hệ điều hành.

Tuy nhiên, nếu bạn đang sử dụng linux, bạn có thể sử dụng một công cụ như pythonbrew hoặc pythonz để giúp bạn dễ dàng quản lý và chuyển đổi giữa các phiên bản khác nhau.


Tôi đã cài đặt trên máy mac với cấu hình / thực hiện cài đặt. Không có vấn đề cho đến nay.
Evgeny

Có thể cung cấp $user1phiên bản python khác mặc định không?
Roland

1
@Roland pyenvsẽ hoạt động cho điều đó. Từ readme trong liên kết được đăng ở trên:> [Cho phép] bạn thay đổi phiên bản Python toàn cầu trên cơ sở mỗi người dùng.
theeddieh

5

Tôi đang sử dụng Mac và cách tốt nhất phù hợp với tôi là sử dụng pyenv!

Các lệnh dưới đây dành cho Mac nhưng khá giống với Linux (xem các liên kết bên dưới)

#Install pyenv
brew update
brew install pyenv

Giả sử bạn có python 3.6 làm phiên bản chính trên máy mac của mình:

python --version 

Đầu ra:

Python <your current version>

Bây giờ cài đặt python 3.7, đầu tiên liệt kê tất cả

pyenv install -l

Hãy xem 3.7.3:

pyenv install 3.7.3

Đảm bảo chạy điều này trong Terminal (thêm nó vào ~ / .bashrc hoặc ~ / .zshrc):

export PATH="/Users/username/.pyenv:$PATH"
eval "$(pyenv init -)"

Bây giờ hãy chạy nó chỉ trên terminal / shell đã mở :

pyenv shell 3.7.3

Bây giờ chạy

python --version

Đầu ra:

Python 3.7.3

Và không kém phần quan trọng, hãy gỡ cài đặt nó trong shell / iTerm đã mở:

pyenv shell --unset

Bạn có thể chạy nó trên toàn cầu hay địa phương cũng


1

Trình quản lý gói - cấp người dùng

Đối với trình quản lý gói có thể cài đặt và quản lý nhiều phiên bản python, đây là những lựa chọn tốt:

  • pyenv - chỉ có thể cài đặt và quản lý các phiên bản của python
  • asdf - có thể cài đặt và quản lý nhiều ngôn ngữ khác nhau

Ưu điểm của các trình quản lý gói này là có thể dễ dàng thiết lập và cài đặt nhiều phiên bản python với chúng hơn là cài đặt python từ nguồn. Họ cũng cung cấp các lệnh để dễ dàng thay đổi (các) phiên bản python có sẵn bằng cách sử dụng miếng chêm và đặt phiên bản python trên mỗi thư mục.

Nhược điểm này là theo mặc định, chúng được cài đặt ở cấp người dùng (bên trong thư mục chính của bạn) và yêu cầu một chút cấu hình cấp người dùng - bạn sẽ cần chỉnh sửa các tệp của mình ~/.profile~/.bashrchoặc các tệp tương tự. Điều này có nghĩa là không dễ sử dụng chúng để cài đặt nhiều phiên bản python trên toàn cầu cho tất cả người dùng. Để làm điều này, bạn có thể cài đặt từ nguồn cùng với phiên bản python hiện có của hệ điều hành.


Cài đặt từ nguồn - toàn hệ thống

Bạn sẽ cần quyền root cho phương pháp này.

Xem tài liệu chính thức về python để xây dựng từ nguồn để có thêm các cân nhắc và tùy chọn.

/usr/locallà vị trí được chỉ định để quản trị viên hệ thống cài đặt phần mềm được chia sẻ (trên toàn hệ thống), vì vậy các thư mục con của nó là nơi tốt để tải xuống nguồn python và cài đặt. Xem phần 4.9 của Tiêu chuẩn phân cấp tệp của Quỹ Linux .

Cài đặt bất kỳ phụ thuộc xây dựng nào. Trên hệ thống dựa trên Debian, hãy sử dụng:

apt update
apt install build-essential zlib1g-dev libncurses5-dev libgdbm-dev libnss3-dev libssl-dev libsqlite3-dev libreadline-dev libffi-dev libbz2-dev

Chọn phiên bản python bạn muốn cài đặt. Xem trang Bản phát hành nguồn Python để biết danh sách.

Tải xuống và giải nén tệp trong /usr/local/src, thay thế X.X.Xbên dưới bằng phiên bản python (tức là 3.8.2).

cd /usr/local/src
wget https://www.python.org/ftp/python/X.X.X/Python-X.X.X.tgz
tar vzxf Python-X.X.X.tgz

Trước khi xây dựng và cài đặt, hãy đặt CFLAGSbiến môi trường với cờ trình biên dịch C cần thiết (xem maketài liệu của GNU ). Điều này thường không cần thiết cho việc sử dụng chung, nhưng nếu, ví dụ: bạn định tạo một plugin uWSGI với phiên bản python này, bạn có thể muốn đặt cờ -fPIC, với những điều sau:

export CFLAGS='-fPIC'

Thay đổi thư mục làm việc thành thư mục nguồn python đã giải nén và định cấu hình bản dựng. Có thể bạn sẽ muốn sử dụng --enable-optimizationstùy chọn trên ./configurelệnh để tối ưu hóa có hướng dẫn cấu hình . Sử dụng --prefix=/usr/localđể cài đặt vào các thư mục con thích hợp ( /usr/local/bin, /usr/local/lib, vv).

cd Python-X.X.X
./configure --enable-optimizations --prefix=/usr/local

Xây dựng dự án bằng makevà cài đặt với make altinstallđể tránh ghi đè bất kỳ tệp nào khi cài đặt nhiều phiên bản. Xem cảnh báo trên trang này của tài liệu xây dựng python.

make -j 4
make altinstall

Sau đó, bạn sẽ có thể chạy các phiên bản python và pip mới của mình với pythonX.XpipX.X(tức là python3.8pip3.8). Lưu ý rằng nếu phiên bản nhỏ của cài đặt mới của bạn giống với phiên bản của hệ điều hành (ví dụ: nếu bạn đang cài đặt python3.8.4 và hệ điều hành sử dụng python3.8.2), thì bạn sẽ cần chỉ định toàn bộ đường dẫn ( /usr/local/bin/pythonX.X) hoặc đặt một bí danh để sử dụng phiên bản này.


0

Nó phụ thuộc nhiều nhất vào hệ thống phân phối gói bạn sử dụng. Ví dụ: với MacPorts, bạn có thể cài đặt nhiều gói Python và sử dụng pyselecttiện ích để chuyển đổi mặc định giữa chúng một cách dễ dàng. Tại mọi thời điểm, bạn có thể gọi các trình thông dịch Python khác nhau bằng cách cung cấp đường dẫn đầy đủ và bạn có thể liên kết với tất cả các thư viện và tiêu đề Python bằng cách cung cấp đường dẫn đầy đủ cho chúng.

Vì vậy, về cơ bản, bất kỳ cách nào bạn cài đặt các phiên bản, miễn là bạn giữ các bản cài đặt của mình riêng biệt, bạn sẽ có thể chạy chúng riêng biệt.


Hệ thống phân phối trọn gói là gì?
Andriy Drozdyuk

@drozzy: Ví dụ RPM được OpenSuse sử dụng hoặc apt được sử dụng bởi các bản phân phối dựa trên Debian hoặc cổng được sử dụng bởi Gentoo, v.v. Về cơ bản, nó là một công cụ để cài đặt phần mềm.
Felix Kling

0

Tôi đã làm điều này với hoa tiêu anaconda. Tôi đã cài đặt trình điều hướng anaconda và tạo hai môi trường phát triển khác nhau với các phiên bản python khác nhau

và chuyển đổi giữa các phiên bản python khác nhau bằng cách chuyển đổi hoặc kích hoạt và hủy kích hoạt môi trường.

đầu tiên cài đặt điều hướng anaconda và sau đó tạo môi trường.

xem trợ giúp tại đây về cách quản lý môi trường

https://docs.anaconda.com/anaconda/navigator/tutorials/manage-en canh/

Đây là video làm điều đó với conda

https://youtu.be/EGaw6VXV3GI

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.