2012-06-14 68 views
17

Gần đây tôi đã cài đặt KDevelop 4 để phát triển C++ trên Macbook Pro chạy Ubuntu 12.04 LTS.Python.h: Không có tệp hoặc thư mục nào như vậy

Tôi muốn nhúng ứng dụng Python vào mã C++ của mình. Để thực hiện điều đó, bạn cần phải bao gồm tệp tiêu đề Python.h. Vì vậy, tôi đã làm điều đó.

#include <iostream> 
#include <Python.h> 

int main(int argc, char **argv) { 
    Py_Initialize(); 
    return 0; 
} 

Tuy nhiên, trên chạy, tôi nhận được câu trả lời sau đây từ IDE:

fatal error: Python.h: No such file or directory 

Tuy nhiên, tôi thấy vấn đề sớm đủ. Tôi đã không tải xuống gói python-dev. Vì vậy, tôi đã làm điều đó. Tôi chạy một lần nữa nhưng cùng một lỗi đã có một lần nữa. Vì vậy, tôi nghĩ rằng nó phải là một vấn đề với các tập tin tiêu đề không được bao gồm bởi KDevelop. Vì vậy, tôi đã thêm thư mục có liên quan vào đường dẫn bao gồm và KDevelop ngay lập tức nhận ra rằng bằng cách loại bỏ gạch dưới màu đỏ bên dưới câu lệnh include thứ hai trong đoạn mã ở trên.

Nhưng vẫn còn, vấn đề vẫn còn. Tôi nhận được lỗi tương tự. Sẽ đánh giá cao bất kỳ trợ giúp hoặc đầu vào nào mà các bạn có thể cung cấp :-)

Cảm ơn rất nhiều.

EDIT: Một số chi tiết mà tôi đã bỏ lỡ đề cập trước đó là KDevelop đang sử dụng cmake cho dự án của tôi. Tôi đoán lý do vấn đề của tôi đang xảy ra là bởi vì cmake không biết trình biên dịch thích hợp và đường dẫn trình liên kết. Tôi sẽ đánh giá cao sự giúp đỡ trong việc thiết lập các đường dẫn chính xác cho cmake.

+0

http://stackoverflow.com/questions/4097339/missing-python-h-while-trying-to-compile-ac-extension -module – ddzialak

+0

@ddzialak - Vâng, tôi đã xem xét câu hỏi đó trước khi hỏi câu hỏi này. Lý do mà câu hỏi không giúp tôi là tệp Python.h của tôi thực sự có mặt tại /usr/include/python2.7. Tôi tự kiểm tra nó và khi tôi nhấp vào Python.h trong trình soạn thảo, nó sẽ mở tệp. –

+0

@ShubhamGoyal bạn có thể giúp tôi với điều này không? http://stackoverflow.com/questions/31577539/how-can-i-incorporate-cmake-file-when-building-with-distutils-python – mayooran

Trả lời

24

Trong CMakeLists.txt của bạn, hãy thử thêm những điều sau đây:

find_package(PythonLibs REQUIRED) 
include_directories(${PYTHON_INCLUDE_DIRS}) 
target_link_libraries(<your exe or lib> ${PYTHON_LIBRARIES}) 

Để biết chi tiết về các lệnh, hãy chạy:

cmake --help-module FindPythonLibs 
cmake --help-command find_package 
cmake --help-command include_directories 
cmake --help-command target_link_libraries 
+0

Vâng, điều này đã hiệu quả. Trên thực tế, tôi đã có nó để làm việc trước khi nhìn thấy câu trả lời của bạn và sau khi đọc rất nhiều về CMake, nhưng giải pháp là như nhau: D –

+0

Đây là liên kết đến tập tin CMakeLists.txt của tôi - http: //paste.ubuntu. com/1042894/ –

+0

@ShubhamGoyal Đẹp nhất. Trong thực tế, hãy xem CMakeLists.txt của bạn để tôi nhận thấy rằng tôi đã quên một tập hợp các dấu ngoặc trong câu trả lời ban đầu của mình! Đã sửa lỗi. – Fraser

4

Rất có thể Python.h không nằm trong đường dẫn bao gồm của hệ thống xây dựng của bạn. Bạn có thể tìm ra nơi Python.h của bạn bằng cách chạy

dpkg -L python-dev | grep Python.h 

Điều này cũng sẽ xác minh rằng gói python-dev thực sự đã cài đặt Python.h.

Tôi không có một kdevelop ở đây, nhưng hầu hết các IDE có một thiết lập ở đâu đó, nơi bạn có thể chỉ định đường dẫn bao gồm được sử dụng bởi hệ thống xây dựng, và bạn sẽ có thể thêm đường dẫn nơi Python.h nằm ở đó.

CHỈNH SỬA:

Như Nikolai ngụ ý, bạn cũng sẽ cần phải thêm đường dẫn thư viện chính xác cho giai đoạn liên kết. (Đầu ra của python-config --ldflags).

+0

Tôi đã xác nhận rằng gói python-dev đã cài đặt các tệp Python.h. Vấn đề là tôi không biết ở đâu hoặc làm thế nào để thêm các đường dẫn thư viện chính xác trong cmake. Sẽ đánh giá cao bất kỳ trợ giúp nào về mặt trận đó. Tôi là một người mới bắt đầu hoàn thành trong cmake. Lần đầu tiên tôi nghe thuật ngữ này là sau khi đăng câu hỏi này. –

10

Bạn muốn bao gồm những điều sau đây trên dòng biên dịch:

`python-config --cflags` 

và điều này trên dòng liên kết:

`python-config --ldflags` 
+0

Tôi xin lỗi nếu tôi là một noob ở đây nhưng bạn có thể xin vui lòng xây dựng trên những gì bạn có nghĩa là bởi dòng biên dịch và đường liên kết trong trường hợp này? Vì tôi đang sử dụng IDE, tôi không biên dịch và liên kết trên thiết bị đầu cuối. –

+1

IDE của bạn có cài đặt ở đâu đó để bao gồm đường dẫn, đường dẫn thư viện và cờ trình biên dịch và liên kết. Chạy các lệnh ở trên - lệnh đầu tiên cung cấp cho bạn các chỉ lệnh '-I' (bao gồm đường dẫn) và cờ trình biên dịch, lệnh thứ hai thực hiện tương tự cho trình liên kết. Đặt chúng vào các cài đặt thích hợp trong bạn IDE. –

+0

Hmm ... KDevelop đang sử dụng cmake cho dự án của tôi. Nhưng tôi chưa bao giờ sử dụng cmake trước đây và sẽ đánh giá cao một số trợ giúp trong việc thiết lập các đường dẫn ở đó. –

27
sudo apt-get install python2.7-dev 

đã làm việc cho tôi bằng "Python.h: Không có tập tin hoặc thư mục" Vấn đề

+0

Đã xác nhận vẫn đang làm việc về thử nghiệm Debian kể từ ngày 26.10.13. – timss

+0

Đây là những gì đã giúp tôi trong CentOS: 'sudo yum tìm kiếm python' để tìm gói thích hợp -devel, sau đó' sudo yum cài đặt python26-devel.x86_64' cho phiên bản Python cụ thể của tôi. –

0

Đối với người dùng Linux Ubuntu Putty thử điều này:

sudo apt-get update 
sudo apt-get install python-dev 

sau đó biên dịch nó

gcc -o check xyz.c -I/usr/include/python2.7/ -lpython2.7 

sau đó chạy nó

./check 
1

tôi giả rằng nó đã được cài đặt. Hãy tìm đường dẫn với:

find/-iname python.h 

và khi bạn đã làm như vậy, khi biên soạn thêm

-I python_h_path 
Các vấn đề liên quan