वितरित करना मैं बड़ी सी ++ साझा लाइब्रेरी (libbig.so) से कुछ फ़ंक्शन लेने की कोशिश कर रहा हूं और उन्हें साइथन के माध्यम से पायथन पर बेनकाब कर रहा हूं। ऐसा करने के लिए, मुझे थोड़ा सी ++ फ़ाइल (small.cpp) मिल गया है जो साझा लाइब्रेरी की कार्यक्षमता के चारों ओर एक पतली रैपर प्रदान करता है, जिस तरह से मुझे साइथन (pysmall.pyx) के माध्यम से कॉल करना आसान हो जाता है।एक साझा लाइब्रेरी और कुछ सी कोड को एक सिंथॉन एक्सटेंशन मॉड्यूल
libbig.so -> small.cpp, small.h -> libsmall.so -> pysmall.pyx -> pysmall.cpp -> pysmall.so
मैं का निर्माण और यह एक्सटेंशन मॉड्यूल चला सकते हैं मेरी अपने कंप्यूटर: मैं libsmall.so में छोटा.cpp संकलित करता हूं, और फिर एक्सटेंशन मॉड्यूल pysmall.so बनाने के लिए setup.py में एक्सटेंशन ऑब्जेक्ट में "पुस्तकालय = ['छोटा']" कहता हूं।
अब मैं इस एक्सटेंशन मॉड्यूल को वितरित करने की कोशिश कर रहा हूं, और मुझे संसाधनों को ट्रैक करने में कठिनाई हो रही है जो एक सिंथॉन मॉड्यूल के साथ-साथ सी स्रोत और साझा पुस्तकालयों को वितरित करने के लिए setup.py सर्वोत्तम प्रथाओं का वर्णन करते हैं। मैंने "Installing Python Modules", "Distributing Python Modules", और "Distributing Cython Modules" के माध्यम से पढ़ा है। मैं समझता हूं कि एक्सटेंशन मॉड्यूल को अपने आप कैसे वितरित करना है। मैं विस्तार मॉड्यूल की निर्भरताओं को वितरित करने के सर्वोत्तम तरीके के बारे में कम निश्चित हूं।
साइथन दस्तावेज इंगित करता है कि आपको जेनरेटेड। सीपीपी फाइलों के साथ-साथ .pyx फ़ाइलों को शामिल करना चाहिए, यदि साइथन मौजूद नहीं है, फिर भी यह प्रत्येक स्थिति को सर्वोत्तम तरीके से संभालने का तरीका दिखाने के लिए कोड प्रदान नहीं करता है। यह भी उल्लेख नहीं करता है कि साझा पुस्तकालयों को वितरित करने के लिए जिस पर साइथन मॉड्यूल निर्भर करता है।
मैं pandas, lxml, pyzmq, h5py, और अधिक से setup.py स्क्रिप्ट्स के माध्यम से खुदाई कर रहा हूं, और वहां बहुत कुछ काम हो रहा है। अगर किसी के पास पॉइंटर्स या उदाहरण कोड है जो इस प्रक्रिया को तेज कर सकता है, तो मैं निश्चित रूप से इसकी सराहना करता हूं!
कृपया ध्यान दें कि नए 'setuptools' और' distutils' संस्करणों में) (मैं 'setuptools' 5.7 का उपयोग कर रहा हूं), आदेश उनके मॉड्यूल में स्थानांतरित हो गए थे। तो आप क्रमशः setuptools.command.build_ext आयात build_ext' या 'distutils' से 'करना चाहते हैं। – Midnighter
आपका पहला सेटअप.py यह है कि यह Cython.Distutils आयात करता है इससे पहले कि यह मौजूद नहीं है, इसे स्थापित करने का मौका है। – zneak
एक और विकल्प एक कोंडा पैकेज बनाना होगा, जिसे 'libbig.so' बंडल किया जा सकता है। https://conda.io/docs/user-guide/tutorials/build-postgis.html – oLas