كيف تتصل بايثون بـ C؟

2

كيف يمكن لـ Python استدعاء مكتبة C بالضبط؟ Tensorflow ، على سبيل المثال ، أعتقد أنه مكتوب في الغالب في لغة C ، ولكن يمكن استخدامه من Python. أفكر في تنفيذ شيء من هذا القبيل في لغة البرمجة الخاصة بي (المفسرة) (مكتوبة في Go ، لكنني أفترض أنها ستكون عملية مماثلة).

ماذا يحدث عندما يستدعي برنامج Python دالة C؟ أفكر إما RPC أو DLLs ، لكن كلاهما يبدو غير مرجح.

1 إجابة

7
افضل جواب

لدى cPython طريقتان رئيسيتان للاتصال برمز C: إما عن طريق تحميل مكتبة مشتركة واستدعاء رموزها ، أو عن طريق حزم كود C كوحدات ثنائية من Python ثم استدعاءها من رمز Python كما لو كانت وحدات Python عادية ، وهي مدى الأداء العالي يتم تنفيذ الأشياء الموجودة في المكتبة القياسية - على سبيل المثال json .

تحميل مكتبة مشتركة ووظائف الاتصال منها باستخدام ctypes الوحدة النمطية تافهة إلى حد ما ، ويمكنك العثور على الكثير من الأمثلة هنا: https://docs.python.org/2/library/ctypes.html

يتطلب تعبئة شفرة C الخاصة بك كوحدة Python ثنائية الوحدة الكثير من الصفيحة والاهتمام الدقيق بالتفاصيل مثل حساب المرجع ، والمؤشرات الخالية ، وما إلى ذلك ، وموثق هنا: https://docs.python.org/2/extending/extending.html

هناك العديد من المكتبات التي تعمل على أتمتة العملية وإنشاء رمز ملزم لك. أحد الأمثلة على ذلك boost.python : https://www.boost.org/doc/libs/1_65_0/libs/python/doc/html/tutorial/index.html

:مؤلف
فوق
قائمة طعام