2013-08-21 5 views
15

के साथ स्थापित करना मेरे पास एक boost.python प्रोजेक्ट है जिसे मैं cmake का उपयोग करके संकलित करता हूं और करता हूं। यह एक अजगर मॉड्यूल का हिस्सा है, और मैं distutils का उपयोग कर उस मॉड्यूल को स्थापित करने में सक्षम होना चाहता हूँ। मैंने here निर्देशों का पालन किया है जो एक CMakeLists.txt फ़ाइल बनाने के लिए है जो पहले साझा लाइब्रेरी को संकलित करता है, फिर setup.py सेट करता है ताकि पायथन मॉड्यूल स्थापित करने के साथ इंस्टॉल किया जा सके। हालांकि, जबकि सभी पायथन फ़ाइलों को distutils द्वारा पहचाना जाता है और निर्माण निर्देशिका में स्थानांतरित किया जाता है, साझा पुस्तकालय नहीं है, और मैं वास्तव में क्यों नहीं जानता क्यों।पायथन/सी ++ - सेमेक के साथ साझा लाइब्रेरी संकलित करना और distutils

मेरे परियोजना निर्देशिका संरचना:

  • परियोजना
    • निर्माण (अजगर distutils निर्देशिका)
    • डॉक (मॉड्यूल प्रलेखन)
    • मॉड्यूल (मुख्य मॉड्यूल निर्देशिका)
      • कोर (dir बूस्ट प्रोजेक्ट/लाइब्रेरी
        • CMakeLists.txt - साझा लाइब्रेरी
      • other_py_files (शुद्ध अजगर फ़ाइलों के कई निर्देशिकाओं)
    • CMakeLists.txt
    • setup.py.in
    • setup.py बनाता है (cmake द्वारा उत्पन्न)

मेरे setup.py.in फ़ाइल:

+०१२३५१६४१०६१
from distutils.core import setup 
setup(
    name='module', 
    version='${PACKAGE_VERSION}', 
    packages=['module', 'module.core', 'module.other_py_files'], 
    package_dir={'': '${CMAKE_CURRENT_SOURCE_DIR}'}, 
) 

मेरे CMakeLists.txt:

cmake_minimum_required (VERSION 2.6) 
project (module) 

add_subdirectory(module/core) 

find_program(PYTHON "python") 

if (PYTHON) 
    set(SETUP_PY_IN "${CMAKE_CURRENT_SOURCE_DIR}/setup.py.in") 
    set(SETUP_PY "${CMAKE_CURRENT_BINARY_DIR}/setup.py") 
    set(DEPS "${CMAKE_CURRENT_SOURCE_DIR}/pyQCD/__init__.py") 
    set(OUTPUT "${CMAKE_CURRENT_BINARY_DIR}/build/timestamp") 

    configure_file(${SETUP_PY_IN} ${SETUP_PY}) 

    add_custom_command(OUTPUT ${OUTPUT} 
    COMMAND ${PYTHON} ${SETUP_PY} build 
    COMMAND ${CMAKE_COMMAND} -E touch ${OUTPUT} 
    DEPENDS ${DEPS}) 

    add_custom_target(target ALL DEPENDS ${OUTPUT}) 

    install(CODE "execute_process(COMMAND ${PYTHON} ${SETUP_PY} install)") 

endif() 

मैंने सोचा था कि distutils साझा लाइब्रेरी एक्सटेंशन अपने आप को जोड़ने के लिए निर्देशिका बनाने चाहिए था, या मुझे लगता है कि गलत कहीं मिल गया है? (साझा लाइब्रेरी सी एपीआई (बूस्ट.pyथॉन) पर निर्मित एक आयातनीय पायथन मॉड्यूल है, इसलिए इसे सही काम करना चाहिए?)

+0

यहां सी/पायथन मॉड्यूल का एक लिंक है जो सीएमके का उपयोग करता है - https://gitlab.com/ideasman42/blender-mathutils - distutils का उपयोग सिर्फ पायथन उपसर्ग निकालने के लिए किया जाता है। * (हालांकि एक distutils setup.py भी है, जिसका उपयोग सीएमके निर्माण के लिए नहीं किया जाता है) * – ideasman42

उत्तर

9

अंत में मैंने here उत्तर का उत्तर दिया और build_ext कमांड को ओवरराइड किया। चूंकि मैं निर्माण को क्रॉस प्लेटफॉर्म बनना चाहता हूं, और चूंकि साझा लाइब्रेरी मॉड्यूल स्रोत पेड़ के अंदर है, इसलिए मैं मॉड्यूल साझा लाइब्रेरी आयात करता हूं, फ़ाइल फ़ाइल का उपयोग setup.py से साझा लाइब्रेरी का मार्ग प्राप्त करने के लिए करता है।

0

scikit-buildsetup का एक कस्टम कार्यान्वयन है जो distutils.core.Extension को प्रतिस्थापित करता है और स्रोतों को संकलित करने के लिए cmake का उपयोग करता है। नमूना परियोजनाओं की एक किस्म here मिल सकती है। यदि आप Pybind11 का उपयोग कर रहे हैं, तो here उपयोग का एक और आसान उदाहरण है।

संबंधित मुद्दे