2015-12-17 11 views
12

निर्दिष्ट ऐसा लगता है कि cmdclass build_ext करने के लिए सेट के साथ distutils.core से डिफ़ॉल्ट सेटअप द्वारा, वर्तमान कार्यशील निर्देशिका में एक cpp या ग फ़ाइल संकलित करता है। क्या यह निर्धारित करने का कोई तरीका है कि जेनरेट किए गए सी कोड को कहां लिखा गया है? अन्यथा, जेनरेट कोड के साथ एक भंडार बिखराया जाएगा।cython आउटपुट फ़ाइल

उदाहरण के लिए इस फ़ाइल को setup.py वर्तमान कार्यशील निर्देशिका के लिए एक फ़ाइल example.c लिखेंगे:

from distutils.core import setup 
from Cython.Build import cythonize 

setup(
     ext_modules = cythonize("example.pyx")) 

उत्तर

7

आप Cythonize

# rest of file as before 
setup(
     ext_modules = cythonize("example.pyx", 
           build_dir="build")) 

ऊपर कोड के लिए विकल्प build_dir="directory name" पारित कर सकते हैं होगा निर्देशिका "का निर्माण" (जो समझ में आता है, के बाद से डिफ़ॉल्ट रूप से यह जहां distutils अस्थायी वस्तु फ़ाइलों डालता है और इसके आगे जब यह निर्माण है) में उत्पन्न ग फ़ाइलें डाल दिया।


मेरे मूल जवाब working, नहीं build_dir था। उनका कहना है कि जो अब सही प्रतीत हो रहा है के लिए @ArthurTacca के लिए धन्यवाद।

+1

सही विकल्प हो रहा है

यह, किसी दूसरे स्थान पर निर्माण निम्नलिखित तरीके से अजगर आह्वान करने के लिए प्राप्त करने के लिए "build_dir" "काम नहीं कर रहा"। शायद यह साइथन के हाल के संस्करण में बदल गया। अन्य निर्माण फाइलों के साथ टकरा से बचने के लिए, यह शायद सबसे अच्छा है बस का उपयोग नहीं "का निर्माण"। "बिल्ड/साइथन" जैसी उपनिर्देशिका बेहतर होगी। –

+0

एक नज़र में आप सही होने के लिए लग रही है - धन्यवाद। जिथब पर कोड देखकर मैं नहीं देख सकता कि यह 2015 से कहां बदल गया है, इसलिए कौन जानता है कि मुझे यह कहां से मिला (लेकिन मुझे लगता है कि यह उस समय काम करना चाहिए ...)। एक बार मैंने पुष्टि की है कि यह काम करता है, मैं इसे अपडेट कर दूंगा। – DavidW

3

एक एक्सटेंशन आरंभ के बाद, पैरामीटर अस्थायी निर्देशिका में ग बनाने के लिए सेट किया जा सकता।

module = Extension("temp", "temp.pyx") 
module.cython_c_in_temp = True 
+0

मुझे लगता है कि यह मेरे उत्तर से थोड़ा बेहतर समाधान है। – DavidW

1

आपका setup.py ठीक है।

python setup.py build_ext --build-lib <build directory> 

मैं निम्नलिखित नियम बनाने का उपयोग इस स्वचालित करने के लिए:

python_lib_dir=src/lib 

cython_output = $(patsubst $(python_lib_dir)/%.pyx,$(python_lib_dir)/%.so, $(shell find $(python_lib_dir) -name '*.pyx')) 

$(cython_output):%.so:%.pyx  
    python setup.py build_ext --build-lib $(python_lib_dir) 
संबंधित मुद्दे