Lệnh python3 không tìm thấy

Tôi đã bắt đầu quay trở lại quá trình phát triển Python khi tôi sẵn sàng đến với PyCon US. (Nếu bạn cũng đang hướng đến đó và muốn chia sẻ câu chuyện về Python của mình, hãy cho tôi biết. ) Khi tôi cài đặt một mô-đun để mày mò, tôi nhận được lời nhắc rằng tôi cần sớm cài đặt Python 3

$ pip install todoist-python 
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.

Vì vậy, tôi đã làm những gì mà bất kỳ ai trong chúng tôi sẽ làm và tìm kiếm trên Google để tìm hướng dẫn cập nhật môi trường phát triển của mình, chạy trên Mac (hệ điều hành macOS, trước đây gọi là OS X). Thật ngạc nhiên, tôi chỉ tìm thấy một số bài đăng trên StackOverflow và họ đã chỉ cho tôi các giải pháp từng phần. Đây là câu chuyện đầy đủ về cách thiết lập môi trường của bạn mà không vi phạm bất kỳ thứ gì được tích hợp trong hệ điều hành macOS

  1. Cài đặt pyenv

Moshe Zadka cảnh báo rằng làm sai điều này có thể dẫn đến ý tưởng không đáng tin cậy về việc Python đang chạy phụ thuộc quá chặt chẽ vào bí danh tải shell. Tôi biết Moshe đã quen thuộc với Python, nhưng điều tôi không biết là anh ấy là tác giả của nhiều hướng dẫn về Python cũng như một cuốn sách sắp ra mắt về phát triển Python trên macOS. Anh ấy đã giúp 40 đồng nghiệp phát triển Python một cách an toàn và nhất quán trên các hệ thống macOS theo một nguyên tắc cốt lõi

"Tiền đề cơ bản của tất cả sự phát triển Python là không bao giờ sử dụng hệ thống Python. Bạn không muốn 'Python mặc định' của Mac OS X là 'python3. ' Bạn muốn không bao giờ quan tâm đến Python mặc định. "

Làm thế nào để chúng ta ngừng quan tâm đến mặc định? . Công cụ này quản lý nhiều phiên bản Python và được mô tả là "đơn giản, không phô trương và tuân theo truyền thống của Unix về các công cụ có mục đích duy nhất thực hiện tốt một việc. "

Trong khi có sẵn những cách khác, cách dễ nhất để bắt đầu là với Homebrew

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB

2. Cài đặt Python

Bây giờ hãy cài đặt phiên bản Python mới nhất (3. 7. 3 kể từ khi viết bài này)

$ pyenv install 3.7.3
python-build: use openssl 1.0 from homebrew
python-build: use readline from homebrew
Downloading Python-3.7.3.tar.xz...
-> https://www.python.org/ftp/python/3.7.3/Python-3.7.3.tar.xz
Installing Python-3.7.3...
## further output not included ##

3. Đặt mặc định toàn cầu của bạn

Bây giờ Python 3 đã được cài đặt thông qua pyenv, chúng tôi muốn đặt nó làm phiên bản mặc định toàn cầu cho môi trường pyenv

$ pyenv global 3.7.3
# and verify it worked 
$ pyenv version
3.7.3 (set by /Users/mbbroberg/.pyenv/version)

Sức mạnh của pyenv đến từ sự kiểm soát của nó đối với đường đi của shell của chúng ta. Để nó hoạt động chính xác, chúng tôi cần thêm phần sau vào tệp cấu hình của mình (. zshrc cho tôi, có thể. bash_profile cho bạn)

$ echo -e 'if command -v pyenv 1>/dev/null 2>&1; then\n  eval "$(pyenv init -)"\nfi' >> ~/.zshrc

Sau lệnh đó, dotfile của chúng tôi (. zshrc cho zsh hoặc. bash_profile cho Bash) nên bao gồm những dòng này

if command -v pyenv 1>/dev/null 2>&1; then
  eval "$(pyenv init -)"
fi

Bây giờ chúng tôi biết chắc chắn rằng chúng tôi đang sử dụng Python 3. 7. 3 và pip sẽ cập nhật cùng với nó mà không có bất kỳ răng cưa thủ công nào giữa các phiên bản. Sử dụng đề xuất của Moshe để sử dụng trình quản lý phiên bản (pyenv) cho phép chúng tôi dễ dàng chấp nhận các bản nâng cấp trong tương lai mà không bị nhầm lẫn về Python nào chúng tôi đang chạy tại một thời điểm nhất định

Sự thành công

Khi cảm thấy thoải mái với quy trình làm việc này, bạn có thể sử dụng pyenv để quản lý nhiều phiên bản Python. Để quản lý phụ thuộc, việc sử dụng môi trường ảo cũng rất cần thiết. Tôi đã đề cập đến cách sử dụng thư viện venv tích hợp trong bài viết và Moshe đề xuất virtualenvwrapper để quản lý môi trường ảo

Hiểu thời gian chạy Python

Bây giờ bạn đã sửa các phiên bản Python của mình, bạn có thể yên tâm khám phá lý do tại sao vấn đề này lại khiến nhiều người nhầm lẫn

Phiên bản Python đi kèm với macOS đã lỗi thời so với những gì Python khuyến nghị sử dụng để phát triển. Đôi khi, việc cân nhắc thời gian chạy Python có thể là một thách thức hài hước, như XKCD đã lưu ý

Lệnh python3 không tìm thấy

Nhiều người dùng đã có hàng tá trình thông dịch Python trên máy tính nhưng không biết cách quản lý chúng hiệu quả. Thông thường, mọi người chỉ cần tải xuống bản phát hành Python mới nhất, di chuyển nó đến đường dẫn của họ và gọi nó là một ngày (hoặc sử dụng brew install python3, thao tác này sẽ thực hiện tương tự). Điều này có thể gây ra sự cố trong dây chuyền theo những cách khó chịu và khó khắc phục sự cố

Những gì không làm

Ý tưởng đầu tiên của tôi về cách biến Python 3 thành Python mặc định trên hệ thống của tôi là di chuyển phiên bản cũ và thêm phiên bản mới

# what I thought would work 
# first, I'll find my python binary 
$ which python 
/usr/bin/python 
# next, I'll move it to an unused name 
$ sudo mv /usr/bin/python /usr/bin/python2 
# lastly, I'll move the new binary to the previous path 
$ sudo mv $PATHTOBINARY/python3 /usr/bin/python 

Mô hình tuân theo những gì /usr/bin/ thường thực hiện giữa các bản phát hành chính của Python, nhưng tôi nhanh chóng nhận ra rằng đó là một bước đi sai lầm

$ sudo mv /usr/bin/python /usr/bin/python2 
mv: rename /usr/bin/python to /usr/bin/python2: Operation not permitted 

Rất may, macOS đã bảo vệ tôi khỏi vi phạm điều gì đó mà tôi không hiểu hết. Nghiên cứu sâu hơn chứng minh đây chính xác là điều chúng ta không nên làm

Một điều khác không nên thử

Lập trình và phát triển

  • Blog nhà phát triển mũ đỏ
  • Lập trình cheat sheet
  • Thử miễn phí. Đăng ký học Red Hat
  • sách điện tử. Giới thiệu về lập trình với Bash
  • Bash Shell Scripting Cheat Sheet
  • sách điện tử. Hiện đại hóa doanh nghiệp Java

Bây giờ chúng ta biết những gì không nên làm, hãy xem những gì chúng ta có thể làm. Có một số tùy chọn khi chúng tôi nghĩ về các mẫu cài đặt phổ biến cho các ứng dụng trên macOS

Sử dụng Python 3 làm mặc định macOS

Trang web của Python có trình cài đặt macOS Python 3, chúng tôi có thể tải xuống và sử dụng. Nếu chúng tôi sử dụng cài đặt gói, phần điền python3 sẽ có sẵn trong /usr/local/bin/

Bí danh là bắt buộc vì nhị phân Python được lưu trữ trong /usr/bin/ không thể thay đổi. Điều thú vị về một bí danh là nó dành riêng cho shell dòng lệnh của chúng ta. Vì tôi sử dụng zsh theo mặc định, nên tôi đặt phần sau vào. tập tin zshrc

________số 8_______

Nếu bạn đang sử dụng shell Bash mặc định, bạn có thể nối thêm văn bản này vào. bashrc

$ echo "alias python=/usr/local/bin/python3.7" >> ~/.bashrc 

Chiến lược này hoạt động, nhưng nó không lý tưởng để thực hiện các bản cập nhật trong tương lai cho Python. Điều đó có nghĩa là chúng ta phải nhớ kiểm tra trang web và tải xuống các tệp mới vì Python không bao gồm cách cập nhật bằng dòng lệnh

Để Homebrew quản lý Python 3

Dự án Homebrew cung cấp trình quản lý gói nguồn mở và miễn phí cho macOS mà nhiều người tin dùng. Nó cung cấp cho người dùng Apple một sức mạnh tương tự như apt-get hoặc yum. Nếu bạn là người dùng Homebrew, bạn có thể đã cài đặt Python. Để kiểm tra nhanh, hãy chạy

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
0

Nếu Python hiển thị dưới lệnh, nó đã được cài đặt. Nó là phiên bản gì?

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
1

Rất tốt. Những người bảo trì Homebrew đã cập nhật chai Python mặc định để trỏ đến bản phát hành mới nhất. Vì những người bảo trì Homebrew đáng tin cậy hơn trong việc cập nhật bản phát hành so với hầu hết chúng ta, nên chúng ta có thể sử dụng phiên bản Python 3 của Homebrew bằng lệnh sau

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
2

Bây giờ chúng tôi muốn trỏ bí danh của mình (từ trên xuống) tới bản sao Python mà Homebrew quản lý

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
3

Để đảm bảo đường dẫn trên trỏ đến nơi Homebrew đã cài đặt Python trong môi trường của chúng ta, chúng ta có thể chạy brew info python và tìm kiếm thông tin đường dẫn

Phương pháp này, sử dụng Homebrew để quản lý môi trường Python của chúng tôi, là một điểm khởi đầu tốt và nó có ý nghĩa với tôi vào thời điểm đó

Nếu chúng ta vẫn cần Python 2 thì sao?

Bất kỳ ai mới sử dụng Python đều có thể bắt đầu với Python 3. Nhưng những người trong chúng ta, những người vẫn cần Python 2—ví dụ: để đóng góp cho một dự án Python chỉ có sẵn trong Python 2—có thể tiếp tục sử dụng tệp nhị phân Python macOS mặc định có sẵn trong /usr/bin/python

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
4

Homebrew thật tuyệt vời, nó thậm chí còn cung cấp một công thức khác cho Python 2

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
5

Bất cứ lúc nào, chúng tôi có thể xóa bí danh khỏi tệp cấu hình shell của mình để quay lại sử dụng bản sao mặc định của Python trên hệ thống

Đừng quên cập nhật pip lên pip3

Lệnh pip là trình quản lý gói mặc định dành riêng cho các gói Python. Mặc dù chúng tôi đã thay đổi lệnh Python mặc định của mình thành phiên bản 3, nhưng chúng tôi phải đặt bí danh cho lệnh pip của mình nếu nó ở phiên bản trước. Trước tiên, chúng ta cần kiểm tra xem mình đang sử dụng phiên bản nào

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
6

Để đảm bảo chúng tôi đang cài đặt các gói tương thích với phiên bản Python mới của chúng tôi, chúng tôi sẽ sử dụng một bí danh khác để trỏ đến phiên bản tương thích của pip. Vì chúng tôi đang sử dụng Homebrew làm trình quản lý gói trong tình huống này, nên chúng tôi biết nó đã cài đặt pip3 khi chúng tôi cài đặt Python 3. Đường dẫn mặc định phải giống với Python 3, nhưng chúng ta có thể xác nhận điều này bằng cách yêu cầu trình bao tìm thấy nó

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
7

Bây giờ chúng tôi đã biết vị trí, chúng tôi sẽ thêm nó vào tệp cấu hình trình bao của chúng tôi, như chúng tôi đã làm trước đây

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
8

Cuối cùng, chúng ta có thể xác nhận rằng việc chạy pip trỏ đến pip3 bằng cách mở trình bao mới hoặc bằng cách đặt lại trình bao hiện tại của chúng ta và xem những gì chúng ta trỏ đến

$ brew install pyenv 
?  /usr/local/Cellar/pyenv/1.2.10: 634 files, 2.4MB
9

Chúng tôi có thể tránh sử dụng Homebrew để cập nhật pip, nhưng điều đó đòi hỏi nhiều từ tài liệu Python

Làm ngay từ đầu

Nếu bạn mới bắt đầu phát triển Python trên macOS, hãy thực hiện các cấu hình cần thiết để đảm bảo bạn đang sử dụng đúng phiên bản Python ngay từ đầu. Cài đặt Python 3, có hoặc không có Homebrew và sử dụng bí danh sẽ cho phép bạn bắt đầu viết mã, nhưng đó không phải là một chiến lược tốt về lâu dài. Sử dụng pyenv như một giải pháp quản lý phiên bản đơn giản để giúp bạn có một khởi đầu thuận lợi


Bài viết này ban đầu được xuất bản vào tháng 5 năm 2019 và đã được cập nhật bởi biên tập viên

Đọc gì tiếp theo

Thẻ

con trăn

Mac

Matthew Broberg

Lệnh python3 không tìm thấy

Matt là một chuyên gia lưu trữ EMC, VMware vExpert và là người hâm mộ trước đây của các công nghệ độc quyền khác. Bây giờ anh ấy tập trung vào mã nguồn mở và việc áp dụng DevRel

Thêm về tôi

Moshe Zadka

Lệnh python3 không tìm thấy

Moshe đã tham gia vào cộng đồng Linux từ năm 1998, giúp đỡ trong "các bữa tiệc cài đặt" Linux. Anh ấy đã lập trình Python từ năm 1999 và đã đóng góp cho trình thông dịch Python cốt lõi. Moshe đã là một DevOps/SRE kể từ trước khi các điều khoản đó tồn tại, quan tâm sâu sắc đến độ tin cậy của phần mềm, khả năng tái tạo bản dựng và những thứ tương tự khác

Thêm về tôi

người đóng góp

Lệnh python3 không tìm thấy

Seth Kenlon

13 Bình luận

Những bình luận này đã bị đóng, tuy nhiên bạn có thể Đăng ký hoặc Đăng nhập để đăng bình luận về một bài viết khác

Lệnh python3 không tìm thấy

Don Watkins. 1 Tháng Năm, 2019

Đăng ký hoặc Đăng nhập để thích

Bài báo tuyệt vời. Cám ơn vì đã chia sẻ

Lệnh python3 không tìm thấy

jhnlsn11. 3 Tháng Năm, 2019

Đăng ký hoặc Đăng nhập để thích

Gặp sự cố ngay lập tức với zlib. Đối với bất kỳ ai gặp lỗi tương tự, bạn có thể tìm giải pháp tại trang vấn đề github của pyenv. Số phát hành 1219

Lệnh python3 không tìm thấy

Michael Heinz. 11 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Chỉ muốn nói lời cảm ơn cho hướng dẫn. Bây giờ tôi mới bắt đầu học viết mã trăn và muốn bắt đầu bằng chân phải về phía trước

Lệnh python3 không tìm thấy

Jay. 14 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Cảm ơn đã dành thời gian và viết bài hướng dẫn này. Tôi chỉ muốn thêm xem có ai gặp sự cố nhỏ này không. Ngay trước "exec $SHELL", tôi phải thoát khỏi iTerm2 hoàn toàn để có được 3. 7. 4 báo cáo. Tôi nghĩ rằng tôi có thể làm nguồn ~/. zshrc. tôi đã không cố gắng

Lệnh python3 không tìm thấy

Matthew Broberg. 23 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Cảm ơn vì đã cho tôi biết Jay. Tôi tin rằng exec phải đủ để khởi tạo trình bao mới trong phiên hiện tại, nhưng nguồn chắc chắn sẽ tải lại thông tin từ tệp

Trả lời bởi Jay (chưa xác minh)

Lệnh python3 không tìm thấy

Matthew Broberg. 23 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Tôi thấy những gì đã đi sai bây giờ. `$SHELL` được đặt thành trình bao mặc định, đây có thể không phải là trình bao bạn hiện đang sử dụng. Tôi đã điều chỉnh nó thành `exec $0` để $0 phát hiện trình bao hiện tại, không phải trình bao mặc định. Cảm ơn một lần nữa hoặc lưu ý điều này Jay

Trả lời bởi Matthew Broberg

Lệnh python3 không tìm thấy

Carlos Vázquez. 14 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Nếu tôi đặt #. /usr/bin/python trên tập lệnh, liệu python 3. 7 được quản lý bởi pyenv
được dùng?

Lệnh python3 không tìm thấy

Matthew Broberg. 23 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

không may măn. Nếu bạn chạy ` which python` bạn sẽ nhận được một đường dẫn rất khác. Tôi không thể gọi đường dẫn đó từ zsh, vì vậy tôi đã học cách sử dụng `#. /usr/bin/env python` là câu lệnh shebang của tôi và nó gọi phiên bản pyenv đã kích hoạt. (Tín dụng. https. // stackoverflow. com/câu hỏi/44076804/what-shebang-to-use-for-py…)

Trả lời bởi Carlos Vazquez (chưa được xác minh)

Lệnh python3 không tìm thấy

Affan Javid. 15 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

công việc rất tốt cảm ơn rất nhiều

Lệnh python3 không tìm thấy

Steve Holden. 16 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Moshe đã đúng. Vui lòng KHÔNG BAO GIỜ sử dụng hệ thống Python để phát triển. Ngay cả với môi trường ảo. Bạn muốn có thể chuyển đổi phiên bản theo ý muốn

Sử dụng "python -m pip" thay vì chạy "pip" hoặc "pip3" - theo cách đó, phiên bản pip và python luôn khớp với nhau, bất kỳ phiên bản nào bạn hiện đã chọn là "python"

Tôi cũng khuyên bạn nên xem Conda - nó đặc biệt hữu ích cho những người không quen với quản trị hệ thống

Lệnh python3 không tìm thấy

Mascarina Arturo. 20 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Thêm khoảng trống trước từ khóa eval khi sử dụng pyenv để kiểm soát đường dẫn shell. Đảm bảo xóa nó, nếu không bạn sẽ thấy "không tìm thấy lệnh eval". Đảm bảo rằng bạn cũng nối đầu ra vào tệp rc chính xác. )

Lệnh python3 không tìm thấy

Sourav Ganguly. 29 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Tôi đã làm tất cả các bước như đã đề cập và họ đã hiển thị mọi thứ với python 3. 7, ngoại trừ khi cuối cùng tôi thực hiện python -V, nó vẫn hiển thị phiên bản là 2. 7. Bất kỳ ý tưởng làm thế nào tôi có thể ghi đè lên phiên bản python?

Lệnh python3 không tìm thấy

Matthew Broberg. 29 Tháng Bảy, 2019

Đăng ký hoặc Đăng nhập để thích

Này Sauav. Khi bạn chạy ` which python` nó có hiển thị đường dẫn shim hay đường dẫn trực tiếp đến /usr/bin/python không? . bashrc hoặc. zshrc tùy thuộc vào vỏ của bạn