घातक त्रुटि: पायथन.एच: ऐसी कोई फ़ाइल या निर्देशिका नहीं


1189

मैं C एक्सटेंशन फ़ाइल का उपयोग करके एक साझा लाइब्रेरी बनाने की कोशिश कर रहा हूं, लेकिन पहले मुझे नीचे दिए गए कमांड का उपयोग करके आउटपुट फ़ाइल उत्पन्न करनी होगी:

gcc -Wall utilsmodule.c -o Utilc

कमांड निष्पादित करने के बाद, मुझे यह त्रुटि संदेश मिलता है:

utilsmodule.c: 1: 20: fatal error: Python.h: ऐसी कोई फ़ाइल या निर्देशिका संकलन समाप्त नहीं हुई है।

मैंने इंटरनेट पर सभी सुझाए गए समाधानों की कोशिश की है लेकिन समस्या अभी भी मौजूद है। मुझे कोई समस्या नहीं है Python.h। मैं अपनी मशीन पर फ़ाइल का पता लगाने में कामयाब रहा।

जवाबों:


2232

ऐसा लगता है कि आपने ठीक से हेडफ़ोन फ़ाइलों और स्थिर पुस्तकालयों को अजगर देव के लिए ठीक से स्थापित नहीं किया है। सिस्टम-वाइड स्थापित करने के लिए अपने पैकेज मैनेजर का उपयोग करें।

के लिए apt( उबंटू, डेबियन ... ):

sudo apt-get install python-dev   # for python2.x installs
sudo apt-get install python3-dev  # for python3.x installs

के लिए yum( CentOS, RHEL ... ):

sudo yum install python-devel   # for python2.x installs
sudo yum install python3-devel   # for python3.x installs

के लिए dnf( फेडोरा ... ):

sudo dnf install python2-devel  # for python2.x installs
sudo dnf install python3-devel  # for python3.x installs

के लिए zypper( OpenSUSE ... ):

sudo zypper in python-devel   # for python2.x installs
sudo zypper in python3-devel  # for python3.x installs

के लिए apk( अल्पाइन ... ):

# This is a departure from the normal Alpine naming
# scheme, which uses py2- and py3- prefixes
sudo apk add python2-dev  # for python2.x installs
sudo apk add python3-dev  # for python3.x installs

के लिए apt-cyg( Cygwin ... ):

apt-cyg install python-devel   # for python2.x installs
apt-cyg install python3-devel  # for python3.x installs

21
कोशिश करें locate Python.hऔर देखें कि क्या आपके पास यह सब करने से पहले ही फाइल है। यदि आप स्थित फ़ाइल पा सकते हैं, तो ज्यादातर यह जवाब काम करेगा: stackoverflow.com/a/19344978/4954434 (यह सिर्फ एक पथ मुद्दा हो सकता है)
जितिन पावित्रान

2
@ हैक-आर और अन्य यदि आपके पास पायथन 2.6 और 2.7 स्थापित हैं, तो "पायथन-डेवेल" केवल 2.6 के लिए देव पुस्तकालयों को स्थापित करेगा। 2.7 पुस्तकालयों स्थापित करने के लिए यह मजबूर करने के लिए, का उपयोग करेंsudo yum install python27-devel
डॉक्टर जे

15
मैं 14.04 को python3.6 का उपयोग कर रहा हूं apt-get install python3.6-dev, मेरे लिए काम किया।
बिट्स

9
मेरे लिए ठीक काम किया (ubuntu 14.04) लेकिन पूर्ण संस्करण संख्या निर्दिष्ट करना पड़ाsudo apt-get install python3.6-dev
Landrykapela

17
इसी तरह से sudo apt-get install python3.7-dev
कास

344

उबंटू पर, मैं पायथन 3 चला रहा था और मुझे स्थापित करना था

sudo apt-get install python3-dev

यदि आप पायथन के एक संस्करण का उपयोग करना चाहते हैं जो python3 से जुड़ा नहीं है, तो संबंधित python3.x-dev पैकेज स्थापित करें। उदाहरण के लिए:

sudo apt-get install python3.5-dev

32
मैंने sudo apt-get install python3.4-devअपने पायथन 3.4 के लिए कमांड चलाया और इससे मेरी समस्या हल हो गई।
आरोन लेविलियर

4
@Rawrgulmuffins अच्छी तरह से यह निर्भर करता है कि आप किस अजगर का उपयोग कर रहे हैं। मेरे मामले sudo apt-get install python2.7-devमें समस्या तय हुई
रॉकसाइंस

6
मैं इस उत्तर में एक और बात जोड़ूंगा - यदि आपके पास कई पायथन 3.x संस्करण हैं, python3-devतो उस संस्करण के लिए निर्भरताएं स्थापित करेगा जो python3कमांड से जुड़ा हुआ है । इसलिए, यदि आप किसी विशिष्ट संस्करण के लिए इंस्टॉल करना चाहते हैं, तो पूर्ण संस्करण का उपयोग करें जैसे - python3.x-dev
xyres

3
यह Ubuntu 14.04 पर अजगर 3.6.3 के साथ मदद करता थाsudo apt-get install python3.6-dev
कोडेस्ट्रगल

यदि एक आभासी वातावरण के अंदर अजगर का एक संस्करण चल रहा है जो आपके सिस्टम पायथन से भिन्न है, तो यह।
सुपरशूट

73

के लिए अजगर 3.7 और उबंटू विशेष रूप से, मैं की जरूरत

sudo apt install libpython3.7-dev

। मुझे लगता है कि कुछ बिंदुओं पर नाम इससे बदल दिए गए थे pythonm.n-dev

अजगर 3.6 के लिए, इसी तरह:

sudo apt install libpython3.6-dev

6
ty: tearsofjoy:
वेलम

1
वाह। 30 मिनट की खोज और सभी तरह के सामान को स्थापित करने के बाद इस उत्तर ने वास्तव में समस्या को हल कर दिया
व्यस्कस्लाव त्सविना

!!!!! बेशक यह पायथन 3.7 और उबंटू 18.04 का उपयोग करके मेरे लिए सही समाधान था।
खलनायिका

धन्यवाद <३ <३ <३
कॉफी

यह अजगर 3.6 के लिए भी काम करता है ... लेकिनsudo apt install libpython3.6-dev
मोर्टेजा अफशरी

70

दो काम आपको करने होंगे।

डेबियन / उबंटू / टकसाल के मामले में पायथन के लिए विकास पैकेज स्थापित करें, यह कमांड के साथ किया जाता है:

sudo apt-get install python-dev

दूसरी बात यह है कि शामिल पथ में फ़ाइलें डिफ़ॉल्ट रूप से नहीं हैं, और न ही पायथन लाइब्रेरी डिफ़ॉल्ट रूप से निष्पादन योग्य के साथ जुड़ी हुई है। आपको इन झंडों को जोड़ने की आवश्यकता है (इसके अनुसार अजगर का संस्करण बदलें):

-I/usr/include/python2.7 -lpython2.7 

दूसरे शब्दों में आपका संकलन आदेश होना चाहिए:

gcc -Wall -I/usr/include/python2.7 -lpython2.7  utilsmodule.c -o Utilc 

क्या मुझे C एक्सटेंशन फ़ाइल में प्रत्येक सम्मिलित फ़ाइल के लिए झंडे जोड़ने हैं ??
मोहनद वाई।

1
यदि आप पायथन के एक और संस्करण का उपयोग कर रहे हैं, उदाहरण के लिए 3.3: sudo apt-get install python3.3-dev
FreshPow

मैं pkg-configकच्चे के बजाय उपयोग करने की सलाह देता हूं -I: stackoverflow.com/a/21531170/895245
Ciro Santilli 审查


35

फेडोरा पर पायथन 2 के लिए इसे चलाएं:

sudo dnf install python2-devel

और पायथन 3 के लिए:

sudo dnf install python3-devel

1
मिंट 18.2 (उबंटू आधारित) पर, यह था apt-get install python-dev
15

30

यदि आप पायथन के कई संस्करणों पर परीक्षण चलाने के लिए विषाक्त का उपयोग कर रहे हैं , तो आपको पायथन के प्रत्येक संस्करण के लिए पायथन देव पुस्तकालयों को स्थापित करने की आवश्यकता हो सकती है।

sudo apt-get install python2.6-dev 
sudo apt-get install python2.7-dev 
etc.

27

के लिए समाधान Cygwin

आपके द्वारा उपयोग किए जा रहे पायथन संस्करण के आधार पर आपको पैकेज स्थापित करने कीpython2-develpython3-devel आवश्यकता है या

आप Cygwin.com से 32-बिट या 64-बिट setup.exe (आपके इंस्टॉलेशन के आधार पर) का उपयोग करके इसे जल्दी से इंस्टॉल कर सकते हैं ।

उदाहरण ( setup.exeयदि आपको आवश्यकता हो तो पाइथन के प्रमुख संस्करण को संशोधित करें ):

$ setup.exe -q --packages=python3-devel

आप कमांड लाइन से Cygwin के पैकेजों को स्थापित करने के लिए कुछ और विकल्पों के लिए मेरे अन्य उत्तर की भी जांच कर सकते हैं ।


22

AWS एपीआई (सेंटो) में

yum install python27-devel

यह प्रश्न का उत्तर प्रदान नहीं करता है। किसी लेखक से स्पष्टीकरण मांगने या उसका स्पष्टीकरण देने के लिए, उनकी पोस्ट के नीचे एक टिप्पणी छोड़ दें - आप हमेशा अपने स्वयं के पोस्ट पर टिप्पणी कर सकते हैं, और एक बार आपके पास पर्याप्त प्रतिष्ठा होने पर आप किसी भी पोस्ट पर टिप्पणी करने में सक्षम होंगे ।
Wtower

2
@Wtower हाँ, यह एक उत्तर प्रदान करता है।
तेदुशे कोपेक

1
यह एक उत्तर प्रदान करता है। यद्यपि आपको अपनी आवश्यकता के लिए संस्करण को प्रतिस्थापित करना होगा।
गणेश कृष्णन

1
इसने मेरी समस्याओं को दूर करने में मदद की pip install cryptographyएक अमेज़ॅन लिनक्स उदाहरण पर।
रयान टक

यह एक सहायक उत्तर था, जबकि अमेज़ॅन लिनक्स पर अजगर-डेवेल या पाइथन 2-डेवेल को स्थापित करना संभव है, यह केवल एक ही है जो वास्तव में मेरे लिए काम करता है जब एक वर्चुअनव के अंदर पाइप स्थापित करते समय
क्रिस्टोफ़र कारल

21

मेरे लिए, इसे इस काम में बदलना:

#include <python2.7/Python.h>

मुझे फ़ाइल मिली /usr/include/python2.7/Python.h, और चूंकि /usr/includeपहले से ही शामिल पथ में है, तो python2.7/Python.hपर्याप्त होना चाहिए।

आप इसके बजाय कमांड लाइन से शामिल पथ को भी जोड़ सकते हैं - gcc -I/usr/lib/python2.7(धन्यवाद @ erm3nda)।


4
अन्य सभी उत्तर आपको कुछ स्थापित करने के लिए कहते हैं। यह एक मेरे लिए काम किया। यह शीर्ष उत्तर क्यों नहीं है?
no --zɐɹƆ

1
@ uo won'tP uzɐɹC शायद इसलिए कि यह python3 के तहत नहीं चलेगा?
लुई

इसमें gcc -I/usr/lib/python2.7 etcहार्ड कॉल के बजाय लिबिड सेट करना बेहतर है ।
m3nda

1
@ no @z। क्योंकि यह कोड को बदले बिना काम करना चाहिए। आपको अक्सर एक कोड संकलित करने की आवश्यकता होती है जो आपके स्वामित्व में न हो, उदाहरण के लिए कुछ बाहरी निर्भरता, और सबसे बुरी बात यह है कि आप उस कोड को संशोधित कर सकते हैं।
डेविड फेरेंस्की रोगोजान

@DawidFerenczy अंडरस्टॉड।
no --zɐɹƆ

19

सुनिश्चित करें कि पायथन देव फाइलें आपके ओएस के साथ आती हैं।

आपको लाइब्रेरी को हार्ड कोड नहीं करना चाहिए और इसमें पथ शामिल करने चाहिए। इसके बजाय, pkg-config का उपयोग करें, जो आपके विशिष्ट सिस्टम के लिए सही विकल्पों का उत्पादन करेगा:

$ pkg-config --cflags --libs python2 -I/usr/include/python2.7 -lpython2.7

आप इसे अपनी gcc लाइन में जोड़ सकते हैं :

gcc -Wall utilsmodule.c -o Utilc $(pkg-config --cflags --libs python2) 


14

मेरे मामले में, उबंटू में जो तय किया गया था वह पैकेजों को स्थापित करने के लिए था libpython-all-dev(या libpython3-all-devयदि आप पायथन 3 का उपयोग करते हैं)।


2
python-all-devमेरे मामले में, लेकिन काफी करीब।
डेव एस।

1
@ ओरियल नीतो, बहुत बहुत धन्यवाद। अजगर-ऑल-देव ने मेरे लिए इस मुद्दे को हल किया।
shrawan_lakhe

14

यदि आप 3.6 pththon (अभी एज) के साथ virtualenv का उपयोग करते हैं, तो मिलान अजगर 3.6 देव को स्थापित करना सुनिश्चित करें sudo apt-get install python3.6-dev, अन्यथा निष्पादन sudo python3-devअजगर p 3.3 3.3-1 स्थापित करेगा, जो समस्या को हल नहीं करेगा।


1
3.5 (.2) पर मेरे लिए बहुत अच्छा काम किया। स्पष्ट रूप से पायथन के अपने संस्करण के लिए सही देव पैकेज स्थापित करना एक अच्छी बात है।
सेठ

13

यह एक ही स्थिति नहीं है, लेकिन यह मेरे लिए भी काम करता है और अब मैं पायथॉन के साथ SWIG का उपयोग कर सकता हूं ।.5 :

मैं संकलन करने की कोशिश कर रहा था:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/

पायथन 2.7 के साथ ठीक काम करता है, मेरे संस्करण 3.5 के साथ नहीं:

मौजूद है_रूप: १४:: २१: घातक त्रुटि: पायथन। ह: नो अस्तित्वे आर्चिवो ओ एल डायरेक्टोरियो संकलन समाप्त।

मेरे Ubuntu 16.04 स्थापना में चलाने के बाद:

sudo apt-get install python3-dev  # for python3.x installs

अब मैं समस्याओं के बिना संकलन कर सकता हूँ Python3.5:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/

11

मुझे इस त्रुटि का भी सामना करना पड़ा जब मैं उबंटू में कूलप्रॉप स्थापित कर रहा था।

अजगर के साथ ubuntu 16.04 के लिए 3.6

sudo apt-get install python3.6-dev

यदि कभी यह काम नहीं करता / स्थापित करने की कोशिश करता है तो gccपरिवाद को अद्यतन करना ।

sudo apt-get install gcc

1
omg, मैंने इसके लिए SO लंबे समय तक संघर्ष किया क्योंकि मैं python3-devकई बार भाग चुका था और एक ही त्रुटि प्राप्त करता रहा, लेकिन इसके बारे में नहीं जानता था python3.6-dev!! धन्यवाद!!
ब्लेयरग 2323

10

apt-file का प्रयास करें। उस पैकेज के नाम को याद रखना मुश्किल है जहां लापता फ़ाइल रहती है। यह किसी भी पैकेज फ़ाइलों के लिए सामान्य और उपयोगी है।

उदाहरण के लिए:

root@ubuntu234:~/auto# apt-file search --regexp '/Python.h$'
pypy-dev: /usr/lib/pypy/include/Python.h
python2.7-dbg: /usr/include/python2.7_d/Python.h
python2.7-dev: /usr/include/python2.7/Python.h
python3.2-dbg: /usr/include/python3.2dmu/Python.h
python3.2-dev: /usr/include/python3.2mu/Python.h
root@ubuntu234:~/auto# 

अब आप एक विशेषज्ञ का अनुमान लगा सकते हैं कि किसको चुनना है।


10

मैं इस समस्या को हल करने और एक कमांड में .so फ़ाइल उत्पन्न करने में कामयाब रहा

gcc -shared -o UtilcS.so
-fPIC -I/usr/include/python2.7 -lpython2.7  utilsmodule.c

8

OpenSuse के साथियों के लिए वहाँ:

sudo zypper install python3-devel

8

CentOS 7 के लिए:

sudo yum install python36u-devel

मैंने कई वीएम पर python3.6 स्थापित करने के लिए निर्देशों का पालन किया: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming- पर्यावरण-पर- सेंटोस -7 और तब mod_wsgi का निर्माण करने में सक्षम था और इसे pythono3 virtualnv के साथ काम करना


5

यदि आप अमेज़न लिनक्स (RHEL पर आधारित, लेकिन यहाँ दिए गए RHEL उत्तर काम नहीं करते) पर पायथन 3.6 का उपयोग कर रहे हैं:

sudo yum install python36-devel

4

यह त्रुटि तब हुई जब मैंने Python3.6 के साथ CentOS 7 पर ctds स्थापित करने का प्रयास किया। मैंने यहां बताई गई सभी ट्रिक्स को शामिल किया yum install python34-devel। में समस्या Python.hपाई गई /usr/include/python3.4m but not in /usr/include/python3.6m। मैंने --global-optiondir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds) को शामिल करने के लिए इंगित करने के लिए उपयोग करने का प्रयास किया । यह lpython3.6mctds को लिंक करते समय नहीं मिला।

अंत में जो काम पायथन 3.6 के लिए विकास के माहौल को ठीक कर रहा था, उसमें शामिल और लिबास को सही करने की जरूरत है।

yum -y install https://dl.iuscommunity.org/pub/ius/stable/CentOS/7/x86_64/python36u-libs-3.6.3-1.ius.centos7.x86_64.rpm

Python.h को gcc के लिए आपके शामिल पथ में होना चाहिए। जो भी अजगर के संस्करण का उपयोग किया जाता है, उदाहरण के लिए यदि यह 3.6 है, तो यह /usr/include/python3.6m/Python.hआम तौर पर होना चाहिए ।


निश्चित नहीं है कि कोई -1 क्यों है, लेकिन यह आज की समस्या है क्योंकि python3.6 के लिए CentOS के साथ python36-devel उपलब्ध नहीं है। आपको इसे ऊपर के URL से इंस्टॉल करना होगा।
बाबू अरुणाचलम

4

सुनिश्चित करें कि python-devया libpython-all-devकरने के लिए (पहली बात कर रहे हैं apt) install, लेकिन अगर है कि मदद के रूप में मेरे मामला था नहीं है, मैं स्थापित करने के लिए सलाह विदेशी समारोह इंटरफ़ेस द्वारा संकुल sudo apt-get install libffi-devऔर sudo pip install cffi

यह विशेष रूप से मदद करनी चाहिए यदि आप त्रुटि को / के रूप में देखते हैं c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory


sudo pip3 install cffi (# for python3)
मैग्नस

3

यह अक्सर तब दिखाई देता है जब आप हटाने python3.5और स्थापित करने का प्रयास कर रहे होते हैं python3.6

तो कुछ संकुल को स्थापित करने के लिए python3(जो python3 -V=> python3.6) का उपयोग करते समय आवश्यक python3.5हेडर इस त्रुटि को प्रदर्शित करेगा।

स्थापित python3.6-devमॉड्यूल द्वारा हल ।


3
  1. यदि आप अपने ऑपरेटिंग सिस्टम के साथ प्रदान नहीं करते हैं तो पायथन विकास फाइलों को अपने ऑपरेटिंग सिस्टम पर स्थापित करना होगा। इस सवाल के कई जवाब असंख्य तरीकों को दिखाते हैं जो विभिन्न प्रणालियों पर प्राप्त किए जा सकते हैं।

  2. जब आपने ऐसा किया है, तो समस्या संकलक को बता रही है कि वे कहां स्थित हैं और उनके खिलाफ कैसे संकलित करें। पायथन नामक एक कार्यक्रम के साथ आता है python-config। संकलन के लिए, आपको --includesआउटपुट की आवश्यकता है और पायथन लाइब्रेरी के खिलाफ एक प्रोग्राम को जोड़ने के लिए ( --ldflagsआउटपुट को अपने प्रोग्राम में पायथन को एम्बेड करते हुए) आउटपुट। उदाहरण:

    gcc -c mypythonprogram.c $(python3-config --includes)
    gcc -o program mypythonprogram.o $(python3-config --ldflags)

python-configकार्यक्रम अजगर संस्करणों के नाम पर रखा जा सकता है - डेबियन, Ubuntu के उदाहरण के लिए इन नामित किया जा सकता है पर python3-configया python3.6-config


2

कभी-कभी अजगर-देव को स्थापित करने के बाद भी त्रुटि बनी रहती है, तो त्रुटि के लिए जांचें कि क्या वह 'जीसीसी' गायब है।

सबसे पहले https://stackoverflow.com/a/21530768/8687063 में बताए अनुसार डाउनलोड करें , फिर gcc इंस्टॉल करें

उपयुक्त के लिए (उबंटू, डेबियन ...):

sudo apt-get install gcc

यम (CentOS, RHEL ...) के लिए:

sudo yum install gcc

Dnf (फेडोरा ...) के लिए:

sudo dnf install gcc

ज़ीपर के लिए (OpenSUSE ...):

sudo zypper in gcc

एपीके (अल्पाइन ...) के लिए:

sudo apk gcc

1

इसका मतलब है कि Python.hआपके संकलक के डिफ़ॉल्ट में पथ शामिल नहीं हैं। क्या आपने इसे सिस्टम-वाइड या स्थानीय रूप से स्थापित किया है? आपका ओएस क्या है?

आप -I<path>एक अतिरिक्त निर्देशिका निर्दिष्ट करने के लिए ध्वज का उपयोग कर सकते हैं जहां आपके कंपाइलर को हेडर की तलाश करनी चाहिए। आपको संभवतः इसके साथ पालन करना होगा -L<path>ताकि gcc उस लाइब्रेरी को खोज सके जिसे आप उपयोग करने के साथ जोड़ रहे हैं -l<name>

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