Câu hỏi Làm thế nào để lệnh chương trình 'python' thực thi Python 3?


Các python lệnh chương trình thực hiện Python 2. Python 3 có thể được thực hiện bằng cách sử dụng python3 chỉ huy. Làm thế nào Python 3 có thể được thực hiện bằng cách sử dụng python chỉ huy?


224
2017-07-17 08:04


gốc


Chỉ cần cảnh báo: Không cố gắng thay đổi liên kết / usr / bin / python để trỏ tới python3 thay vì 2.7. Nhiều chương trình có sẵn trong bản repos Ubuntu yêu cầu / usr / bin / python tương thích với python 2.x. - soulsource
@soulsource, vâng tôi biết điều đó. đó là lý do tại sao tôi hỏi là có một "nâng cấp" tùy chọn có sẵn hay không. - Giri
Ah, bây giờ tôi đã có những gì bạn có nghĩa là với nâng cấp ... Trên thực tế các nhà phát triển Ubuntu đang làm việc trên đó: wiki.ubuntu.com/Python/3 "Đây là một mục tiêu phát hành cho Ubuntu 14.04 LTS chỉ có Python 3 trên các ảnh đĩa CD trên máy tính để bàn." - soulsource
Trên một lưu ý khác, bất kỳ ai đến đây vì họ đang cố gắng tìm hiểu về cách đặt Python 3 làm mặc định của họ, thay vào đó có thể sử dụng trong nghiên cứu môi trường ảo (ví dụ: virtualenv) hoặc vùng chứa (ví dụ: LXC hoặc Docker). - Kevin
Liên quan đến cảnh báo của soulsource ở đầu xem PEP 394 chuẩn hóa các quy ước đặt tên cho các thực thi Python cùng tồn tại và trên đó các lập trình viên Python và các nhà bảo trì gói làm (và nên) dựa vào. - David Foerster


Các câu trả lời:


Một cách an toàn đơn giản là sử dụng bí danh. Đặt nó vào ~/.bashrc hoặc là ~/.bash_aliases tập tin:

alias python=python3

Sau khi thêm phần trên vào tệp, hãy chạy lệnh dưới đây:

source ~/.bash_aliases or source ~/.bashrc

Ví dụ:

$ python --version
Python 2.7.6
$ python3 --version
Python 3.4.3
$ alias python=python3
$ python --version
Python 3.4.3

Để phá vỡ bí danh, hãy sử dụng command được xây dựng trong lệnh:

$ command python --version
Python 2.7.6

Một cách khác để phá vỡ bí danh là sử dụng \ trước lệnh.

$ \python --version 
Python 2.7.6

Để vô hiệu hóa bí danh trong trình bao hiện tại, hãy sử dụng unalias được xây dựng trong lệnh:

$ unalias python
$ python --version
Python 2.7.6

258
2017-07-17 08:13



vì vậy không có "nâng cấp" tùy chọn .. ?? - Giri
@Giri Bạn nói rằng bạn có python3. Điều gì để nâng cấp? - Radu Rădeanu
thực sự tôi muốn xóa sạch 2.7 và thay thế bằng 3.3. Có vẻ như đó là một ý tưởng tồi lúc này .. - Giri
+1 không có lý do gì để thanh toán 2.7 để có thể làm việc với 3.3. Vì nhiều phần mềm vẫn còn phụ thuộc vào 2,7; chỉ giữ cho nó kéo dài xung quanh. - don.joey
@begueradj An bí danh hoàn toàn khác với liên kết tượng trưng. - Radu Rădeanu


[Tháng 6 năm 2016] Nơi được đề nghị cho thông tin về quá trình chuyển đổi là chính thức Ubuntu Python trang.


Từ Ubuntu wiki:

Đối với cả Ubuntu và Debian, chúng tôi có liên tục dự án những mục tiêu để làm cho Python 3 là phiên bản Python mặc định, ưa thích trong các bản phân phối.

Cái gì đây không làm nghĩa là:

  • /usr/bin/python sẽ trỏ đến Python 3. Không, điều này sẽ không xảy ra (trừ khi PEP 394 ủng hộ nếu không, đó là nghi ngờ cho tương lai gần). /usr/bin/python và /usr/bin/python2 sẽ trỏ tới Python 2.7 và /usr/bin/python3 sẽ trỏ tới phiên bản Python 3 được hỗ trợ mới nhất.

  • Python 2 sẽ bị xóa khỏi kho lưu trữ. Không, điều này sẽ không xảy ra. Chúng tôi hy vọng Python 2.7 sẽ vẫn được hỗ trợ và có sẵn trong Ubuntu trong một thời gian dài, cho rằng PEP 373 hứa hẹn hỗ trợ sửa lỗi bảo trì ngược dòng cho đến năm 2020.

Không nên thay đổi liên kết tượng trưng vì các gói phụ thuộc khác, nhưng chúng "có các mục tiêu dự án đang diễn ra để làm cho Python 3 trở thành phiên bản Python mặc định, ưa thích trong các bản phân phối".


Để sử dụng CLI, như @Radu Rădeanu, Tôi khuyên bạn nên đặt bí danh trong người dùng ~/.bashrc, .bash_aliases tệp (các tệp khác nhau, bao gồm ~/.bash_profile, tất cả đều được tải cùng nhau và chỉ đơn giản là cho mục đích tổ chức). Python môi trường ảo cũng hoạt động tốt.

Nhu la:

alias python=python3

hoặc là

alias python='/usr/bin/python3'

Sau đó, các tập lệnh có thể bắt đầu bằng một cái gì đó như:

#!/usr/bin/env python

thay vì

#!/usr/bin/python3

Tôi vẫn khuyên bạn nên sử dụng #!/usr/bin/python3 (hoặc là #!/usr/bin/env python3) trong các tập lệnh để tương thích chéo đơn giản hơn.

Sử dụng env là tốt đẹp để sử dụng hỗn hợp với môi trường ảo.


68
2018-06-02 16:31



Điều này dường như đã lỗi thời: họ dự định loại bỏ python2 trong Xenial, nhưng sau đó thì không. - OrangeDog
@OrangeDog, cảm ơn bạn đã cập nhật. Có, trang wiki tôi trích dẫn hiện được gắn cờ là lỗi thời, vì đã có nhiều tiến bộ hơn trong hai năm qua để chuyển sang chỉ Python 3. Trang mới để theo dõi tiến trình này là chính thức Trang Python Python. - Kevin
Trang "mới nhất" cũng đã lỗi thời, liên quan đến các kế hoạch cho Xenial. - OrangeDog
Tôi sẽ không nói đó là "lỗi thời" nhiều như "nó chưa được cập nhật gần đây". Nó vẫn có vẻ là vị trí hiện tại để giữ các bài viết về điều này. Tuy nhiên, trong các ý kiến ​​ở đây, tôi sẽ đánh giá cao bất kỳ nguồn khác gần đây bất cứ ai có thể tìm thấy. Thêm nhiều nguồn hơn vào câu trả lời của tôi, về lý do tại sao không thực hiện thay đổi python, không thực sự có liên quan cho đến khi chuyển đổi hoàn tất. Thậm chí sau đó, nó có thể chỉ trở thành một vấn đề không. - Kevin
@OrangeDog nó là rất nhiều có thể có một hệ thống Xenial mà không cần Python 2 - Tôi đã chạy Ubuntu Xenial Mate trên Raspberry PI và nó có máy tính để bàn nhưng không python2.7. Vẫn còn một số gói tùy chọn (hoặc những gói cần thiết cho trải nghiệm trên máy tính để bàn) mà kéo Python 2 vào cơ hội để bạn có thể có những gói đó. - Antti Haapala


Cập nhật: Đây là cách sai, tôi đã học được, vì Python2 và Python3 không thể hoán đổi cho nhau.

Bạn có thể thử công cụ dòng lệnh update-alternatives.

$ sudo update-alternatives --config python

Nếu bạn gặp lỗi "không có lựa chọn thay thế cho python" thì hãy tự thiết lập một thay thế bằng lệnh sau:

$ sudo update-alternatives --install /usr/bin/python python /usr/bin/python3 10

Thay đổi đường dẫn /usr/bin/python3 đến phiên bản python mong muốn của bạn cho phù hợp.


8
2018-05-04 14:03



python2 và python3 không phải là lựa chọn thay thế. Không sử dụng các lựa chọn thay thế cập nhật cho mục đích này. - jobin
Tại sao họ không? Có thể một trong các bạn vui lòng giải thích lý do update-alternatives không thích hợp cho python? Có phải vì legacy.python.org/dev/peps/pep-0394 ? - Dmitry Grigoryev
các lựa chọn thay thế là các triển khai khác nhau cho cùng một chức năng. python2 và python3 không cung cấp các chức năng giống nhau. - Ely
Bạn có thể làm một cái gì đó như thế này nếu bạn tự cài đặt (thông qua ppa hoặc bất cứ điều gì) các phiên bản khác của python3. sudo update-alternatives --install /usr/bin/python3 python3 /usr/bin/python3.7 2 - David Baucum


Ubuntu, và phần còn lại của bản phân phối Linux cho vấn đề đó, vẫn phụ thuộc phần lớn vào Python 2.7 cho một số ứng dụng và lệnh. Nếu bạn thay đổi tham chiếu mặc định của "python" thành Python 3.x, thì một số hàm Python sẽ bắt đầu ném các lỗi xác nhận.

Ví dụ, trên Ubuntu, 'pip' cho một sẽ không còn chạy đúng trừ khi bạn trực tiếp chỉnh sửa tệp và thay đổi shebang thành tham chiếu '#! / Usr / bin / env python2.7'. Trên các ứng dụng RHEL (Red Hat Enterprise Linux) như Red Hat, Fedora và CentOS, lệnh 'Yum' cũng phụ thuộc vào Python 2.7.

Điểm của tôi ở đây là bạn sẽ gây ra một số lượng đáng kể mã để bắt đầu ném các lỗi xác nhận chỉ để bạn có thể gõ 'python' trong thiết bị đầu cuối để tham khảo Python 3.x.

Bạn nên sử dụng lệnh 'python3' trong terminal và shebang '#! / Usr / bin / env python3' trong các tệp Python 3.x của bạn.


3
2018-03-25 15:43





Làm

cd ~
gedit .bash_aliases

sau đó viết

alias python=python3

hoặc là

alias python='/usr/bin/python3'

Lưu tệp, đóng thiết bị đầu cuối và mở lại.
Liên kết


1
2017-09-15 18:36





Bạn có thể dùng update-alternatives để cung cấp các phiên bản khác nhau của các chương trình có thể cần thiết vào các thời điểm khác nhau do các vấn đề tương thích.

Câu trả lời này Ví dụ về cách thiết lập mọi thứ cho đồng thời duy trì các phiên bản khác nhau của gcc / g ++ chẳng hạn.

chỉ làm tương tự với python2.7 và python 3.3


0
2017-10-18 13:19



Người dùng bắt đầu có thể không dễ dàng điều chỉnh câu trả lời được liên kết đến một tình huống khác. Ngoài việc ghi nhận câu trả lời trước đó, sẽ tốt hơn nếu bạn đặt các bước cần thiết cho Python. - chaskes
Đây là tôi tìm thấy giải pháp từng bước tốt linuxconfig.org/… - woto


cat > /usr/local/bin/py
#!/usr/bin/dash
python3 "$@"
<CTRL-D>

(miễn là bạn có quyền ghi vào / usr / local / bin) tương tự như vậy

cat > /usr/local/bin/pyi
#!/usr/bin/dash
python3 -i "$@"
<CTRL-D>

sau đó bạn chỉ gõ py (và sử dụng py in #! lines) cho python bạn đã chọn.


0
2018-01-15 22:57





Bạn có thể liên kết tượng trưng /usr/bin/python đến python3 với

sudo ln -s /usr/bin/python3 /usr/bin/python

Xem các câu trả lời khác cho lý do tại sao bạn có thể không muốn làm điều này. Ubuntu 18.04 không còn đi kèm với Python 2, vì vậy nó không nên quá xấu.


0
2018-05-03 21:01