Autotools के साथ पाइथन सी एक्सटेंशन मॉड्यूल कैसे बनाएँ

Most of the documentation available for building Python extension modules uses distutils, but I would like to achieve this by using the appropriate python autoconf & automake macros instead.

मैं जानना चाहता हूं कि वहां एक ओपन सोर्स प्रोजेक्ट है जो करता है बिल्कुल यह मुझे लगता है कि अधिकांश में setup.py फ़ाइल पर भरोसा है। उस दृष्टिकोण का उपयोग करना काम करता है, लेकिन दुर्भाग्य से पूरे पुनर्निर्माण समाप्त होता है स्रोत पेड़ जब भी मैं मॉड्यूल स्रोत फ़ाइलों में संशोधन करता हूं।

0

2 उत्तर

All PyGTK extensions use autotools, so if the PyGTK aspects don't kill the whole thing for you, it might be worth having a look at the PyGTK source code. Additionally, here is one I wrote which is more simple.

0
जोड़ा
एक दम बढ़िया। मैं पीईजीटीके और आपकी परियोजना दोनों पर एक नज़र डालेगा। धन्यवाद!
जोड़ा लेखक Luis, स्रोत

मान लीजिए कि आपके पास src नामक निर्देशिका वाली एक प्रोजेक्ट है, तो आइओटूल का उपयोग करके पाइथन एक्सटेंशन को निर्मित और पैक करने के लिए निम्न चरणों का पालन करें:

Makefile.am फ़ाइलों को बनाएँ

सबसे पहले, आपको अपनी परियोजना की जड़ में एक मेकफ़ाइल.एम बनाना होगा, मूल रूप से (लेकिन विशेष रूप से नहीं) उपनिर्देशिकाओं को सूचीबद्ध करना जिन्हें संसाधित किया जाना चाहिए। आप इस तरह कुछ खत्म कर देंगे:

SUBDIRS = src

दूसरा कोड, src निर्देशिका के अंदर वास्तव में आपके पायथन एक्सटेंशन को संकलित करने के लिए निर्देश रखेगा। यह इस तरह दिखेगा:

myextdir = $(pkgpythondir)
myext_PYTHON = file1.py file2.py

pyexec_LTLIBRARIES = _myext.la

_myext_la_SOURCES = myext.cpp
_myext_la_CPPFLAGS = $(PYTHON_CFLAGS)
_myext_la_LDFLAGS = -module -avoid-version -export-symbols-regex initmyext
_myext_la_LIBADD = $(top_builddir)/lib/libhollow.la

EXTRA_DIST = myext.h

Config.ac लिखें

यह फ़ाइल प्रोजेक्ट की मूल निर्देशिका में बनाई जानी चाहिए और सभी पुस्तकालयों, कार्यक्रमों या किसी भी प्रकार के टूल को सूचीबद्ध करना होगा जिसे आपके प्रोजेक्ट को बनाने की आवश्यकता है, जैसे कि कंपाइलर, लिंकर, पुस्तकालय इत्यादि।

मेरे जैसे आलसी लोग, आमतौर पर इसे स्क्रैच से नहीं बनाते हैं, मैं autoscan टूल का उपयोग करना पसंद करता हूं, जो आपके द्वारा उपयोग की जा रही चीज़ों की तलाश करता है और config.scan फ़ाइल जिसे आपके वास्तविक config.ac के आधार के रूप में उपयोग किया जा सकता है।

automake को सूचित करने के लिए आपको पाइथन सामग्री की आवश्यकता होगी, आप इसे अपने config.ac में जोड़ सकते हैं:

dnl python checks (you can change the required python version bellow)
AM_PATH_PYTHON(2.7.0)
PY_PREFIX=`$PYTHON -c 'import sys ; print sys.prefix'`
PYTHON_LIBS="-lpython$PYTHON_VERSION"
PYTHON_CFLAGS="-I$PY_PREFIX/include/python$PYTHON_VERSION"
AC_SUBST([PYTHON_LIBS])
AC_SUBST([PYTHON_CFLAGS])

लपेटें

असल में, automake में एक अंतर्निहित एक्सटेंशन है जो जानता है कि पाइथन सामग्री से कैसे निपटें, आपको बस इसे अपने config.ac फ़ाइल में जोड़ना होगा और फिर इसका लाभ उठाएं यह सुविधा आपके Makefile.am में है।

PyGtk is definitely an awesome example, but it's pretty big, so maybe you will want to check another project, like Guake

0
जोड़ा