5. استفاده از پایتون در macOS¶
هدف این سند، ارائهی مروری کلی بر رفتارهای اختصاصی macOS است که برای شروع کار با پایتون روی رایانههای مک باید از آنها آگاه باشید. پایتون روی مکی که macOS را اجرا میکند، بسیار شبیه به پایتون روی سایر پلتفرمهای برگرفته از یونیکس است، اما تفاوتهایی در نصب و برخی ویژگیها وجود دارد.
روشهای مختلفی برای دریافت و نصب پایتون در macOS وجود دارد. نسخههای از پیش ساختهشدهی جدیدترین نسخههای پایتون از تعدادی توزیعکننده در دسترس هستند. بخش عمدهی این سند به استفاده از پایتونهایی میپردازد که تیم انتشار سیپایتون آنها را برای دانلود از وبسایت python.org ارائه کرده است. برای برخی گزینههای دیگر، توزیع های جایگزین را ببینید.
5.1. استفاده از پایتون برای مکاواس از python.org¶
5.1.1. مراحل نصب¶
برای نسخه های فعلی پایتون (به جز موارد دارای وضعیت security)، تیم انتشار یک بسته ی نصبی Python for macOS برای هر نسخه ی جدید تولید می کند. فهرستی از نصب کننده های موجود در صفحه ی دانلودهای macOS ارائه شده است. توصیه می کنیم در صورت امکان از جدیدترین نسخه ی پشتیبانی شده ی پایتون استفاده کنید. نصب کننده های فعلی یک ساخت دوتایی universal2 از پایتون را ارائه می دهند که به صورت بومی روی تمام مک ها (Apple Silicon و اینتل) که توسط طیف وسیعی از نسخه های macOS پشتیبانی می شوند، اجرا می شود؛ که در حال حاضر معمولاً از macOS 10.15 Catalina به بعد است.
پرونده ی دانلودشده یک پرونده ی بسته ی نصب کننده ی استاندارد macOS (.pkg) است. اطلاعات یکپارچگی پرونده (مانند جمعآزما، اندازه و امضای Sigstore) برای هر پرونده در صفحه ی دانلود نسخه گنجانده شده است. بسته های نصب کننده و محتویات آن ها با گواهی های شناسه ی توسعه دهنده ی اپل Python Software Foundation امضا و محضری (notarized) شده اند تا با الزامات گیت کیپر macOS مطابقت داشته باشند.
برای یک نصب پیش فرض، روی پرونده ی بسته ی نصب کننده ی دانلودشده دو بار کلیک کنید. این کار باید برنامه ی نصب کننده ی استاندارد macOS را اجرا کرده و اولین مرحله از چندین مرحله ی نصب را نمایش دهد.
با کلیک روی دکمهی Continue، Read Me این نصبکننده نمایش داده میشود. Read Me در کنار سایر اطلاعات مهم، شرح میدهد که کدام نسخهی پایتون قرار است نصب شود و روی کدام نسخههای macOS پشتیبانی میشود. ممکن است برای خواندن کل پرونده، لازم باشد آن را اسکرول کنید. بهطور پیشفرض، این Read Me همچنین در /Applications/Python 3.15/ نصب خواهد شد و هر زمان که بخواهید قابل مطالعه خواهد بود.
با کلیک روی Continue، مجوز پایتون و سایر نرمافزارهای همراه نمایش داده میشود. سپس پیش از ادامه به گام بعدی، باید برای موافقت با شرایط مجوز روی Agree کلیک کنید. این پرونده مجوز نیز نصب خواهد شد و بعداً برای مطالعه در دسترس خواهد بود.
پس از پذیرفته شدن شرایط مجوز، گام بعدی نمایش Installation Type است. برای بیشتر کاربردها، مجموعه استاندارد عملیاتهای نصب مناسب است.
با فشردن دکمه ی Customize، می توانید اجزای خاصی از بسته ی نصب کننده را انتخاب کرده یا از نصب خارج کنید. روی نام هر بسته کلیک کنید تا توضیحات مربوط به آنچه نصب می کند را ببینید. برای جزئیات ویژگی اختیاری نخآزاد (free-threaded) که به صورت پیش فرض نصب می شود، به نصب نسخههای باینری نخآزاد مراجعه کنید.
در هر دو حالت، کلیک روی Install فرایند نصب را با درخواست مجوز برای نصب نرمافزار جدید آغاز میکند. نام کاربری macOS با امتیاز Administrator لازم است، زیرا پایتون نصبشده برای همهی کاربران مک در دسترس خواهد بود.
پس از اتمام نصب، پنجرهی Summary نمایش داده میشود.
برای تکمیل نصب، روی نماد یا پروندهی Install Certificates.command در پنجرهی /Applications/Python 3.15/ دوبار کلیک کنید.
این کار یک پنجرهی پوستهی موقت Terminal باز میکند که با استفاده از پایتون جدید، گواهیهای ریشهی SSL را برای استفادهی خود دانلود و نصب میکند.
اگر عبارات Successfully installed certifi و update complete در پنجره ی پایانه ظاهر شدند، نصب کامل شده است. این پنجره ی پایانه و پنجره ی نصب کننده را ببندید.
نصب پیشفرض شامل موارد زیر خواهد بود:
پوشهی
Python 3.15در پوشهی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.15 یا python3 را فراخوانی کنید که بهاختیار میتوانند با یک یا چند گزینهی خط فرمان همراه شوند (در خط فرمان و محیط شرح داده شدهاند). آموزش پایتون نیز بخش مفیدی دربارهی استفادهی تعاملی از پایتون در پوسته دارد.
همچنین میتوانید مفسر را از طریق یک محیط توسعه یکپارچه فراخوانی کنید. IDLE --- ویرایشگر و پوسته پایتون یک ویرایشگر و محیط مفسر پایه است که همراه با توزیع استاندارد پایتون ارائه میشود. IDLE شامل منوی راهنما (Help) است که به شما امکان میدهد به مستندات پایتون دسترسی داشته باشید. اگر کاملاً تازهکار در پایتون هستید، میتوانید مقدمهی آموزشی را در آن سند بخوانید.
ویرایشگرها و IDEهای بسیاری دیگر در دسترس هستند؛ برای اطلاعات بیشتر به ویرایشگرها و محیطهای توسعه یکپارچه مراجعه کنید.
برای اجرای یک پرونده اسکریپت پایتون از پنجره پایانه، میتوانید مفسر را با نام پرونده اسکریپت فراخوانی کنید:
python3.15myscript.py
برای اجرای اسکریپت خودتان از Finder، میتوانید یکی از این دو کار را انجام دهید:
آن را به Python Launcher بکشید.
از طریق پنجره اطلاعات Finder، Python Launcher را بهعنوان برنامه پیشفرض برای باز کردن اسکریپت خود (یا هر اسکریپت
.py) انتخاب کنید و روی آن دوبار کلیک کنید. Python Launcher تنظیمات گوناگونی برای کنترل نحوه راهاندازی اسکریپت شما دارد. کشیدن همراه با نگهداشتن کلید Option به شما امکان میدهد این تنظیمات را برای یک اجرا تغییر دهید، یا از منویPreferencesآن برای اعمال تغییرات بهصورت سراسری استفاده کنید.
آگاه باشید که اجرای مستقیم اسکریپت از Finder در macOS ممکن است نتایجی متفاوت نسبت به اجرای آن از طریق یک پنجره پایانه به دست دهد، زیرا اسکریپت در محیط معمول پوسته، از جمله هر تنظیمی از متغیرهای محیطی در پروفایلهای پوسته، اجرا نخواهد شد. و همانند هر اسکریپت یا برنامه دیگری، از چیزی که میخواهید اجرا کنید مطمئن باشید.
5.2. توزیع های جایگزین¶
علاوه بر نصبکننده استاندارد python.org برای macOS، توزیعهای شخص ثالثی برای macOS وجود دارند که ممکن است قابلیتهای اضافی داشته باشند. برخی از توزیعهای محبوب و ویژگیهای کلیدی آنها:
- ActivePython
نصبکننده با سازگاری چندسکویی، مستندات
- Anaconda
ماژولهای علمی محبوب (مانند numpy، scipy و pandas) و مدیر بسته
conda.- Homebrew
مدیر بسته برای macOS که شامل نسخههای متعدد پایتون و بسیاری از بستههای شخص ثالث مبتنی بر پایتون (از جمله numpy، scipy و pandas) است.
- MacPorts
یک مدیر بستهی دیگر برای macOS که شامل چندین نسخه از پایتون و بسیاری از بستههای شخص ثالث مبتنی بر پایتون است. ممکن است شامل نسخههای پیشساختهی پایتون و بسیاری از بستهها برای نسخههای قدیمیتر macOS باشد.
توجه داشته باشید که توزیعها ممکن است شامل جدیدترین نسخههای پایتون یا کتابخانههای دیگر نباشند و توسط تیم اصلی پایتون نگهداری یا پشتیبانی نمیشوند.
5.3. نصب بسته های اضافی پایتون¶
برای اطلاعات بیشتر به Python Packaging User Guide مراجعه کنید.
5.4. برنامه نویسی رابط گرافیکی کاربر¶
چندین گزینه برای ساخت برنامههای رابط کاربری گرافیکی (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. مباحث پیشرفته¶
5.5.1. نصب نسخههای باینری نخآزاد¶
اضافه شده در نسخهی 3.13.
تغییر یافته در نسخهی 3.15: پشتیبانی از رشتهآزاد (free-threading) اکنون بهطور پیشفرض نصب میشود.
بستهی نصبی Python for macOS در سایت python.org بهطور پیشفرض، ساخت (build) اضافهای از پایتون 3.15 را نصب میکند که از نخبندی آزاد (اجرا با غیرفعال بودن قفل مفسر سراسری) پشتیبانی میکند. برای اطلاع از آخرین اطلاعات بهروزرسانیشده، صفحهی انتشار را در python.org بررسی کنید.
حالت نخآزاد کار میکند و همچنان در حال بهبود است، اما در بارهای کاری تکنخهای در مقایسه با ساخت معمولی، مقداری سربار اضافی وجود دارد. علاوه بر این، بستههای شخص ثالث، بهویژه آنهایی که دارای یک ماژول توسعهای هستند، ممکن است برای استفاده در یک ساخت نخآزاد آماده نباشند و GIL را دوباره فعال کنند. از پایتون ۳.۱۵ به بعد، پشتیبانی از نخبندی آزاد بهطور پیشفرض نصب میشود. این قابلیت به شکل یک گزینهی نصبی مجزا بستهبندی شده است که میتوان آن را با کلیک کردن روی دکمهی Customize در مرحلهی Installation Type برنامهی نصب (همانطور که در بالا توضیح داده شد) لغو انتخاب کرد.
اگر کادر کنار نام بستهی Free-threaded Python علامت زده شده باشد (همانطور که بهطور پیشفرض است)، یک PythonT.framework جداگانه نیز در کنار Python.framework معمولی در /Library/Frameworks نصب خواهد شد. این پیکربندی به یک ساخت پایتون 3.15 نخآزاد اجازه میدهد تا هنگام نصب یا آزمایش، با حداقل خطر در کنار یک ساخت سنتی پایتون 3.15 (فقط دارای GIL) روی سیستم شما همزیستی داشته باشد. این ساختار نصب ممکن است در نسخههای آینده تغییر کند.
هشدارها و محدودیتهای شناختهشده:
بستهی UNIX command-line tools که بهطور پیشفرض انتخاب شده است، پیوندهایی را در
/usr/local/binبرایpython3.15t(مفسر نخآزاد) وpython3.15t-config(یک ابزار پیکربندی که ممکن است برای سازندگان بسته مفید باشد) نصب خواهد کرد. از آنجا که/usr/local/binمعمولاً درPATHپوستهی شما گنجانده میشود، در بیشتر موارد نباید نیازی به ایجاد تغییر در متغیر محیطیPATHخود برای استفاده ازpython3.15tداشته باشید.برای این نسخه، بستهی بهروزرسان پروفایل پوسته (Shell profile updater) و
Update Shell Profile.commandدر/Applications/Python 3.15/از بستهی نخآزاد پشتیبانی نمیکنند.ساخت نخآزاد و ساخت سنتی مسیرهای جستوجوی جداگانه و پوشههای
site-packagesجداگانه دارند؛ بنابراین، بهطور پیشفرض، اگر به بستهای نیاز دارید که در هر دو ساخت در دسترس باشد، ممکن است لازم باشد در هر دو نصب شود. بستهی نخآزاد یک نمونهی جداگانه از pip را برای استفاده همراه باpython3.15tنصب میکند.برای نصب یک بسته با استفاده از pip بدون venv:
python3.15t -m pip install <package_name>
هنگام کار با چندین محیط پایتون، معمولاً ایمنترین و سادهترین کار این است که محیطهای مجازی ایجاد کنید و از آنها استفاده کنید. این کار میتواند از تداخلهای احتمالی در نام فرمانها و سردرگمی دربارهی اینکه کدام پایتون در حال استفاده است جلوگیری کند:
python3.15t -m venv <venv_name>
سپس activate.
برای اجرای نسخهی نخآزاد IDLE:
python3.15t -m idlelib
مفسرهای هر دو ساخت به همان متغیرهای محیطی PYTHON پاسخ میدهند که ممکن است نتایج غیرمنتظرهای در پی داشته باشد، برای مثال، اگر
PYTHONPATHرا در یک پروفایل پوسته تنظیم کرده باشید. در صورت نیاز، گزینههای خط فرمان مانند-Eبرای نادیده گرفتن این متغیرهای محیطی وجود دارند.ساخت نخآزاد به کتابخانههای اشتراکی شخص ثالث، مانند
OpenSSLوTk، که در چارچوب سنتی نصب شدهاند پیوند میشود. این بدان معناست که هر دو ساخت همچنین یک مجموعه واحد از گواهیهای اعتمادی را که توسط اسکریپت Install Certificates.command نصب شدهاند به اشتراک میگذارند؛ بنابراین تنها لازم است یک بار اجرا شود.اگر نمیتوانید مطمئن باشید که پیوند موجود در
/usr/local/binبهpython3.15tنخآزادpython.orgاشاره میکند (برای مثال، اگر بخواهید نسخهی خودتان را در آنجا نصب کنید یا توزیع دیگری این کار را انجام داده باشد)، میتوانید بهطور صریح متغیر محیطیPATHپوستهی خود را طوری تنظیم کنید که پوشهیbinچارچوبPythonTرا در بر بگیرد:export PATH="/Library/Frameworks/PythonT.framework/Versions/3.15/bin":"$PATH"
نصب چارچوب به روش سنتی بهطور پیشفرض کاری مشابه انجام میدهد، بهجز
Python.framework. آگاه باشید که اگر نامهای تکراری مانندpython3.15در هر دو وجود داشته باشند، داشتن هر دو پوشهیbinچارچوب درPATHمیتواند باعث سردرگمی شود؛ اینکه کدامیک در واقع استفاده میشود، به ترتیبی که درPATHظاهر میشوند بستگی دارد. دستورهایwhich python3.xیاwhich python3.xtمیتوانند نشان دهند که کدام مسیر در حال استفاده است. استفاده از محیطهای مجازی میتواند به پرهیز از چنین ابهامهایی کمک کند. گزینهی دیگر ممکن است ایجاد یک alias در پوسته برای مفسر دلخواه باشد، مانند:alias py3.15="/Library/Frameworks/Python.framework/Versions/3.15/bin/python3.15" alias py3.15t="/Library/Frameworks/PythonT.framework/Versions/3.15/bin/python3.15t"
5.5.2. نصب با استفاده از خط فرمان¶
اگر میخواهید برای نصب بستهی نصبی python.org از خودکارسازی استفاده کنید (بهجای استفاده از برنامهی گرافیکی آشنای macOS Installer)، ابزار خط فرمان macOS یعنی installer به شما اجازه میدهد گزینههای غیرپیشفرض را نیز انتخاب کنید. اگر با installer آشنا نیستید، ممکن است تا حدی مبهم باشد (برای اطلاعات بیشتر به man installer مراجعه کنید). به عنوان یک نمونه، قطعهکد پوستهی زیر یکی از راههای انجام این کار را نشان میدهد که در آن از انتشار 3.15.0b2 استفاده شده و گزینهی مفسر نخآزاد لغو انتخاب شده است:
RELEASE="python-3.150b2-macos11.pkg"
# download installer pkg
curl -O https://www.python.org/ftp/python/3.15.0/${RELEASE}
# create installer choicechanges to customize the install:
# disable the PythonTFramework-3.15 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.15</string>
</dict>
</array>
</plist>
EOF
sudo installer -pkg ./${RELEASE} -applyChoiceChangesXML ./choicechanges.plist -target /
پس از یک نصب پیشفرض، میتوانید با دستوری شبیه به زیر آزمایش کنید که هر دو ساخت موجود هستند:
$ # test that the free-threaded interpreter was installed if the Unix Command Tools package was enabled $ /usr/local/bin/python3.15t -VV Python 3.15.0b2 free-threading build (v3.15.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.15 -VV Python 3.15.0b2 (v3.15.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.15t -VV Python 3.15.0b2 free-threading build (v3.15.0b2:3a83b172af, Jun 5 2024, 12:57:31) [Clang 15.0.0 (clang-1500.3.9.4)] $ python3.15 -VV Python 3.15.0b2 (v3.15.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. توزیع برنامههای پایتون¶
طیفی از ابزارها برای تبدیل کد پایتون شما به یک برنامهی مستقل و قابل توزیع وجود دارد:
py2app: ساخت بستههای
.appmacOS از یک پروژهی پایتون را پشتیبانی میکند.Briefcase: بخشی از پروژه BeeWare؛ ابزار بستهبندی چندسکویی که از ایجاد بستههای
.appدر macOS و همچنین مدیریت امضا و تأیید رسمی (notarization) پشتیبانی میکند.PyInstaller: ابزار بستهبندی چندسکویی که یک پرونده یا پوشهی واحد را بهعنوان یک مصنوع توزیعپذیر (distributable artifact) ایجاد میکند.
5.5.4. سازگاری با اپ استور¶
اپلیکیشنهایی که برای توزیع از طریق macOS App Store ارسال میشوند، باید فرایند بررسی اپلیکیشن اپل را با موفقیت پشت سر بگذارند. این فرایند شامل مجموعهای از قواعد اعتبارسنجی خودکار است که بسته اپلیکیشن ارسالی را از نظر وجود کد مشکلدار بررسی میکنند.
کتابخانه استاندارد پایتون شامل کدهایی است که میدانیم این قوانین خودکار را نقض میکنند. اگرچه این نقضها ظاهراً مثبت کاذب هستند، نمیتوان قوانین بررسی اپل را به چالش کشید. بنابراین، برای اینکه یک برنامه از بررسی App Store عبور کند، لازم است که کتابخانه استاندارد پایتون تغییر داده شود.
درخت منبع پایتون شامل یک پرونده وصله است که تمام کدهایی که مشخص است در فرایند بررسی App Store مشکل ایجاد میکنند را حذف خواهد کرد. این وصله بهطور خودکار زمانی اعمال میشود که سیپایتون با گزینهی --with-app-store-compliance پیکربندی شود.
این وصل معمولاً برای استفاده از سیپایتون روی مک لازم نیست؛ و اگر برنامهای را خارج از macOS App Store توزیع میکنید نیز لازم نیست. این وصل تنها زمانی لازم است که از macOS App Store بهعنوان کانال توزیع استفاده کنید.
5.6. منابع دیگر¶
صفحهی راهنمای python.org پیوندهایی به بسیاری از منابع مفید دارد. فهرست پستی Pythonmac-SIG منبع پشتیبانی دیگری است که بهطور خاص برای کاربران پایتون و توسعهدهندگان روی مک در نظر گرفته شده است.