برخی از ماژولهای اختیاری کتابخانه استاندارد به کتابخانههای شخص ثالث نیاز دارند که برای توسعه نصب شده باشند (برای مثال، باید پروندههای سرآیند در دسترس باشند).
نیازمندیهای مفقود در خروجی configure گزارش میشوند. ماژولهایی که به دلیل وابستگیهای مفقود وجود ندارند، نزدیک به انتهای خروجی make فهرست میشوند و گاهی با استفاده از نامی داخلی، برای مثال _ctypes برای ماژول ctypes.
اگر مفسر سیپایتون را بدون ماژولهای اختیاری توزیع میکنید، بهترین روش این است که کاربران را آگاه کنید، زیرا آنها معمولاً انتظار دارند ماژولهای کتابخانه استاندارد در دسترس باشند.
توجه داشته باشید که این جدول شامل تمام ماژولهای اختیاری نیست؛ بهطور خاص، ماژولهای مخصوص پلتفرم مانند winreg در اینجا فهرست نشدهاند.
همچنین ببینید
راهنمای توسعه (devguide) شامل فهرست کاملی از وابستگیهای مورد نیاز برای ساخت تمام ماژولها و دستورالعملهایی درباره نحوه نصب آنها در پلتفرمهای رایج است.
پرونده Makefile.pre.in پروندههای تولیدشده، ورودیهای آنها و ابزارهای مورد استفاده برای بازتولید آنها را مستندسازی میکند. اهداف regen-* در make را جستوجو کنید.
فرمان makeregen-configure پروندهی aclocal.m4 و اسکریپت configure را با استفاده از اسکریپت پوستهی Tools/build/regen-configure.sh بازتولید میکند که از یک کانتینر اوبونتو برای به دست آوردن همان نسخههای ابزارها و داشتن خروجی تکرارپذیر استفاده میکند.
استفاده از کانتینر اختیاری است؛ دستور زیر را میتوان بهصورت محلی اجرا کرد:
autoreconf-ivf-Werror
پروندههای تولیدشده ممکن است بسته به نسخههای دقیق ابزارهای استفادهشده تغییر کنند. کانتینری که سیپایتون از آن استفاده میکند، دارای Autoconf نسخهی 2.72، aclocal از Automake نسخهی 1.16.5 و pkg-config نسخهی 1.8.1 است.
تغییر یافته در نسخهی 3.13: Autoconf 2.71 و aclocal 1.16.5 اکنون برای بازتولید configure استفاده میشوند.
تغییر یافته در نسخهی 3.14: اکنون از Autoconf 2.72 برای بازتولید configure استفاده میشود.
پسوند پرونده اجرایی پایتون را به SUFFIX تنظیم میکند.
پسوند پیشفرض در ویندوز و macOS .exe است (پرونده اجرایی python.exe)، در Emscripten node .js، در Emscripten browser .html، در WASI .wasm و در سایر پلتفرمها رشتهی خالی است (پرونده اجرایی python).
تغییر یافته در نسخهی 3.11: پسوند پیشفرض در پلتفرم WASM یکی از .js، .html یا .wasm است.
پوشهی بستههای wheel مورد استفادهی ماژول ensurepip (بهطور پیشفرض هیچکدام).
برخی از سیاستهای بستهبندی توزیعهای لینوکس توصیه میکنند که وابستگیها همراه بسته نشوند. برای مثال، فدورا بستههای wheel را در پوشهی /usr/share/python-wheels/ نصب میکند و بستهی ensurepip._bundled را نصب نمیکند.
مسیر یک پروندهی پیکربندی JSON که حاوی پیامهای خطای سفارشی برای ماژولهای مفقود کتابخانهی استاندارد است.
این گزینهی برای توزیعکنندگان پایتون در نظر گرفته شده است که میخواهند هنگامی که کاربران با ماژولهای کتابخانهی استاندارد که مفقود شدهاند یا بهطور جداگانه بستهبندی شدهاند مواجه میشوند، راهنماییهای مختصِ آن توزیع را ارائه دهند.
پروندهی JSON باید نام ماژولهای مفقود را به رشتههای پیام خطای سفارشی نگاشت کند. برای مثال، اگر توزیع شما بستههای tkinter و _tkinter را بهطور جداگانه بستهبندی کند و به دلایل قانونی _gdbm را کنار بگذارد، پیکربندی میتواند شامل موارد زیر باشد:
{"_gdbm":"The '_gdbm' module is not available in this distribution","tkinter":"Install the python-tk package to use tkinter","_tkinter":"Install the python-tk package to use tkinter",}
بهطور پیشفرض، گردآوری آمار خاموش است. برای روشن کردن گردآوری آمار در زمان راهاندازی پایتون، از دستور python3-Xpystats استفاده کنید یا متغیر محیطی PYTHONSTATS=1 را تنظیم کنید.
هنگام خروج پایتون، اگر گردآوری آمار فعال بوده و پاکسازی نشده باشد، آمار برونریزی میشود.
sys._stats_dump(): آمار را به پرونده برونریزی میکند و آن را پاک میکند.
آمار به یک پروندهی دلخواه (احتمالاً یکتا) در /tmp/py_stats/ (یونیکس) یا C:\temp\py_stats\ (ویندوز) برونریزی میشود. اگر آن پوشه وجود نداشته باشد، نتایج روی stderr چاپ خواهند شد.
برای خواندن آمار از Tools/scripts/summarize_stats.py استفاده کنید.
yes: JIT را فعال میکند. برای غیرفعال کردن آن در زمان اجرا، متغیر محیطی PYTHON_JIT=0 را تنظیم کنید.
yes-off: JIT ساخته میشود، اما بهطور پیشفرض غیرفعال است. برای فعالسازی آن در زمان اجرا، متغیر محیطی PYTHON_JIT=1 را تنظیم کنید.
interpreter: فعال کردن «مفسر JIT» (فقط برای کسانی که خودِ JIT را اشکالزدایی میکنند مفید است). برای غیرفعال کردن آن در زمان اجرا، متغیر محیطی PYTHON_JIT=0 را تنظیم کنید.
اگر این گزینه ارائه نشود، --enable-experimental-jit=no رفتار پیشفرض است و --enable-experimental-jit شکل مختصر --enable-experimental-jit=yes است. برای اطلاعات بیشتر، از جمله نحوهی نصب وابستگیهای لازم زمان ساخت، Tools/jit/README.md را ببینید.
نکته
هنگام ساخت سیپایتون با JIT فعال، مطمئن شوید که پایتون 3.11 یا نسخههای جدیدتر آن روی سیستم شما نصب شده است.
ساخت بدون epoll، به این معنا که تابع select.epoll() حتی اگر سیستم یک تابع epoll_create را فراهم کند، حضور نخواهد داشت. این ممکن است روی سیستمهایی استفاده شود که در آنها epoll_create یا epoll_create1 موجود است اما با معناشناسی لینوکس سازگار نیست.
پیکربندی پایتون با استفاده از --enable-optimizations--with-lto (PGO + LTO) برای بهترین عملکرد توصیه میشود. همچنین میتوان از پرچم آزمایشی --enable-bolt برای بهبود عملکرد استفاده کرد.
فعالسازی بهینهسازی هدایتشده توسط پروفایل (PGO) با استفاده از PROFILE_TASK (بهطور پیشفرض غیرفعال است).
کامپایلر C با نام Clang برای PGO به برنامهی llvm-profdata نیاز دارد. در macOS، GCC نیز به آن نیاز دارد: GCC در macOS تنها یک نام مستعار برای Clang است.
در صورت استفاده از --enable-shared و GCC، میانجایگذاری معنایی (semantic interposition) را نیز در libpython غیرفعال کنید: -fno-semantic-interposition را به پرچمهای کامپایلر و پیونددهنده اضافه کنید.
نکته
در حین ساخت، ممکن است با هشدارهایی از سوی کامپایلر مبنی بر اینکه دادههای پروفایل برای برخی از پروندههای منبع در دسترس نیست مواجه شوید. این هشدارها بیضرر هستند، زیرا در طول گردآوری دادههای پروفایل تنها زیرمجموعهای از کد اجرا میشود. برای غیرفعال کردن این هشدارها در Clang، با افزودن -Wno-profile-instr-unprofiled به CFLAGS آنها را بهصورت دستی سرکوب کنید.
اضافه شده در نسخهی 3.6.
تغییر یافته در نسخهی 3.10: از -fno-semantic-interposition در GCC استفاده کنید.
BOLT بخشی از پروژه LLVM است، اما همیشه در توزیعهای دودویی آنها گنجانده نمیشود. این پرچم مستلزم آن است که llvm-bolt و merge-fdata دسترسپذیر باشند.
BOLT هنوز پروژهای نسبتاً جدید است، بنابراین این پرچم فعلاً باید آزمایشی در نظر گرفته شود. از آنجا که این ابزار روی کد ماشین کار میکند، موفقیت آن به ترکیبی از محیط ساخت + سایر آرگومانهای configure مربوط به بهینهسازی + معماری CPU وابسته است و همه ترکیبها پشتیبانی نمیشوند. مشخص است که نسخههای BOLT پیش از LLVM 16 در برخی سناریوها باعث فروپاشی BOLT میشوند. استفاده از LLVM 16 یا جدیدتر برای بهینهسازی BOLT بهشدت توصیه میشود.
میتوان متغیرهای BOLT_INSTRUMENT_FLAGS و BOLT_APPLY_FLAGS در configure را تعریف کرد تا به ترتیب مجموعهی پیشفرض آرگومانهای llvm-bolt برای ابزارگذاری (instrument) و اعمال دادههای BOLT روی پروندههای دودویی را نادیده بگیرند.
فعال کردن مفسرهایی که در سیپایتون از فراخوانیهای دمی استفاده میکنند. در صورت فعال بودن، فعالسازی PGO (--enable-optimizations) بهشدت توصیه میشود. این گزینه بهطور خاص به کامپایلر C با پشتیبانی مناسب از فراخوانی دمی و قرارداد فراخوانی preserve_none نیاز دارد. برای مثال، Clang 19 و نسخههای جدیدتر از این قابلیت پشتیبانی میکنند.
غیرفعال کردن اشارهگرهای قاب (frame pointer)، که بهطور پیشفرض فعال هستند (به PEP 831 مراجعه کنید).
بهطور پیشفرض، فرایند ساخت پرچمهایی را برای تولید اشارهگرهای قاب یا زنجیرهی پشتی به BASECFLAGS اضافه میکند:
هنگامی که کامپایلر از آنها پشتیبانی کند، -fno-omit-frame-pointer و/یا -mno-omit-leaf-frame-pointer اضافه میشوند.
هنگامی که پشتیبانی شود، -marm و/یا -mno-thumb روی معماری ۳۲ بیتی ARM اضافه میشوند،
روی پلتفرمهای s390x، در صورت پشتیبانی، -mbackchainبهجای پرچمهای اشارهگر قاب ذکر شده در بالا اضافه میشود.
روی پلتفرمهای ppc64le، از آنجا که رابط دودویی کاربردی (ABI) پاور ایجاب میکند که کامپایلرها بهطور پیشفرض زنجیرهی پشتی را حفظ کنند، نیازی به پرچم کامپایلر نیست.
اشارهگرهای قاب به پروفایلگیرها، اشکالزداها و ابزارهای ردیابی سیستم (مانند perf، eBPF، dtrace، gdb) امکان میدهند تا پشتهی فراخوانی C را بدون متادیتای DWARF پیمایش کنند. این پرچمها از طریق sysconfig به برنامههای افزودنی C شخص ثالث منتقل میشوند. روی کامپایلرهایی که آنها را درک نمیکنند، فرایند ساخت بهطور بیصدا از آنها عبور میکند.
توزیعکنندگان پاییندست و توسعهدهندگان کتابخانههای بومی که با سیستمهای ساخت سفارشی ساخته شدهاند باید همان پرچمها را تنظیم کنند تا زنجیرهی بازگشایی در تمامی قابهای بومی دستنخورده باقی بماند.
فعالسازی پشتیبانی از صفحات بزرگ (huge page) برای آرناهای pymalloc (بهطور پیشفرض غیرفعال است). هنگامی که فعال باشد، اندازهی آرنا در پلتفرمهای ۶۴ بیتی به ۲ مگابایت افزایش مییابد و تخصیص آرنا از MAP_HUGETLB (لینوکس) یا MEM_LARGE_PAGES (ویندوز) با جایگزین خودکار به صفحات معمولی استفاده میکند.
حتی هنگام کامپایلشده با این گزینه، صفحات بزرگ در طول رانتایم استفاده نمیشوند مگر اینکه متغیر محیطی PYTHON_PYMALLOC_HUGEPAGES روی 1 تنظیم شود. این انتخاب اختیاری لازم است زیرا صفحات بزرگ
خطراتی را روی لینوکس به همراه دارند: اگر استخر صفحات بزرگ تخلیه شود، خطاهای صفحه (شامل خطاهای copy-on-write پس از os.fork()) سیگنال SIGBUS را تحویل داده و فرایند را متوقف میکنند.
روی ویندوز به دسترسی ویژهای نیاز دارند. برای جزئیات، مستندات ویندوز برای صفحات بزرگ را ببینید. اگر دسترسی لازم SeLockMemoryPrivilege توسط کاربر وجود نداشته باشد، پایتون هنگام راهاندازی با خطا مواجه خواهد شد.
اسکریپت کانفیگ بررسی میکند که آیا پلتفرم از MAP_HUGETLB پشتیبانی میکند یا خیر، و در صورت در دسترس نبودن، هشداری صادر میکند.
روی ویندوز، از پرچم --pymalloc-hugepages به همراه build.bat استفاده کنید یا ویژگی UsePymallocHugepages در MSBuild را تنظیم کنید.
این کلاندستور را برای گنجاندن رشتههای مستندات ایستا در ساخت تعریف کنید. این مورد به طور پیشفرض تعریف میشود، مگر اینکه از --without-doc-strings استفاده شود.
پشتیبانی از اشکالزدایی از راه دور که در PEP 768 توصیفشده است را غیرفعال میکند (بهصورت پیشفرض فعال است). با ارائه این پرچم، کدی که به مفسر اجازه میدهد اجرای یک پرونده پایتون را در فرایندی جداگانه زمانبندی کند (همانطور که در PEP 768 توصیفشده است)، کامپایل نمیشود. این شامل هر دو کارکرد زمانبندی کدی که باید اجرا شود و کارکرد دریافت کدی که باید اجرا شود است.
افزودن بررسیهای رانتایم: کدی که با #ifdefPy_DEBUG و #endif دربرگرفته شده است. فعال کردن ادعاهای assert(...) و _PyObject_ASSERT(...): ماکروی NDEBUG را تنظیم نکنید (همچنین گزینه پیکربندی --with-assertions را ببینید). بررسیهای اصلی رانتایم:
بررسیهای درستی (sanity check) را بر روی آرگومانهای تابع اضافه کنید.
شیءهای یونیکد و int بهگونهای ساخته میشوند که حافظهشان با یک الگو پر شده باشد تا استفاده از شیءهای مقداردهینشده تشخیص داده شود.
مطمئن شوید که توابعی که میتوانند استثنای فعلی را پاک کنند یا جایگزین کنند، در حالی که استثنایی برخاسته (raise) است، فراخوانی نمیشوند.
بررسی کنید که توابع آزادساز حافظه استثنای فعلی را تغییر ندهند.
زبالهروب (تابع gc.collect()) برخی بررسیهای پایه روی سازگاری اشیاء انجام میدهد.
ماکروی Py_SAFE_DOWNCAST() هنگام تبدیل نوع به پایین (downcasting) از نوعهای پهن به نوعهای باریک، زیرریز و سرریز عدد صحیح را بررسی میکند.
تغییر یافته در نسخهی 3.8: ساختهای نهایی اکنون از نظر ABI با ساختهای دیباگ سازگار هستند: تعریف ماکروی Py_DEBUG دیگر مستلزم ماکروی Py_TRACE_REFS نیست (گزینهی --with-trace-refs را ببینید). با این حال، ساختهای دیباگ همچنان نمادهای بیشتری نسبت به ساختهای نهایی نمایان میکنند و کدی که بر پایهی یک ساخت دیباگ ساخته شده باشد، لزوماً با ساخت نهایی سازگار نیست.
آشکارساز خطاهای حافظهی AddressSanitizer یعنی asan را فعال میکند (پیشفرض: خیر). برای بهبود قابلیتهای تشخیص ASan، ممکن است بخواهید این گزینه را با --without-pymalloc نیز ترکیب کنید تا تخصیصدهندهی تخصصی اشیاء کوچک (که تخصیصهای آن توسط ASan پیگیری نمیشوند) غیرفعال شود.
MSan برای حافظهای که توسط کتابخانههایی که با MSan ساخته نشدن مقداردهی اولیه شده، نتایج مثبت کاذب گزارش میدهد. بنابراین یا همهی وابستگیها را با MSan بسازید، یا ماژولهای توسعهایای که از آنها استفاده میکنند را در Modules/Setup.local غیرفعال کنید.
فایل دودویی مفسر پایتون (python3) را به کتابخانهی مشترک پایتون لینک نکنید؛ در عوض، مفسر را بهطور ایستا به libpython لینک کنید، گویی از --enable-shared استفاده نشده است، اما به ساخت libpython مشترک (برای استفادهی سایر برنامهها) ادامه دهید.
اگر از --enable-shared استفاده نشود، این گزینه هیچ کاری انجام نمیدهد.
حالت پیشفرض (هنگامی که از -enable-shared استفاده میشود) این است که مفسر پایتون به کتابخانهی مشترک ساختهشده لینک شود.
ماژول توسعهای _decimal را با استفاده از کتابخانهی نصبشدهی mpdecimal بسازید؛ به ماژول decimal مراجعه کنید (پیشفرض بله است).
اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.13: بهطور پیشفرض از کتابخانهی نصبشدهی mpdecimal استفاده میکند.
تغییر یافته در نسخهی 3.15: اگر کتابخانهی نصبشدهی mpdecimal یافت نشود، دیگر نسخهی همراه کتابخانه بهصورت ضمنی انتخاب نمیشود. تنها در پایتون 3.15 میتوان آن را همچنان بهصورت صریح با استفاده از --with-system-libmpdec=no یا --without-system-libmpdec انتخاب کرد.
منسوخ شده از نسخهی 3.13, در نسخهی 3.16 حذف خواهد شد: دیگر نسخهای از کدهای منبع کتابخانه mpdecimal همراه با پایتون 3.16 توزیع نخواهد شد.
گزینههای کامپایلری را که به دلایل امنیتی و بدون هیچ سربار عملکردی recommended by OpenSSF هستند، غیرفعال میکند. اگر این گزینه فعال نباشد، سیپایتون بر اساس گزینههای امنیتی کامپایلر و بدون هیچ کندی ساخته میشود. در صورت فعال بودن این گزینه، سیپایتون با گزینههای کامپایلری فهرستشده در ادامه ساخته نخواهد شد.
گزینههای کامپایلر زیر با --disable-safety غیرفعال میشوند:
فعال کردن گزینههای کامپایلر که به دلایل امنیتی recommended by OpenSSF شدهاند و نیازمند سربار هستند. اگر این گزینه فعال نشده باشد، سیپایتون بر اساس گزینههای امن کامپایلر که بر کارایی تأثیر میگذارند ساخته نخواهد شد. هنگامی که این گزینه فعال باشد، سیپایتون با گزینههای کامپایلر فهرستشده در زیر ساخته خواهد شد.
گزینههای کامپایلر زیر با --enable-slower-safety فعال میشوند:
-D_FORTIFY_SOURCE=3: کدهای منبع را با بررسیهای زمان کامپایل و زمان اجرا برای استفاده ناامن از libc و سرریز بافر تقویت میکند.
نوع دودویی همگانی که باید ساخته شود را مشخص کنید. این گزینه تنها زمانی معتبر است که --enable-universalsdk تنظیم شده باشد.
گزینهها:
universal2 (x86-64 و arm64)؛
32-bit (PPC و i386)؛
64-bit (PPC64 و x86-64)؛
3-way (i386، PPC و x86-64)؛
intel (i386 و x86-64)؛
intel-32 (i386);
intel-64 (x86-64);
all (PPC، i386، PPC64 و x86-64).
توجه داشته باشید که مقادیر این آیتم پیکربندی با شناسههای استفادهشده برای چرخهای دودویی همگانی (universal binary wheels) در macOS یکسان نیستند. برای جزئیات دربارهی برچسبهای سازگاری پلتفرم بستهبندی استفادهشده در macOS به راهنمای کاربر بستهبندی پایتون مراجعه کنید
کتابخانه استاندارد پایتون شامل رشتههایی است که شناخته شده است هنگام ارسال برای توزیع از طریق App Storeهای macOS و iOS، خطاهای ابزار بازرسی خودکار را ایجاد میکنند. در صورت فعال بودن، این گزینه فهرست وصلهایی را اعمال میکند که شناخته شده است سازگاری با فروشگاه برنامه را اصلاح میکنند. همچنین میتوان یک پرونده وصل سفارشی مشخص کرد. این گزینه بهطور پیشفرض غیرفعال است.
کامپایل متقاطع (cross compiling)، که با نام ساخت متقاطع (cross building) نیز شناخته میشود، میتواند برای ساخت پایتون برای معماری CPU یا پلتفرم دیگری به کار رود. کامپایل متقاطع به یک مفسر پایتون برای پلتفرم ساخت نیاز دارد. نسخهی پایتون ساخت باید با نسخهی پایتون میزبانی که بهصورت متقاطع کامپایل شده است مطابقت داشته باشد.
در بیشتر موارد، هنگام بازساخت پس از ویرایش مقداری کد یا بهروزرسانی چکاوت (checkout) خود از مخزن بالادستی، کافی است make را اجرا کنید که (طبق معناشناسی Make) هدف پیشفرض، یعنی نخستین هدف تعریفشده در Makefile، را میسازد. طبق سنت (از جمله در پروژهی سیپایتون)، این معمولاً هدف all است. اسکریپت configure یک متغیر autoconf به نام @DEF_MAKE_ALL_RULE@ را بسط میدهد تا دقیقاً توصیف کند که makeall چه هدفهایی را خواهد ساخت. سه گزینه عبارتاند از:
profile-opt (پیکربندیشده با --enable-optimizations)
profile-opt (پیکربندیشده با --enable-optimizations)
build_wasm (در صورتی که پلتفرم میزبان با wasm32-wasi* یا wasm32-emscripten مطابقت داشته باشد، انتخاب میشود)
build_wasm (در صورتی که پلتفرم میزبان با wasm32-wasi* یا wasm32-emscripten مطابقت داشته باشد، انتخاب میشود)
build_all (پیکربندیشده بدون استفادهی صریح از هیچیک از دو مورد دیگر)
بسته به جدیدترین تغییرات پروندههای منبع، Make هر هدفی (پروندههای شیء و پروندههای اجرایی) را که قدیمی تشخیص داده شود، بازسازی میکند، از جمله در صورت لزوم configure را دوباره اجرا میکند. با این حال، وابستگیهای منبع/هدف بسیار زیادند و بهصورت دستی نگهداری میشوند، بنابراین گاهی Make تمام اطلاعات لازم برای تشخیص صحیح همه هدفهایی را که باید بازسازی شوند ندارد. بسته به اینکه کدام هدفها بازسازی نشوند، ممکن است با تعدادی مشکل مواجه شوید. اگر با مشکلات ساخت یا آزمون مواجه شدید که نتوانید توضیح دیگری برایشان بیابید، makeclean&&make بیشتر مشکلات وابستگی را دور میزند، هرچند به بهای زمان ساخت طولانیتر.
برنامه python را بسازید، اما ماژولهای توسعهای کتابخانه استاندارد را نسازید. این کار پروندهای با نام platform تولید میکند که شامل یک سطر توصیفکنندهی جزئیات پلتفرم ساخت است؛ برای مثال macosx-14.3-arm64-3.12 یا linux-x86_64-3.13.
پایتون را با استفاده از بهینهسازی هدایتشده با پروفایل (PGO) بسازید. میتوانید از گزینهی --enable-optimizations در configure استفاده کنید تا این کار به هدف پیشفرض دستور make تبدیل شود (makeall یا فقط make).
بازتولید (تقریباً) همهی پروندههای تولیدشده. این پروندهها شامل (اما نه محدود به) حالتهای بایتکد، و پروندهی تولیدگر پارسر هستند. makeregen-stdlib-module-names و autoconf باید برای بقیهی پروندههای تولیدشده جداگانه اجرا شوند.
برخی از ماژولهای توسعهای C بهصورت ماژولهای توکار ساخته میشوند، مانند ماژول sys. این ماژولها با تعریف ماکروی Py_BUILD_CORE_BUILTIN ساخته میشوند. ماژولهای توکار ویژگی __file__ ندارند:
>>> importsys>>> sys<module 'sys' (built-in)>>>> sys.__file__Traceback (most recent call last):
File "<stdin>", line 1, in <module>AttributeError: module 'sys' has no attribute '__file__'
سایر ماژولهای توسعهای C بهصورت کتابخانههای پویا ساخته میشوند، مانند ماژول _asyncio. آنها با تعریف ماکرو Py_BUILD_CORE_MODULE ساخته میشوند. مثال در لینوکس x86-64:
>>> import_asyncio>>> _asyncio<module '_asyncio' from '/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'>>>> _asyncio.__file__'/usr/lib64/python3.9/lib-dynload/_asyncio.cpython-39-x86_64-linux-gnu.so'
Modules/Setup برای تولید هدفهای Makefile بهمنظور ساخت توسعههای C استفاده میشود. در ابتدای پروندهها، توسعههای C بهصورت ماژولهای توکار ساخته میشوند. توسعههایی که پس از نشانهی *shared* تعریف میشوند، بهصورت کتابخانههای پویا ساخته میشوند.
ماکروهای PyAPI_FUNC()، PyAPI_DATA() و PyMODINIT_FUNC در Include/exports.h بسته به اینکه ماکرو Py_BUILD_CORE_MODULE تعریف شده باشد یا نه، بهطور متفاوتی تعریف میشوند:
اگر Py_BUILD_CORE_MODULE تعریفشده باشد، از Py_EXPORTED_SYMBOL استفاده کنید
در غیر این صورت از Py_IMPORTED_SYMBOL استفاده کنید.
اگر ماکروی Py_BUILD_CORE_BUILTIN بهاشتباه در یک افزونهی C که بهصورت کتابخانهی اشتراکی ساخته شده است استفاده شود، تابع PyInit_xxx() آن اکسپورت نمیشود و هنگام ایمپورت، باعث بروز ImportError میشود.
CFLAGS_NODIST برای ساخت مفسر و ماژولهای توسعهای C کتابخانه استاندارد استفاده میشود. زمانی از آن استفاده کنید که یک پرچم کامپایلر پس از نصب پایتون نباید بخشی از CFLAGS باشد (gh-65320).
پرچم کامپایلر -I (برای تنظیم مسیر جستوجوی پروندههای include). پرچمهای -I از چپ به راست پردازش میشوند و هر پرچمی که در CFLAGS باشد، بر پرچمهای -I ارائهشده توسط کاربر و بسته اولویت خواهد داشت.
پرچمهای سختسازی (hardening) مانند -Werror، زیرا توزیعها نمیتوانند کنترل کنند که آیا بستههای نصبشده توسط کاربران با چنین استانداردهای بالاتری مطابقت دارند یا خیر.
مقدار متغیر LDFLAGS که به اسکریپت ./configure ارسال میشود.
از انتساب CFLAGS، LDFLAGS و غیره خودداری کنید تا کاربران بتوانند از آنها در خط فرمان برای افزودن به این مقادیر استفاده کنند، بدون اینکه مقادیر از پیش تنظیمشده را از بین ببرند.
LDFLAGS_NODIST به همان شیوهی CFLAGS_NODIST استفاده میشود. از آن زمانی استفاده کنید که یک پرچم پیونددهنده (linker flag) پس از نصب پایتون بخشی از LDFLAGSنباشد (gh-65320).
پرچم کامپایلر -L (برای تنظیم مسیر جستجوی کتابخانهها). پرچمهای -L از چپ به راست پردازش میشوند، و هر پرچم موجود در LDFLAGS بر پرچمهای -L تأمینشده از سوی کاربر و بسته اولویت خواهد داشت.
پرچمهای پیونددهندهای که برای ساخت اهداف اجرایی مانند مفسر استفاده میشوند. در صورت ارائه، PY_CORE_EXE_LDFLAGS به جای PY_CORE_LDFLAGS استفاده خواهد شد.
آخرین بهروزرسانی در نوامبر 12, 2026 (06:19 UTC).
آیا اشکالی یافتید؟
ساخته شده با Sphinx 9.1.0.
You are visitor 01402503 — GeezerVison does not store the pages you look up. Best viewed with Netscape Navigator 4.7 or Internet Explorer 6 at 800×600. No cookies required.