5. استفاده از پایتون در macOS

هدف این سند، ارائه‌ی مروری کلی بر رفتارهای اختصاصی macOS است که برای شروع کار با پایتون روی رایانه‌های مک باید از آن‌ها آگاه باشید. پایتون روی مکی که macOS را اجرا می‌کند، بسیار شبیه به پایتون روی سایر پلتفرم‌های برگرفته از یونیکس است، اما تفاوت‌هایی در نصب و برخی ویژگی‌ها وجود دارد.

روش‌های مختلفی برای دریافت و نصب پایتون در macOS وجود دارد. نسخه‌های از پیش ساخته‌شده‌ی جدیدترین نسخه‌های پایتون از تعدادی توزیع‌کننده در دسترس هستند. بخش عمده‌ی این سند به استفاده از پایتون‌هایی می‌پردازد که تیم انتشار سی‌پایتون آن‌ها را برای دانلود از وب‌سایت python.org ارائه کرده است. برای برخی گزینه‌های دیگر، Alternative distributions را ببینید.

5.1. استفاده از پایتون برای مک‌او‌اس از python.org

5.1.1. مراحل نصب

For current Python versions (other than those in security status), the release team produces a Python for macOS installer package for each new release. A list of available installers is provided on the macOS downloads page. We recommend using the most recent supported Python version where possible. Current installers provide a universal2 binary build of Python which runs natively on all Macs (Apple Silicon and Intel) that are supported by a wide range of macOS versions, currently typically from at least macOS 10.15 Catalina on.

The downloaded file is a standard macOS installer package file (.pkg). File integrity information (such as checksum, size, and Sigstore signature) for each file is included on the release download page. Installer packages and their contents are signed and notarized with Python Software Foundation Apple Developer ID certificates to meet macOS Gatekeeper requirements.

For a default installation, double-click on the downloaded installer package file. This should launch the standard macOS Installer app and display the first of several installer steps.

../_images/mac_installer_01_introduction.png

با کلیک روی دکمه‌ی Continue، Read Me این نصب‌کننده نمایش داده می‌شود. Read Me در کنار سایر اطلاعات مهم، شرح می‌دهد که کدام نسخه‌ی پایتون قرار است نصب شود و روی کدام نسخه‌های macOS پشتیبانی می‌شود. ممکن است برای خواندن کل پرونده، لازم باشد آن را اسکرول کنید. به‌طور پیش‌فرض، این Read Me همچنین در /Applications/Python 3.16/ نصب خواهد شد و هر زمان که بخواهید قابل مطالعه خواهد بود.

../_images/mac_installer_02_readme.png

با کلیک روی Continue، مجوز پایتون و سایر نرم‌افزارهای همراه نمایش داده می‌شود. سپس پیش از ادامه به گام بعدی، باید برای موافقت با شرایط مجوز روی Agree کلیک کنید. این پرونده مجوز نیز نصب خواهد شد و بعداً برای مطالعه در دسترس خواهد بود.

../_images/mac_installer_03_license.png

پس از پذیرفته شدن شرایط مجوز، گام بعدی نمایش Installation Type است. برای بیشتر کاربردها، مجموعه استاندارد عملیات‌های نصب مناسب است.

../_images/mac_installer_04_installation_type.png

By pressing the Customize button, you can choose to omit or select certain package components of the installer. Click on each package name to see a description of what it installs. For details of the optional free-threaded feature, which is installed by default, see Installing free-threaded binaries.

../_images/mac_installer_05_custom_install.png

در هر دو حالت، کلیک روی Install فرایند نصب را با درخواست مجوز برای نصب نرم‌افزار جدید آغاز می‌کند. نام کاربری macOS با امتیاز Administrator لازم است، زیرا پایتون نصب‌شده برای همه‌ی کاربران مک در دسترس خواهد بود.

پس از اتمام نصب، پنجره‌ی Summary نمایش داده می‌شود.

../_images/mac_installer_06_summary.png

برای تکمیل نصب، روی نماد یا پرونده‌ی Install Certificates.command در پنجره‌ی /Applications/Python 3.16/ دوبار کلیک کنید.

../_images/mac_installer_07_applications.png

این کار یک پنجره‌ی پوسته‌ی موقت Terminal باز می‌کند که با استفاده از پایتون جدید، گواهی‌های ریشه‌ی SSL را برای استفاده‌ی خود دانلود و نصب می‌کند.

../_images/mac_installer_08_install_certificates.png

If Successfully installed certifi and update complete appear in the terminal window, the installation is complete. Close this terminal window and the installer window.

نصب پیش‌فرض شامل موارد زیر خواهد بود:

  • پوشه‌ی Python 3.16 در پوشه‌ی Applications شما. در این پوشه IDLE را می‌یابید؛ محیط توسعه‌ای که بخش استانداردی از توزیع‌های رسمی پایتون است؛ و Python Launcher را که دابل‌کلیک کردن اسکریپت‌های پایتون از Finder مک‌اواس را مدیریت می‌کند.

  • یک چارچوب /Library/Frameworks/Python.framework که شامل پرونده اجرایی پایتون و کتابخانه‌ها است. نصب‌کننده این مکان را به مسیر پوسته‌ی شما اضافه می‌کند. برای لغو نصب پایتون، می‌توانید این سه مورد را حذف کنید. پیوندهای نمادین به پرونده اجرایی پایتون در /usr/local/bin/ قرار می‌گیرند.

توجه

نسخه‌های اخیر macOS شامل فرمان python3 در /usr/bin/python3 هستند که به نسخه‌ای معمولاً قدیمی‌تر و ناقص از پایتون پیوند دارد؛ نسخه‌ای که توسط ابزارهای توسعه Apple، یعنی Xcode یا Command Line Tools for Xcode، فراهم شده و برای استفاده‌ی آن‌هاست. هرگز نباید این نصب را تغییر دهید یا تلاش کنید آن را حذف کنید، زیرا این نصب تحت کنترل Apple است و نرم‌افزارهای ارائه‌شده توسط Apple یا نرم‌افزارهای شخص ثالث از آن استفاده می‌کنند. اگر تصمیم بگیرید نسخه‌ی جدیدتری از پایتون را از python.org نصب کنید، دو نصب متفاوت اما کارآمد از پایتون روی رایانه‌ی خود خواهید داشت که می‌توانند در کنار هم وجود داشته باشند. گزینه‌های پیش‌فرض نصاب باید تضمین کنند که python3 آن به‌جای python3 سیستم استفاده خواهد شد.

5.1.2. نحوه اجرای یک اسکریپت پایتون

دو راه برای فراخوانی مفسر پایتون وجود دارد. اگر با استفاده از پوسته‌ی یونیکس در پنجره‌ی پایانه آشنا هستید، می‌توانید python3.16 یا python3 را فراخوانی کنید که به‌اختیار می‌توانند با یک یا چند گزینه‌ی خط فرمان همراه شوند (در خط فرمان و محیط شرح داده شده‌اند). آموزش پایتون نیز بخش مفیدی درباره‌ی استفاده‌ی تعاملی از پایتون در پوسته دارد.

همچنین می‌توانید مفسر را از طریق یک محیط توسعه یکپارچه فراخوانی کنید. IDLE --- ویرایشگر و پوسته پایتون یک ویرایشگر و محیط مفسر پایه است که همراه با توزیع استاندارد پایتون ارائه می‌شود. IDLE شامل منوی راهنما (Help) است که به شما امکان می‌دهد به مستندات پایتون دسترسی داشته باشید. اگر کاملاً تازه‌کار در پایتون هستید، می‌توانید مقدمه‌ی آموزشی را در آن سند بخوانید.

ویرایشگر‌ها و IDE‌های بسیاری دیگر در دسترس هستند؛ برای اطلاعات بیشتر به ویرایشگرها و محیط‌های توسعه یکپارچه مراجعه کنید.

برای اجرای یک پرونده اسکریپت پایتون از پنجره پایانه، می‌توانید مفسر را با نام پرونده اسکریپت فراخوانی کنید:

python3.16 myscript.py

برای اجرای اسکریپت خودتان از Finder، می‌توانید یکی از این دو کار را انجام دهید:

  • آن را به Python Launcher بکشید.

  • از طریق پنجره اطلاعات Finder، Python Launcher را به‌عنوان برنامه پیش‌فرض برای باز کردن اسکریپت خود (یا هر اسکریپت .py) انتخاب کنید و روی آن دوبار کلیک کنید. Python Launcher تنظیمات گوناگونی برای کنترل نحوه راه‌اندازی اسکریپت شما دارد. کشیدن همراه با نگه‌داشتن کلید Option به شما امکان می‌دهد این تنظیمات را برای یک اجرا تغییر دهید، یا از منوی Preferences آن برای اعمال تغییرات به‌صورت سراسری استفاده کنید.

آگاه باشید که اجرای مستقیم اسکریپت از Finder در macOS ممکن است نتایجی متفاوت نسبت به اجرای آن از طریق یک پنجره پایانه به دست دهد، زیرا اسکریپت در محیط معمول پوسته، از جمله هر تنظیمی از متغیرهای محیطی در پروفایل‌های پوسته، اجرا نخواهد شد. و همانند هر اسکریپت یا برنامه دیگری، از چیزی که می‌خواهید اجرا کنید مطمئن باشید.

5.2. Alternative distributions

علاوه بر نصب‌کننده استاندارد python.org برای macOS، توزیع‌های شخص ثالثی برای macOS وجود دارند که ممکن است قابلیت‌های اضافی داشته باشند. برخی از توزیع‌های محبوب و ویژگی‌های کلیدی آن‌ها:

ActivePython

نصب‌کننده با سازگاری چندسکویی، مستندات

Anaconda

ماژول‌های علمی محبوب (مانند numpy، scipy و pandas) و مدیر بسته conda.

Homebrew

مدیر بسته برای macOS که شامل نسخه‌های متعدد پایتون و بسیاری از بسته‌های شخص ثالث مبتنی بر پایتون (از جمله numpy، scipy و pandas) است.

MacPorts

یک مدیر بسته‌ی دیگر برای macOS که شامل چندین نسخه از پایتون و بسیاری از بسته‌های شخص ثالث مبتنی بر پایتون است. ممکن است شامل نسخه‌های پیش‌ساخته‌ی پایتون و بسیاری از بسته‌ها برای نسخه‌های قدیمی‌تر macOS باشد.

توجه داشته باشید که توزیع‌ها ممکن است شامل جدیدترین نسخه‌های پایتون یا کتابخانه‌های دیگر نباشند و توسط تیم اصلی پایتون نگهداری یا پشتیبانی نمی‌شوند.

5.3. Installing additional Python packages

برای اطلاعات بیشتر به Python Packaging User Guide مراجعه کنید.

5.4. GUI programming

چندین گزینه برای ساخت برنامه‌های رابط کاربری گرافیکی (GUI) روی مک با پایتون وجود دارد.

جعبه‌ابزار رابط گرافیکی کاربر استاندارد پایتون، tkinter است که بر پایه‌ی جعبه‌ابزار چندسکویی Tk (https://www.tcl.tk) ساخته شده است. نسخه‌ی بومی Tk برای macOS همراه با نصب‌کننده ارائه می‌شود.

PyObjC یک مقیدسازی پایتون برای چارچوب Objective-C/Cocoa اپل است. اطلاعات درباره‌ی PyObjC از طریق pyobjc در دسترس است.

تعدادی از جعبه‌ابزارهای رابط گرافیکی کاربر (GUI) جایگزین برای macOS در دسترس هستند، از جمله:

  • PySide: پیوندهای رسمی پایتون به جعبه‌ابزار گرافیکی Qt.

  • PyQt: پیوندهای جایگزین پایتون برای Qt.

  • Kivy: یک مجموعه ابزار رابط کاربری گرافیکی چندسکویی که از پلتفرم‌های دسکتاپ و موبایل پشتیبانی می‌کند.

  • Toga: بخشی از پروژه BeeWare است؛ از برنامه‌های دسکتاپ، موبایل، وب و کنسول پشتیبانی می‌کند.

  • wxPython: مجموعه ابزار چندسکویی که از سیستم‌عامل‌های دسکتاپ پشتیبانی می‌کند.

5.5. Advanced topics

5.5.1. Installing free-threaded binaries

اضافه شده در نسخه‌ی 3.13.

تغییر یافته در نسخه‌ی 3.15: Free-threading support is now installed by default.

The python.org Python for macOS installer package installs, by default, an additional build of Python 3.16 that supports free threading (running with the global interpreter lock disabled). Check the release page on python.org for possible updated information.

The free-threaded mode is working and continues to be improved, but there is some additional overhead in single-threaded workloads compared to the regular build. Additionally, third-party packages, in particular ones with an extension module, may not be ready for use in a free-threaded build, and will re-enable the GIL. As of Python 3.15, free-threading support is installed by default. It is packaged as a separate install option, which can be deselected by clicking the Customize button on the Installation Type step of the installer as described above.

../_images/mac_installer_09_custom_install_free_threaded.png

If the box next to the Free-threaded Python package name is checked (as it is by default), a separate PythonT.framework will also be installed alongside the normal Python.framework in /Library/Frameworks. This configuration allows a free-threaded Python 3.16 build to co-exist on your system with a traditional (GIL only) Python 3.16 build with minimal risk while installing or testing. This installation layout may change in future releases.

هشدارها و محدودیت‌های شناخته‌شده:

  • The UNIX command-line tools package, which is selected by default, will install links in /usr/local/bin for python3.16t, the free-threaded interpreter, and python3.16t-config, a configuration utility which may be useful for package builders. Since /usr/local/bin is typically included in your shell PATH, in most cases no changes to your PATH environment variable should be needed to use python3.16t.

  • برای این نسخه، بسته‌ی به‌روزرسان پروفایل پوسته (Shell profile updater) و Update Shell Profile.command در /Applications/Python 3.16/ از بسته‌ی نخ‌آزاد پشتیبانی نمی‌کنند.

  • ساخت‌ نخ‌آزاد و ساخت‌ سنتی مسیرهای جست‌وجوی جداگانه و پوشه‌های site-packages جداگانه دارند؛ بنابراین، به‌طور پیش‌فرض، اگر به بسته‌ای نیاز دارید که در هر دو ساخت‌ در دسترس باشد، ممکن است لازم باشد در هر دو نصب شود. بسته‌ی نخ‌آزاد یک نمونه‌ی جداگانه از pip را برای استفاده همراه با python3.16t نصب می‌کند.

    • برای نصب یک بسته با استفاده از pip بدون venv:

      python3.16t -m pip install <package_name>
  • هنگام کار با چندین محیط پایتون، معمولاً ایمن‌ترین و ساده‌ترین کار این است که محیط‌های مجازی ایجاد کنید و از آن‌ها استفاده کنید. این کار می‌تواند از تداخل‌های احتمالی در نام فرمان‌ها و سردرگمی درباره‌ی اینکه کدام پایتون در حال استفاده است جلوگیری کند:

    python3.16t -m venv <venv_name>

    سپس activate.

  • برای اجرای نسخه‌ی نخ‌آزاد IDLE:

    python3.16t -m idlelib
  • مفسرهای هر دو ساخت‌ به همان متغیرهای محیطی PYTHON پاسخ می‌دهند که ممکن است نتایج غیرمنتظره‌ای در پی داشته باشد، برای مثال، اگر PYTHONPATH را در یک پروفایل پوسته تنظیم کرده باشید. در صورت نیاز، گزینه‌های خط فرمان مانند -E برای نادیده گرفتن این متغیرهای محیطی وجود دارند.

  • ساخت‌ نخ‌آزاد به کتابخانه‌های اشتراکی شخص ثالث، مانند OpenSSL و Tk، که در چارچوب سنتی نصب شده‌اند پیوند می‌شود. این بدان معناست که هر دو ساخت‌ همچنین یک مجموعه واحد از گواهی‌های اعتمادی را که توسط اسکریپت Install Certificates.command نصب شده‌اند به اشتراک می‌گذارند؛ بنابراین تنها لازم است یک بار اجرا شود.

  • اگر نمی‌توانید مطمئن باشید که پیوند موجود در /usr/local/bin به python3.16t نخ‌آزاد python.org اشاره می‌کند (برای مثال، اگر بخواهید نسخه‌ی خودتان را در آنجا نصب کنید یا توزیع دیگری این کار را انجام داده باشد)، می‌توانید به‌طور صریح متغیر محیطی PATH پوسته‌ی خود را طوری تنظیم کنید که پوشه‌ی bin چارچوب PythonT را در بر بگیرد:

    export PATH="/Library/Frameworks/PythonT.framework/Versions/3.16/bin":"$PATH"

    نصب چارچوب به روش سنتی به‌طور پیش‌فرض کاری مشابه انجام می‌دهد، به‌جز Python.framework. آگاه باشید که اگر نام‌های تکراری مانند python3.16 در هر دو وجود داشته باشند، داشتن هر دو پوشه‌ی bin چارچوب در PATH می‌تواند باعث سردرگمی شود؛ اینکه کدام‌یک در واقع استفاده می‌شود، به ترتیبی که در PATH ظاهر می‌شوند بستگی دارد. دستورهای which python3.x یا which python3.xt می‌توانند نشان دهند که کدام مسیر در حال استفاده است. استفاده از محیط‌های مجازی می‌تواند به پرهیز از چنین ابهام‌هایی کمک کند. گزینه‌ی دیگر ممکن است ایجاد یک alias در پوسته برای مفسر دلخواه باشد، مانند:

    alias py3.16="/Library/Frameworks/Python.framework/Versions/3.16/bin/python3.16"
    alias py3.16t="/Library/Frameworks/PythonT.framework/Versions/3.16/bin/python3.16t"

5.5.2. نصب با استفاده از خط فرمان

If you want to use automation to install the python.org installer package (rather than by using the familiar macOS Installer GUI app), the macOS command line installer utility lets you select non-default options, too. If you are not familiar with installer, it can be somewhat cryptic (see man installer for more information). As an example, the following shell snippet shows one way to do it, using the 3.16.0b2 release and deselecting the free-threaded interpreter option:

RELEASE="python-3.160b2-macos11.pkg"

# download installer pkg
curl -O https://www.python.org/ftp/python/3.16.0/${RELEASE}

# create installer choicechanges to customize the install:
#    disable the PythonTFramework-3.16 package
#    while accepting the other defaults (install all other packages)
cat > ./choicechanges.plist <<EOF
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<array>
        <dict>
                <key>attributeSetting</key>
                <integer>0</integer>
                <key>choiceAttribute</key>
                <string>selected</string>
                <key>choiceIdentifier</key>
                <string>org.python.Python.PythonTFramework-3.16</string>
        </dict>
</array>
</plist>
EOF

sudo installer -pkg ./${RELEASE} -applyChoiceChangesXML ./choicechanges.plist -target /

After a default install, you can test that both builds are available with something like:

$ # test that the free-threaded interpreter was installed if the Unix Command Tools package was enabled
$ /usr/local/bin/python3.16t -VV
Python 3.16.0b2 free-threading build (v3.16.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ #    and the traditional interpreter
$ /usr/local/bin/python3.16 -VV
Python 3.16.0b2 (v3.16.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]
$ # test that they are also available without the prefix if /usr/local/bin is on $PATH
$ python3.16t -VV
Python 3.16.0b2 free-threading build (v3.16.0b2:3a83b172af, Jun  5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)]
$ python3.16 -VV
Python 3.16.0b2 (v3.16.0b2:3a83b172af, Jun  5 2024, 12:50:24) [Clang 15.0.0 (clang-1500.3.9.4)]

توجه

نصب‌کننده‌های فعلی python.org فقط در مکان‌های ثابتی مانند /Library/Frameworks/، /Applications و /usr/local/bin نصب می‌کنند. شما نمی‌توانید از گزینه -domain دستور installer برای نصب در مکان‌های دیگر استفاده کنید.

5.5.3. Distributing Python applications

طیفی از ابزارها برای تبدیل کد پایتون شما به یک برنامه‌ی مستقل و قابل توزیع وجود دارد:

  • py2app: ساخت بسته‌های .app macOS از یک پروژه‌ی پایتون را پشتیبانی می‌کند.

  • Briefcase: بخشی از پروژه BeeWare؛ ابزار بسته‌بندی چندسکویی که از ایجاد بسته‌های .app در macOS و همچنین مدیریت امضا و تأیید رسمی (notarization) پشتیبانی می‌کند.

  • PyInstaller: ابزار بسته‌بندی چندسکویی که یک پرونده یا پوشه‌ی واحد را به‌عنوان یک مصنوع توزیع‌پذیر (distributable artifact) ایجاد می‌کند.

5.5.4. App Store compliance

اپلیکیشن‌هایی که برای توزیع از طریق macOS App Store ارسال می‌شوند، باید فرایند بررسی اپلیکیشن اپل را با موفقیت پشت سر بگذارند. این فرایند شامل مجموعه‌ای از قواعد اعتبارسنجی خودکار است که بسته اپلیکیشن ارسالی را از نظر وجود کد مشکل‌دار بررسی می‌کنند.

کتابخانه استاندارد پایتون شامل کدهایی است که می‌دانیم این قوانین خودکار را نقض می‌کنند. اگرچه این نقض‌ها ظاهراً مثبت کاذب هستند، نمی‌توان قوانین بررسی اپل را به چالش کشید. بنابراین، برای اینکه یک برنامه از بررسی App Store عبور کند، لازم است که کتابخانه استاندارد پایتون تغییر داده شود.

درخت منبع پایتون شامل یک پرونده وصله است که تمام کدهایی که مشخص است در فرایند بررسی App Store مشکل ایجاد می‌کنند را حذف خواهد کرد. این وصله به‌طور خودکار زمانی اعمال می‌شود که سی‌پایتون با گزینه‌ی --with-app-store-compliance پیکربندی شود.

این وصل معمولاً برای استفاده از سی‌پایتون روی مک لازم نیست؛ و اگر برنامه‌ای را خارج از macOS App Store توزیع می‌کنید نیز لازم نیست. این وصل تنها زمانی لازم است که از macOS App Store به‌عنوان کانال توزیع استفاده کنید.

5.6. Other resources

صفحه‌ی راهنمای python.org پیوندهایی به بسیاری از منابع مفید دارد. فهرست پستی Pythonmac-SIG منبع پشتیبانی دیگری است که به‌طور خاص برای کاربران پایتون و توسعه‌دهندگان روی مک در نظر گرفته شده است.