ایمپورت کردن ماژولها¶
-
PyObject *PyImport_ImportModule(const char *name)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
این یک دربرگیرنده در اطراف
PyImport_Import()است که بهجای PyObject*، آرگومانی از نوع const char* میگیرد.
-
PyObject *PyImport_ImportModuleEx(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist)¶
- مقدار بازگشتی: مرجع جدید.
ایمپورت کردن یک ماژول. این کار را به بهترین شکل میتوان با ارجاع به تابع توکار پایتون
__import__()توصیف کرد.مقدار بازگشتی، ارجاعی جدید به ماژول یا بستهی سطحبالا که ایمپورت شده است، یا در صورت شکست
NULLبه همراه استثنایی تنظیمشده است. مانند__import__()، مقدار بازگشتی هنگامی که زیرماژولی از یک بسته درخواست شده باشد، معمولاً بستهی سطحبالا است، مگر آنکه fromlist غیرخالی داده شده باشد.ایمپورتهای ناموفق، اشیاء ماژول ناقص را حذف میکنند، مانند
PyImport_ImportModule().
-
PyObject *PyImport_ImportModuleLevelObject(PyObject *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.7.
یک ماژول را ایمپورت میکند. این کار به بهترین شکل با ارجاع به تابع توکار پایتون
__import__()توصیف میشود، زیرا تابع استاندارد__import__()این تابع را مستقیماً فراخوانی میکند.مقدار بازگشتی، ارجاعی جدید به ماژول یا بستهی سطحبالا که ایمپورت شده است، یا در صورت شکست
NULLبه همراه استثنایی تنظیمشده است. مانند__import__()، مقدار بازگشتی هنگامی که زیرماژولی از یک بسته درخواست شده باشد، معمولاً بستهی سطحبالا است، مگر آنکه fromlist غیرخالی داده شده باشد.اضافه شده در نسخهی 3.3.
-
PyObject *PyImport_ImportModuleLevel(const char *name, PyObject *globals, PyObject *locals, PyObject *fromlist, int level)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
مشابه
PyImport_ImportModuleLevelObject()، اما نام به جای شیء یونیکد، یک رشته کدگذاریشده با UTF-8 است.تغییر یافته در نسخهی 3.3: مقادیر منفی برای level دیگر پذیرفته نمیشوند.
-
PyObject *PyImport_Import(PyObject *name)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
این یک رابط سطح بالاتر است که «تابع قلاب ایمپورت» فعلی را فراخوانی میکند (با مقدار صریح ۰ برای level، به معنای ایمپورت مطلق). این رابط، تابع
__import__()را از__builtins__موجود در سراسریهای فعلی فراخوانی میکند. این بدان معناست که ایمپورت با استفاده از هر قلاب ایمپورتی که در محیط فعلی نصب شده باشد انجام میشود.این تابع همیشه از ایمپورتهای مطلق استفاده میکند.
-
PyObject *PyImport_ReloadModule(PyObject *m)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک ماژول را بارگذاری مجدد میکند. ارجاعی جدید به ماژولِ بارگذاریمجددشده برمیگرداند، یا در صورت شکست
NULLهمراه با تنظیم یک استثنا برمیگرداند (در این حالت ماژول همچنان وجود دارد).
-
PyObject *PyImport_AddModuleRef(const char *name)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.13.
شیء ماژول متناظر با نام یک ماژول را برمیگرداند.
آرگومان name ممکن است به شکل
package.moduleباشد. ابتدا بررسی کنید که آیا ماژولی در دیکشنری ماژولها وجود دارد یا نه، و اگر وجود ندارد، یک ماژول جدید ایجاد کرده و آن را در دیکشنری ماژولها درج کنید.در صورت موفقیت، یک strong reference به ماژول برمیگرداند. در صورت شکست،
NULLرا همراه با یک استثنای تنظیمشده برمیگرداند.نام ماژول name از UTF-8 کدگشایی میشود.
این تابع ماژول را بارگذاری یا ایمپورت نمیکند؛ اگر ماژول از قبل بارگذاری نشده باشد، یک شیء ماژول خالی دریافت خواهید کرد. برای ایمپورت کردن یک ماژول، از
PyImport_ImportModule()یا یکی از انواع آن استفاده کنید. ساختارهای بستهای که نام نقطهدارِ name بر آنها دلالت میکند، اگر از قبل وجود نداشته باشند ایجاد نمیشوند.اضافه شده در نسخهی 3.13.
-
PyObject *PyImport_AddModuleObject(PyObject *name)¶
- مقدار بازگشتی: مرجع امانتی. قسمتی از ABI پایدار از نسخهی 3.7.
مشابه
PyImport_AddModuleRef()، اما یک borrowed reference برمیگرداند و name یک شیءstrپایتون است.اضافه شده در نسخهی 3.3.
-
PyObject *PyImport_AddModule(const char *name)¶
- مقدار بازگشتی: مرجع امانتی. قسمتی از ABI پایدار.
مشابه
PyImport_AddModuleRef()است، اما یک borrowed reference برمیگرداند.
-
PyObject *PyImport_ExecCodeModule(const char *name, PyObject *co)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
با دریافت نام یک ماژول (احتمالاً به شکل
package.module) و یک شیء کد که از یک پرونده بایتکد پایتون خوانده شده یا از تابع توکارcompile()به دست آمده است، ماژول را بارگذاری میکند. یک ارجاع جدید به شیء ماژول برمیگرداند، یا در صورت وقوع خطا،NULLرا همراه با یک استثنای تنظیمشده برمیگرداند. name در موارد خطا ازsys.modulesحذف میشود، حتی اگر name هنگام ورود بهPyImport_ExecCodeModule()از قبل درsys.modulesموجود بوده باشد. باقی گذاشتن ماژولهایی که مقداردهی اولیهشان کامل نشده است درsys.modulesخطرناک است، زیرا ایمپورتهای چنین ماژولهایی هیچ راهی برای دانستن این موضوع ندارند که شیء ماژول در وضعیتی ناشناخته (و احتمالاً نسبت به مقاصد نویسندهی ماژول آسیبدیده) قرار دارد.__spec__و__loader__ماژول، در صورتی که از قبل تنظیمنشده باشند، با مقادیر مناسب تنظیم خواهند شد. بارگذار مشخصه به__loader__ماژول (در صورت تنظیم بودن) و در غیر این صورت به نمونهای ازSourceFileLoaderتنظیم خواهد شد.The module's
__file__attribute will be set to the code object'sco_filename.این تابع در صورتی که ماژول قبلاً ایمپورت شده باشد، آن را بازبارگذاری میکند. برای روش موردنظرِ بازبارگذاری یک ماژول،
PyImport_ReloadModule()را ببینید.اگر name به نامی نقطهگذاریشده به شکل
package.moduleاشاره کند، هر ساختار بستهای که از قبل ایجاد نشده باشد، همچنان ایجاد نخواهد شد.همچنین ببینید
PyImport_ExecCodeModuleEx()وPyImport_ExecCodeModuleWithPathnames().تغییر یافته در نسخهی 3.12: The setting of
__cached__and__loader__is deprecated. SeeModuleSpecfor alternatives.تغییر یافته در نسخهی 3.15: The
__cached__attribute is no longer set.
-
PyObject *PyImport_ExecCodeModuleEx(const char *name, PyObject *co, const char *pathname)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
مانند
PyImport_ExecCodeModule()، اما اگر مسیرنام غیرNULLباشد، ویژگی__file__شیء ماژول به مسیرنام تنظیم میشود.همچنین
PyImport_ExecCodeModuleWithPathnames()را ببینید.
-
PyObject *PyImport_ExecCodeModuleObject(PyObject *name, PyObject *co, PyObject *pathname, PyObject *cpathname)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.7.
Like
PyImport_ExecCodeModuleEx(), but the path to any compiled file via cpathname is used appropriately when non-NULL. Of the three functions, this is the preferred one to use.اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.12: Setting
__cached__is deprecated. SeeModuleSpecfor alternatives.تغییر یافته در نسخهی 3.15: The
__cached__attribute no longer set.
-
PyObject *PyImport_ExecCodeModuleWithPathnames(const char *name, PyObject *co, const char *pathname, const char *cpathname)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
مانند
PyImport_ExecCodeModuleObject()، اما name، pathname و cpathname رشتههای کدگذاریشده با UTF-8 هستند. اگر pathname برابرNULLقرار داده شده باشد، تلاشهایی نیز برای تعیین مقدار pathname از روی cpathname صورت میگیرد.اضافه شده در نسخهی 3.2.
تغییر یافته در نسخهی 3.3: اگر تنها مسیر بایتکد ارائهشده باشد، از
imp.source_from_cache()برای محاسبهی مسیر منبع استفاده میکند.تغییر یافته در نسخهی 3.12: دیگر از ماژول حذفشده
impاستفاده نمیکند.
-
long PyImport_GetMagicNumber()¶
- قسمتی از ABI پایدار.
عدد جادویی پروندههای بایتکد پایتون (که با نام پروندهی
.pycنیز شناخته میشود) را برمیگرداند. عدد جادویی باید در چهار بایت نخست پروندهی بایتکد، با ترتیب بایت کوچکاندیان، موجود باشد. در صورت خطا-1را برمیگرداند.تغییر یافته در نسخهی 3.3: بازگشت مقدار
-1در صورت شکست.
-
const char *PyImport_GetMagicTag()¶
- قسمتی از ABI پایدار.
رشته برچسب جادویی (magic tag) را برای نام پروندههای بایتکد پایتون با قالب PEP 3147 برمیگرداند. به خاطر داشته باشید که مقدار
sys.implementation.cache_tagمعتبر است و باید بهجای این تابع از آن استفاده شود.اضافه شده در نسخهی 3.2.
-
PyObject *PyImport_GetModuleDict()¶
- مقدار بازگشتی: مرجع امانتی. قسمتی از ABI پایدار.
دیکشنری مورد استفاده برای مدیریت ماژولها را برمیگرداند (که با نام
sys.modulesنیز شناخته میشود). توجه داشته باشید که این یک متغیر بهازای هر مفسر است.
-
PyObject *PyImport_GetModule(PyObject *name)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار از نسخهی 3.8.
ماژول از پیش ایمپورتشده با نام دادهشده را برمیگرداند. اگر ماژول هنوز ایمپورت نشده باشد،
NULLبرمیگرداند اما خطایی تنظیم نمیکند. اگر جستجو ناموفق باشد،NULLبرمیگرداند و خطایی تنظیم میکند.اضافه شده در نسخهی 3.7.
-
PyObject *PyImport_GetImporter(PyObject *path)¶
- مقدار بازگشتی: مرجع جدید. قسمتی از ABI پایدار.
یک شیء یابنده برای ورودی path از
sys.path/pkg.__path__برمیگرداند، که ممکن است آن را از دیکشنریsys.path_importer_cacheواکشی کند. اگر هنوز نهانسازی نشده باشد،sys.path_hooksرا پیمایش میکند تا قلابی پیدا شود که بتواند ورودی مسیر را مدیریت کند. اگر هیچ قلابی نتواند،Noneبرمیگرداند؛ این به فراخوانکنندهی ما میگوید که path based finder نتوانسته است یابندهای برای این ورودی مسیر پیدا کند. نتیجه را درsys.path_importer_cacheنهانسازی میکند. یک ارجاع جدید به شیء یابنده برمیگرداند.
-
int PyImport_ImportFrozenModuleObject(PyObject *name)¶
- قسمتی از ABI پایدار از نسخهی 3.7.
یک ماژول فریزشده با نام name را بارگذاری میکند. در صورت موفقیت مقدار
1، اگر ماژول یافت نشود مقدار0و اگر مقداردهی اولیه شکست بخورد مقدار-1به همراه استثنای تنظیمشده برمیگرداند. برای دسترسی به ماژول ایمپورتشده پس از بارگذاری موفق، ازPyImport_ImportModule()استفاده کنید. (توجه داشته باشید که این نامگذاری نادرست است --- این تابع در صورتی که ماژول قبلاً ایمپورتشده باشد، آن را مجدداً بارگذاری میکند.)اضافه شده در نسخهی 3.3.
تغییر یافته در نسخهی 3.4: ویژگی
__file__دیگر بر روی ماژول تنظیم نمیشود.
-
int PyImport_ImportFrozenModule(const char *name)¶
- قسمتی از ABI پایدار.
مشابه
PyImport_ImportFrozenModuleObject()است، اما نام به جای شیء یونیکد، یک رشته کدگذاریشده با UTF-8 است.
-
struct _frozen¶
این تعریف نوع ساختار برای توصیفگرهای ماژول فریزشده است، همانطور که توسط ابزار freeze تولید میشود (به
Tools/freeze/در توزیع سورس پایتون مراجعه کنید). تعریف آن که درInclude/import.hآمده است، چنین است:struct _frozen { const char *name; const unsigned char *code; int size; bool is_package; };
تغییر یافته در نسخهی 3.11: فیلد جدید
is_packageنشان میدهد که ماژول یک بسته است یا خیر. این کار جایگزین تنظیم فیلدsizeبه مقدار منفی میشود.
-
const struct _frozen *PyImport_FrozenModules¶
این اشارهگر برای اشاره به آرایهای از رکوردهای
_frozenمقداردهی اولیه میشود که با رکوردی پایان مییابد که تمام اعضای آنNULLیا صفر هستند. هنگامی که یک ماژول فریزشده ایمپورت میشود، در این جدول جستجو میشود. کد شخص ثالث میتواند با این اشارهگر ترفندهایی بزند تا مجموعهای از ماژولهای فریزشده که بهصورت پویا ایجاد شدهاند فراهم کند.
-
int PyImport_AppendInittab(const char *name, PyObject *(*initfunc)(void))¶
- قسمتی از ABI پایدار.
یک ماژول تکی را به جدول موجود ماژولهای توکار اضافه میکند. این تابع یک پوشش کمکی حول
PyImport_ExtendInittab()است که در صورتی که نتوان جدول را گسترش داد، مقدار-1را برمیگرداند. ماژول جدید را میتوان با نام name ایمپورت کرد و از تابع initfunc به عنوان تابع مقداردهی اولیهای که در نخستین تلاش برای ایمپورت فراخوانی میشود، استفاده میکند. این تابع باید پیش ازPy_Initialize()فراخوانی شود.
-
struct _inittab¶
ساختاری که یک ورودی واحد در فهرست ماژولهای توکار را توصیف میکند. برنامههایی که پایتون را تعبیه میکنند میتوانند از آرایهای از این ساختارها همراه با
PyImport_ExtendInittab()برای فراهم کردن ماژولهای توکار اضافی استفاده کنند. این ساختار از دو عضو تشکیل شده است:-
const char *name¶
نام ماژول، بهصورت یک رشته کدگذاریشده با اسکی.
-
PyObject *(*initfunc)(void)¶
تابع مقداردهی اولیه برای ماژولی که بهصورت توکار در مفسر ساختهشده است.
Note that the inittab uses "
PyInit" initialization functions; there is currently no way to include "PyModExport_" export hooks.
-
const char *name¶
-
int PyImport_ExtendInittab(struct _inittab *newtab)¶
مجموعهای از ماژولها را به جدول ماژولهای توکار اضافه میکند. آرایه newtab باید با یک ورودی نشانگر پایان یابد که برای فیلد
nameمقدارNULLرا در بر دارد؛ ارائهنکردن مقدار نشانگر میتواند به خطای حافظه منجر شود. در صورت موفقیت0و در صورتی که حافظه کافی برای گسترش جدول داخلی تخصیص داده نشود،-1برمیگرداند. در صورت شکست، هیچ ماژولی به جدول داخلی اضافه نمیشود. این باید پیش ازPy_Initialize()فراخوانی شود.اگر پایتون چندین بار مقداردهی اولیه شود،
PyImport_AppendInittab()یاPyImport_ExtendInittab()باید پیش از هر مقداردهی اولیه پایتون فراخوانی شوند.
-
struct _inittab *PyImport_Inittab¶
جدول ماژولهای توکار مورد استفاده در راهاندازی پایتون. آن را مستقیماً به کار نبرید؛ بهجای آن از
PyImport_AppendInittab()وPyImport_ExtendInittab()استفاده کنید.
-
PyObject *PyImport_ImportModuleAttr(PyObject *mod_name, PyObject *attr_name)¶
- مقدار بازگشتی: مرجع جدید.
ماژول mod_name را ایمپورت کنید و ویژگی attr_name آن را دریافت کنید.
نامها باید شیءهای
strپایتون باشند.تابع کمکی که
PyImport_Import()وPyObject_GetAttr()را با هم ترکیب میکند. برای مثال، اگر ماژول یافت نشود میتواندImportErrorو اگر ویژگی وجود نداشته باشد میتواندAttributeErrorرا پرتاب کند.اضافه شده در نسخهی 3.14.
-
PyObject *PyImport_ImportModuleAttrString(const char *mod_name, const char *attr_name)¶
- مقدار بازگشتی: مرجع جدید.
مشابه
PyImport_ImportModuleAttr()است، اما نامها بهجای اشیاءstrپایتون، رشتههای کدگذاریشده با UTF-8 هستند.اضافه شده در نسخهی 3.14.
-
PyImport_LazyImportsMode PyImport_GetLazyImportsMode()¶
Gets the current lazy imports mode.
اضافه شده در نسخهی 3.15.
-
PyObject *PyImport_GetLazyImportsFilter()¶
Return a strong reference to the current lazy imports filter, or
NULLif none exists. This function always succeeds.اضافه شده در نسخهی 3.15.
-
int PyImport_SetLazyImportsMode(PyImport_LazyImportsMode mode)¶
مشابه
PyImport_ImportModuleAttr()است، اما نامها بهجای اشیاءstrپایتون، رشتههای کدگذاریشده با UTF-8 هستند.This function always returns
0.اضافه شده در نسخهی 3.15.
-
int PyImport_SetLazyImportsFilter(PyObject *filter)¶
Sets the current lazy imports filter. The filter should be a callable that will receive
(importing_module_name, imported_module_name, [fromlist])when an import can potentially be lazy. Theimported_module_namevalue is the resolved module name, solazy from .spam import eggspassespackage.spam. The callable must returnTrueif the import should be lazy andFalseotherwise.Return
0on success and-1with an exception set otherwise.اضافه شده در نسخهی 3.15.
-
type PyImport_LazyImportsMode¶
Enumeration of possible lazy import modes.
-
enumerator PyImport_LAZY_NORMAL¶
Respect the
lazykeyword in source code. This is the default mode.
-
enumerator PyImport_LAZY_ALL¶
Make all imports lazy by default.
اضافه شده در نسخهی 3.15.
-
enumerator PyImport_LAZY_NORMAL¶
-
PyObject *PyImport_CreateModuleFromInitfunc(PyObject *spec, PyObject *(*initfunc)(void))¶
This function is a building block that enables embedders to implement the
create_module()step of custom static extension importers (e.g. of statically-linked extensions).spec must be a
ModuleSpecobject.initfunc must be an initialization function, the same as for
PyImport_AppendInittab().On success, create and return a module object. This module will not be initialized; call
PyModule_Exec()to initialize it. (Custom importers should do this in theirexec_module()method.)On error, return NULL with an exception set.
اضافه شده در نسخهی 3.15.