5. Sử dụng Python trên macOS

Tài liệu này nhằm mục đích cung cấp cái nhìn tổng quan về hành vi dành riêng cho macOS mà bạn nên biết để bắt đầu với Python trên máy tính Mac. Python trên máy Mac chạy macOS rất giống với Python trên các nền tảng có nguồn gốc Unix khác, nhưng có một số khác biệt trong cách cài đặt và một số tính năng.

Có nhiều cách khác nhau để tải và cài đặt Python cho macOS. Các phiên bản dựng sẵn của phiên bản Python mới nhất hiện có sẵn từ một số nhà phân phối. Phần lớn tài liệu này mô tả việc sử dụng Python do nhóm phát hành CPython cung cấp để tải xuống từ python.org website. Xem Phân phối thay thế để biết một số tùy chọn khác.

5.1. Sử dụng Python cho macOS từ python.org

5.1.1. Các bước cài đặt

Đối với current Python versions (trừ những trạng thái ở trạng thái security), nhóm phát hành tạo ra gói cài đặt Python for macOS cho mỗi bản phát hành mới. Danh sách các trình cài đặt có sẵn có sẵn here. Chúng tôi khuyên bạn nên sử dụng phiên bản Python được hỗ trợ mới nhất nếu có thể. Các trình cài đặt hiện tại cung cấp bản dựng universal2 binary của Python chạy nguyên bản trên tất cả các máy Mac (Apple Silicon và Intel) được hỗ trợ bởi nhiều phiên bản macOS, hiện tại thường từ ít nhất macOS 10.15 Catalina trở đi.

Tệp đã tải xuống là tệp gói trình cài đặt macOS tiêu chuẩn (.pkg). Thông tin về tính toàn vẹn của tệp (tổng kiểm tra, kích thước, chữ ký sigstore, v.v.) cho mỗi tệp được bao gồm trên trang tải xuống bản phát hành. Các gói cài đặt và nội dung của chúng được ký và công chứng bằng chứng chỉ ID nhà phát triển Apple Python Software Foundation để đáp ứng macOS Gatekeeper requirements.

Để cài đặt mặc định, hãy nhấp đúp vào tệp gói cài đặt đã tải xuống. Thao tác này sẽ khởi chạy ứng dụng Trình cài đặt macOS tiêu chuẩn và hiển thị bước đầu tiên trong số các bước của cửa sổ trình cài đặt.

../_images/mac_installer_01_introduction.png

Nhấp vào nút Continue sẽ hiển thị Read Me cho trình cài đặt này. Bên cạnh những thông tin quan trọng khác, Read Me còn ghi lại phiên bản Python nào sẽ được cài đặt và phiên bản macOS nào được hỗ trợ. Bạn có thể cần phải cuộn qua để đọc toàn bộ tập tin. Theo mặc định, Read Me này cũng sẽ được cài đặt trong /Applications/Python 3.14/ và có thể đọc bất cứ lúc nào.

../_images/mac_installer_02_readme.png

Nhấp vào Continue sẽ hiển thị giấy phép cho Python và các phần mềm đi kèm khác. Sau đó, bạn sẽ cần phải Agree các điều khoản cấp phép trước khi tiến hành bước tiếp theo. Tệp giấy phép này cũng sẽ được cài đặt và có sẵn để đọc sau.

../_images/mac_installer_03_license.png

Sau khi các điều khoản cấp phép được chấp nhận, bước tiếp theo là hiển thị Installation Type. Đối với hầu hết các mục đích sử dụng, bộ thao tác cài đặt tiêu chuẩn là phù hợp.

../_images/mac_installer_04_installation_type.png

Bằng cách nhấn nút Customize, bạn có thể chọn bỏ qua hoặc chọn một số thành phần gói nhất định của trình cài đặt. Nhấp vào từng tên gói để xem mô tả về những gì nó cài đặt. Để cài đặt hỗ trợ cho tính năng luồng tự do tùy chọn, hãy xem Cài đặt các tệp nhị phân có luồng miễn phí.

../_images/mac_installer_05_custom_install.png

Trong cả hai trường hợp, nhấp vào Install sẽ bắt đầu quá trình cài đặt bằng cách yêu cầu quyền cài đặt phần mềm mới. Cần có tên người dùng macOS có đặc quyền Administrator vì Python đã cài đặt sẽ có sẵn cho tất cả người dùng Mac.

Khi quá trình cài đặt hoàn tất, cửa sổ Summary sẽ xuất hiện.

../_images/mac_installer_06_summary.png

Nhấp đúp vào biểu tượng hoặc tệp Install Certificates.command trong cửa sổ /Applications/Python 3.14/ để hoàn tất cài đặt.

../_images/mac_installer_07_applications.png

Thao tác này sẽ mở một cửa sổ shell Terminal tạm thời sẽ sử dụng Python mới để tải xuống và cài đặt chứng chỉ gốc SSL để sử dụng.

../_images/mac_installer_08_install_certificates.png

Nếu Successfully installed certifiupdate complete xuất hiện trong cửa sổ terminal, quá trình cài đặt đã hoàn tất. Đóng cửa sổ terminal này và cửa sổ trình cài đặt.

Một cài đặt mặc định sẽ bao gồm:

  • Thư mục Python 3.14 trong thư mục Applications của bạn. Tại đây, bạn sẽ tìm thấy IDLE, môi trường phát triển là một phần tiêu chuẩn của các bản phân phối Python chính thức; và Python Launcher, xử lý việc nhấp đúp vào tập lệnh Python từ macOS Finder.

  • Một khung /Library/Frameworks/Python.framework, bao gồm các thư viện và tệp thực thi Python. Trình cài đặt thêm vị trí này vào đường dẫn shell của bạn. Để gỡ cài đặt Python, bạn có thể xóa ba thứ này. Các liên kết tượng trưng đến tệp thực thi Python được đặt trong /usr/local/bin/.

Ghi chú

Các phiên bản gần đây của macOS bao gồm lệnh python3 trong /usr/bin/python3 liên kết đến phiên bản Python thường cũ hơn và chưa hoàn chỉnh do các công cụ phát triển của Apple, Xcode hoặc Command Line Tools for Xcode cung cấp và sử dụng. Bạn không bao giờ nên sửa đổi hoặc cố gắng xóa cài đặt này vì nó do Apple kiểm soát và được sử dụng bởi phần mềm do Apple cung cấp hoặc bên thứ ba. Nếu bạn chọn cài đặt phiên bản Python mới hơn từ python.org, bạn sẽ có hai bản cài đặt Python khác nhau nhưng đầy đủ chức năng trên máy tính của mình và có thể cùng tồn tại. Các tùy chọn trình cài đặt mặc định phải đảm bảo rằng python3 của nó sẽ được sử dụng thay vì python3 hệ thống.

5.1.2. Cách chạy tập lệnh Python

Có hai cách để gọi trình thông dịch Python. Nếu bạn quen với việc sử dụng Unix shell trong cửa sổ terminal, bạn có thể gọi python3.14 hoặc python3 tùy ý, theo sau là một hoặc nhiều tùy chọn dòng lệnh (được mô tả trong Dòng lệnh và môi trường). Hướng dẫn Python cũng có một phần hữu ích trên using Python interactively from a shell.

Bạn cũng có thể gọi trình thông dịch thông qua môi trường phát triển tích hợp. IDLE --- Trình soạn thảo và shell Python là môi trường trình soạn thảo và trình thông dịch cơ bản đi kèm với bản phân phối tiêu chuẩn của Python. IDLE bao gồm menu Trợ giúp cho phép bạn truy cập tài liệu Python. Nếu bạn hoàn toàn mới làm quen với Python, bạn có thể đọc phần giới thiệu hướng dẫn trong tài liệu đó.

Có rất nhiều trình soạn thảo và IDE khác, hãy xem Trình chỉnh sửa và IDE để biết thêm thông tin.

Để chạy tệp tập lệnh Python từ cửa sổ terminal, bạn có thể gọi trình thông dịch bằng tên của tệp tập lệnh:

python3.14 myscript.py

Để chạy tập lệnh của bạn từ Finder, bạn có thể:

  • Kéo nó vào Python Launcher.

  • Chọn Python Launcher làm ứng dụng mặc định để mở tập lệnh của bạn (hoặc bất kỳ tập lệnh .py nào) thông qua cửa sổ Thông tin Finder và nhấp đúp vào tập lệnh đó. Python Launcher có nhiều tùy chọn khác nhau để kiểm soát cách khởi chạy tập lệnh của bạn. Kéo tùy chọn cho phép bạn thay đổi những điều này cho một lệnh gọi hoặc sử dụng menu Preferences của nó để thay đổi mọi thứ trên toàn cầu.

Xin lưu ý rằng việc chạy tập lệnh trực tiếp từ macOS Finder có thể tạo ra kết quả khác so với khi chạy từ cửa sổ terminal vì tập lệnh sẽ không chạy trong môi trường shell thông thường, bao gồm mọi cài đặt biến môi trường trong cấu hình shell. Và, giống như bất kỳ tập lệnh hoặc chương trình nào khác, hãy chắc chắn về những gì bạn sắp chạy.

5.2. Phân phối thay thế

Bên cạnh trình cài đặt python.org tiêu chuẩn dành cho macOS, còn có các bản phân phối của bên thứ ba dành cho macOS có thể bao gồm chức năng bổ sung. Một số bản phân phối phổ biến và các tính năng chính của chúng:

ActivePython

Trình cài đặt tương thích đa nền tảng, tài liệu

Anaconda

Các mô-đun khoa học phổ biến (như numpy, scipy và pandas) và trình quản lý gói conda.

Homebrew

Trình quản lý gói dành cho macOS bao gồm nhiều phiên bản Python và nhiều gói dựa trên Python của bên thứ ba (bao gồm numpy, scipy và pandas).

MacPorts

Một trình quản lý gói khác dành cho macOS bao gồm nhiều phiên bản Python và nhiều gói dựa trên Python của bên thứ ba. Có thể bao gồm các phiên bản Python dựng sẵn và nhiều gói dành cho các phiên bản macOS cũ hơn.

Lưu ý rằng các bản phân phối có thể không bao gồm các phiên bản mới nhất của Python hoặc các thư viện khác và không được nhóm Python cốt lõi duy trì hoặc hỗ trợ.

5.3. Cài đặt các gói Python bổ sung

Tham khảo Python Packaging User Guide để biết thêm thông tin.

5.4. Lập trình GUI

Có một số tùy chọn để xây dựng ứng dụng GUI trên Mac bằng Python.

Bộ công cụ Python GUI tiêu chuẩn là tkinter, dựa trên bộ công cụ Tk đa nền tảng (https://www.tcl.tk). Một phiên bản Tk gốc macOS được bao gồm trong trình cài đặt.

PyObjC là một Python liên kết với khung Objective-C/Cocoa của Apple. Thông tin về PyObjC có sẵn từ pyobjc.

Hiện có sẵn một số bộ công cụ macOS GUI thay thế bao gồm:

  • PySide: Liên kết Python chính thức với Qt GUI toolkit.

  • PyQt: Các ràng buộc Python thay thế cho Qt.

  • Kivy: Bộ công cụ GUI đa nền tảng hỗ trợ nền tảng máy tính để bàn và thiết bị di động.

  • Toga: Một phần của BeeWare Project; hỗ trợ các ứng dụng máy tính để bàn, thiết bị di động, web và bảng điều khiển.

  • wxPython: Bộ công cụ đa nền tảng hỗ trợ hệ điều hành máy tính để bàn.

5.5. Chủ đề nâng cao

5.5.1. Cài đặt các tệp nhị phân có luồng miễn phí

Added in version 3.13.

Gói cài đặt python.org Python for macOS có thể tùy chọn cài đặt bản dựng bổ sung của Python 3.14 hỗ trợ PEP 703, tính năng phân luồng tự do (chạy khi global interpreter lock bị tắt). Kiểm tra trang phát hành trên python.org để biết thông tin cập nhật có thể có.

Chế độ luồng tự do đang hoạt động và tiếp tục được cải thiện, nhưng có một số chi phí bổ sung đối với khối lượng công việc đơn luồng so với bản dựng thông thường. Ngoài ra, các gói của bên thứ ba, đặc biệt là các gói có extension module, có thể chưa sẵn sàng để sử dụng trong bản dựng luồng tự do và sẽ kích hoạt lại GIL. Do đó, hỗ trợ phân luồng tự do không được cài đặt theo mặc định. Nó được đóng gói dưới dạng một tùy chọn cài đặt riêng biệt, có sẵn bằng cách nhấp vào nút Customize ở bước Installation Type của trình cài đặt như mô tả ở trên.

../_images/mac_installer_09_custom_install_free_threaded.png

Nếu hộp bên cạnh tên gói Free-threaded Python được chọn, một PythonT.framework riêng biệt cũng sẽ được cài đặt cùng với Python.framework bình thường trong /Library/Frameworks. Cấu hình này cho phép bản dựng Python 3.14 có luồng miễn phí cùng tồn tại trên hệ thống của bạn với bản dựng Python 3.14 truyền thống (chỉ GIL) với rủi ro tối thiểu khi cài đặt hoặc thử nghiệm. Bố cục cài đặt này có thể thay đổi trong các phiên bản tương lai.

Những cảnh báo và hạn chế đã biết:

  • Gói UNIX command-line tools, được chọn theo mặc định, sẽ cài đặt các liên kết trong /usr/local/bin cho python3.14t, trình thông dịch luồng tự do và python3.14t-config, một tiện ích cấu hình có thể hữu ích cho người xây dựng gói. Vì /usr/local/bin thường được bao gồm trong shell PATH của bạn, nên trong hầu hết các trường hợp, không cần thay đổi nào đối với các biến môi trường PATH để sử dụng python3.14t.

  • Đối với bản phát hành này, gói Shell profile updaterUpdate Shell Profile.command trong /Applications/Python 3.14/ không hỗ trợ gói luồng miễn phí.

  • Bản dựng luồng tự do và bản dựng truyền thống có các đường dẫn tìm kiếm riêng biệt và các thư mục site-packages riêng biệt, do đó, theo mặc định, nếu bạn cần một gói có sẵn trong cả hai bản dựng, thì có thể cần phải cài đặt gói đó trong cả hai. Gói luồng miễn phí sẽ cài đặt một phiên bản pip riêng để sử dụng với python3.14t.

    • Để cài đặt gói bằng pip mà không cần venv:

      python\ |version|\ t -m cài đặt pip <package_name>
      
  • Khi làm việc với nhiều môi trường Python, create and use virtual environments thường là an toàn nhất và dễ dàng nhất. Điều này có thể tránh xung đột tên lệnh có thể xảy ra và nhầm lẫn về việc Python nào đang được sử dụng:

    python3.14t -m venv <venv_name>

    thì activate.

  • Để chạy phiên bản IDLE có luồng miễn phí:

    python\ |version|\ t -m idlib
    
  • Trình thông dịch trong cả hai bản dựng đều phản hồi cùng một PYTHON environment variables, điều này có thể mang lại kết quả không mong muốn, chẳng hạn như nếu bạn đã đặt PYTHONPATH trong cấu hình shell. Nếu cần, có command line options như -E để bỏ qua các biến môi trường này.

  • Bản dựng theo luồng miễn phí liên kết đến các thư viện dùng chung của bên thứ ba, chẳng hạn như OpenSSLTk, được cài đặt trong khung truyền thống. Điều này có nghĩa là cả hai bản dựng cũng chia sẻ một bộ chứng chỉ tin cậy được cài đặt bởi tập lệnh Install Certificates.command, do đó nó chỉ cần chạy một lần.

  • Nếu bạn không thể phụ thuộc vào liên kết trong /usr/local/bin trỏ đến python3.14t có luồng tự do python.org (ví dụ: nếu bạn muốn cài đặt phiên bản của riêng mình ở đó hoặc một số bản phân phối khác), bạn có thể đặt rõ ràng biến môi trường shell PATH của mình để bao gồm thư mục bin framework PythonT:

    xuất PATH="/Library/Frameworks/PythonT.framework/Versions/\ |version|\ /bin:"$PATH"
    

    Việc cài đặt khung truyền thống theo mặc định thực hiện điều tương tự, ngoại trừ Python.framework. Xin lưu ý rằng việc có cả hai thư mục khung bin trong PATH có thể dẫn đến nhầm lẫn nếu có các tên trùng lặp như python3.14 trong cả hai; cái nào thực sự được sử dụng tùy thuộc vào thứ tự chúng xuất hiện trong PATH. Các lệnh which python3.x hoặc which python3.xt có thể hiển thị đường dẫn nào đang được sử dụng. Sử dụng môi trường ảo có thể giúp tránh những sự mơ hồ như vậy. Một tùy chọn khác có thể là tạo shell alias cho trình thông dịch mong muốn, như:

     danh py\ |version|\ ="/Library/Frameworks/Python.framework/Versions/\ |version|\ /bin/python\ |version|\ "
     danh py\ |version|\ t="/Library/Frameworks/PythonT.framework/Versions/\ |version|\ /bin/python\ |version|\ t"
    

5.5.2. Cài đặt bằng dòng lệnh

Nếu bạn muốn sử dụng tính năng tự động hóa để cài đặt gói trình cài đặt python.org (thay vì sử dụng ứng dụng macOS Installer GUI quen thuộc), tiện ích dòng lệnh installer của macOS cũng cho phép bạn chọn các tùy chọn không mặc định. Nếu bạn không quen với installer thì nó có thể hơi khó hiểu (xem man installer để biết thêm thông tin). Ví dụ: đoạn mã shell sau đây cho thấy một cách để thực hiện điều đó, sử dụng bản phát hành 3.14.0b2 và chọn tùy chọn trình thông dịch theo luồng miễn phí:

RELEASE="python-\ |version|\ 0b2-macos11.pkg"

gói cài đặt # download
cuộn tròn -O \https://www.python.org/ftp/python/\ |version|\ .0/${RELEASE}

lựa chọn thay đổi trình cài đặt # create để tùy chỉnh cài đặt:
#    enable gói PythonTFramework-\ |version|\
#    while chấp nhận các giá trị mặc định khác (cài đặt tất cả các gói khác)
mèo > ./choicechanges.plist <<EOF
<?xml version="1.0"  hóa="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "\http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist phiên bản="1.0">
<mảng>
        <dict>
                <key>Cài đặt thuộc tính</key>
                <số nguyên>1</ số nguyên>
                <key>choiceAttribution</key>
                <string>đã chọn</string>
                <key>lựa chọnIdentifier</key>
                <string>org.python.Python.PythonTFramework-\ |version|\ </string>
        </dict>
</ mảng>
</plist>
EOF

trình cài đặt sudo -pkg ./${RELEASE} -applyChoiceChangesXML ./choicechanges.plist -target /

Sau đó, bạn có thể kiểm tra xem cả hai bản dựng trình cài đặt hiện có sẵn với nội dung như:

$ # test rằng trình thông dịch luồng tự do đã được cài đặt nếu gói Công cụ Lệnh Unix được bật
$ /usr/local/bin/python\ |version|\ t -VV
Bản dựng luồng tự do Python \ |version|\ .0b2 (v\ |version|\ .0b2:3a83b172af, ngày 5 tháng 6 năm 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ #    and trình thông dịch truyền thống
$ /usr/local/bin/python\ |version|\ -VV
Python \ |version|\ .0b2 (v\ |version|\ .0b2:3a83b172af, ngày 5 tháng 6 năm 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]
$ # test rằng chúng cũng có sẵn mà không cần tiền tố nếu /usr/local/bin ở trên $PATH
$ trăn\ |version|\ t -VV
Bản dựng luồng tự do Python \ |version|\ .0b2 (v\ |version|\ .0b2:3a83b172af, ngày 5 tháng 6 năm 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ trăn\ |version|\ -VV
Python \ |version|\ .0b2 (v\ |version|\ .0b2:3a83b172af, ngày 5 tháng 6 năm 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]

Ghi chú

Trình cài đặt python.org hiện tại chỉ cài đặt vào các vị trí cố định như /Library/Frameworks/, /Applications/usr/local/bin. Bạn không thể sử dụng tùy chọn installer -domain để cài đặt vào các vị trí khác.

5.5.3. Phân phối ứng dụng Python

Có nhiều công cụ để chuyển đổi mã Python của bạn thành một ứng dụng có thể phân phối độc lập:

  • py2app: Hỗ trợ tạo gói macOS .app từ dự án Python.

  • Briefcase: Một phần của BeeWare Project; một công cụ đóng gói đa nền tảng hỗ trợ tạo các gói .app trên macOS, cũng như quản lý việc ký và công chứng.

  • PyInstaller: Một công cụ đóng gói đa nền tảng tạo ra một tệp hoặc thư mục duy nhất dưới dạng tạo phẩm có thể phân phối.

5.5.4. Tuân thủ App Store

Các ứng dụng được gửi để phân phối thông qua macOS App Store phải vượt qua quy trình đánh giá ứng dụng của Apple. Quá trình này bao gồm một bộ quy tắc xác thực tự động để kiểm tra gói ứng dụng đã gửi để tìm mã có vấn đề.

Thư viện chuẩn Python chứa một số mã được biết là vi phạm các quy tắc tự động này. Mặc dù những vi phạm này có vẻ là dương tính giả nhưng không thể thách thức các quy tắc đánh giá của Apple. Do đó, cần phải sửa đổi thư viện chuẩn Python để ứng dụng vượt qua bài đánh giá của App Store.

Cây nguồn Python chứa a patch file sẽ xóa tất cả mã được xác định là gây ra sự cố với quá trình xem xét trên App Store. Bản vá này được áp dụng tự động khi CPython được định cấu hình với tùy chọn --with-app-store-compliance.

Bản vá này thường không bắt buộc phải sử dụng CPython trên máy Mac; cũng không bắt buộc nếu bạn đang phân phối một ứng dụng outside trên macOS App Store. Cần có only nếu bạn đang sử dụng macOS App Store làm kênh phân phối.

5.6. Tài nguyên khác

Zz000zz có liên kết đến nhiều tài nguyên hữu ích. Zz001zz là một tài nguyên hỗ trợ khác dành riêng cho người dùng và nhà phát triển Python trên máy Mac.