CMake पाइथनलिब्स को नहीं पा सकता है


14

मैं अपने ubuntu पर inria ग्रेफाइट बनाने की कोशिश कर रहा हूं जो एक वर्चुअलबॉक्स सिम्युलेटर में चल रहा है, मैं निर्देशों का पालन करता हूं, और python-devपैकेज स्थापित करता हूं, लेकिन जब मैं cmake चलाता हूं, तब भी एक त्रुटि हुई:

CMake Error at /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:108          (message):
Could NOT find PythonLibs (missing: PYTHON_LIBRARIES PYTHON_INCLUDE_DIRS)
(Required is at least version "3.2")
Call Stack (most recent call first):
 /usr/share/cmake-2.8/Modules/FindPackageHandleStandardArgs.cmake:315     (_FPHSA_FAILURE_MESSAGE)
 /usr/share/cmake-2.8/Modules/FindPythonLibs.cmake:208 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
 src/packages/OGF/gel_python3/CMakeLists.txt:11 (FIND_PACKAGE)

मैंने जाँच की /usr/lib/और पाया

tintin@tintin-VirtualBox:/usr/lib$ find . -name "libpython*"
./x86_64-linux-gnu/libpython3.4m.so.1.0
./x86_64-linux-gnu/libpython2.7.so.1.0
./x86_64-linux-gnu/libpython3.4m.a
./x86_64-linux-gnu/libpython2.7.a
./x86_64-linux-gnu/libpython3.4m.so
./x86_64-linux-gnu/libpython2.7.so
./x86_64-linux-gnu/libpython2.7.so.1
./x86_64-linux-gnu/libpython3.4m.so.1

तो क्यों cmake PythonLibs को नहीं खोज सकता है, या मुझे इससे कैसे निपटना चाहिए?

जवाबों:


21

python-devवास्तव में मेरे लिए यह स्थापित करना :

sudo apt-get install python-dev

यहाँ संकेत मिले: https://github.com/Valloric/YouCompleteMe/issues/484


2
किसी बाहरी लिंक की ओर इशारा करने के बजाय कृपया संबंधित भाग को वहां से कॉपी-पेस्ट करें ताकि यदि किसी कारणवश यह लिंक अनुपलब्ध हो तो भी सामग्री यहाँ उपलब्ध है ..
heemayl

1
खैर, समाधान चलाने के लिए है:sudo apt-get install python-dev
हेलगर

@helgar कृपया अपना उत्तर संपादित करें और उपरोक्त आदेश जोड़ें।
रॉन

3
एक छोटा नोट: पायथन 3 उपयोग के लिए apt-get install python3-devpython-devऔर python3-devरूपक हैं जो चयनित पायथन के लिए सबसे अधिक वर्तमान देव को ऊपर की ओर खींचते हैं।
rbaleksandar

यह सभी मामलों में समस्या का समाधान नहीं करता है, @ जोब द्वारा दिया गया उत्तर बताता है कि क्यों।
खनिज

10

समस्या यह है कि Ubuntu 14.04 डिफ़ॉल्ट रूप से पायथन 3.4 स्थापित करता है और Ubuntu (2.8) से CMake संस्करण केवल Python 3.3 तक खोजता है। कथन set(Python_ADDITIONAL_VERSIONS 3.4)से पहले एक वर्कअराउंड जोड़ना है find_package। ध्यान दें कि मैंने इस मुद्दे के बारे में एक बग दर्ज किया है ।

CMake 3.0 के बाद से, CMake Python 3.4 तक खोज करता है , इसलिए उस संस्करण को मैन्युअल रूप से स्थापित करना भी समस्या को ठीक करना चाहिए।


डाउनवोट के बारे में स्पष्टीकरण देना अच्छा होगा।
जॉब

3

मेरे लिए मुद्दा खराब कैश का था

rm CMakeCache.txt

पुराने 2.7 संस्करण के साथ कैश निकाला और इसे मेरे मामले में 3.2 खोजने की अनुमति दी।

मैंने जो cmake इस्तेमाल किया है

find_package(PythonInterp 3.2 REQUIRED)
find_package(PythonLibs 3.2 REQUIRED)
message(STATUS "PYTHON_LIBRARIES = ${PYTHON_LIBRARIES}")
message(STATUS "PYTHON_EXECUTABLE = ${PYTHON_EXECUTABLE}")
message(STATUS "PYTHON_INCLUDE_DIRS = ${PYTHON_INCLUDE_DIRS}")
...
include_directories(${PYTHON_INCLUDE_DIRS})

1

मैं हाल ही में Ubuntu 14.04 64-बिट के साथ एक समान मुद्दा था; जाहिर है, सीएमके आर्किटेक्चर पर निर्भर नहीं है डिफ़ॉल्ट रूप से निर्भर फ़ोल्डर स्थापित करें:

CMake constructs a set of possible installation prefixes for the package. Under
each prefix several directories are searched for a configuration file. The tables
below show the directories searched.

[...]

  <prefix>/(lib/<arch>|lib|share)/cmake/<name>*/          (U)
  <prefix>/(lib/<arch>|lib|share)/<name>*/                (U)
  <prefix>/(lib/<arch>|lib|share)/<name>*/(cmake|CMake)/  (U)

[...]

In all cases the <name> is treated as case-insensitive and corresponds to any of
the names specified (<package> or names given by NAMES). Paths with lib/<arch>
are enabled if CMAKE_LIBRARY_ARCHITECTURE is set.

(सीएमके 2.8.12 से find_package कमांड के ऑनलाइन प्रलेखन )

PythonLibs के लिए find_package कॉल करने से पहले प्रोजेक्ट रूट CMakeLists_xt में इस CMAKE_LIBRARY_ARCHITECTURE को सेट करने में एक प्रॉजेक्ट शामिल है (आपके मामले में जो src / package / OGF / gel_python3 / CMakeLists.txt को संपादित करना होगा); उदाहरण के लिए:

cmake_minimum_required(VERSION 2.8)
project(project_name)

# Check the architecture and set CMAKE_LIBRARY_ARCHITECTURE accordingly
if(UNIX)
  if(CMAKE_SIZEOF_VOID_P EQUAL 8)
    set(CMAKE_LIBRARY_ARCHITECTURE "x86_64-linux-gnu")
  endif()
endif()

find_package(PythonInterp 3.2 REQUIRED)
find_package(PythonLibs 3.2 REQUIRED)

# Rest of your file

कि मेरे मामले में काम किया।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.