ข้อผิดพลาดร้ายแรง: Python.h: ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว


1191

ฉันพยายามสร้างไลบรารี่ที่แชร์โดยใช้ไฟล์นามสกุล C แต่ก่อนอื่นฉันต้องสร้างไฟล์เอาต์พุตโดยใช้คำสั่งด้านล่าง:

gcc -Wall utilsmodule.c -o Utilc

หลังจากรันคำสั่งฉันได้รับข้อความแสดงข้อผิดพลาดนี้:

utilsmodule.c: 1: 20: ข้อผิดพลาดร้ายแรง: Python.h: ไม่มีการยกเลิกการรวบรวมไฟล์หรือไดเรกทอรีดังกล่าว

ฉันได้ลองวิธีแก้ปัญหาที่แนะนำทั้งหมดทางอินเทอร์เน็ต แต่ปัญหายังคงมีอยู่ Python.hฉันมีปัญหากับไม่มี ฉันจัดการเพื่อค้นหาไฟล์บนเครื่องของฉัน

คำตอบ:


2233

ดูเหมือนว่าคุณยังไม่ได้ติดตั้งไฟล์ส่วนหัวและไลบรารี่แบบคงที่สำหรับ python dev ใช้ตัวจัดการแพ็กเกจของคุณเพื่อติดตั้งทั้งระบบ

สำหรับapt( Ubuntu, Debian ... ):

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( Fedora ... ):

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 (อาจเป็นเพียงปัญหาเกี่ยวกับเส้นทาง)
Jithin Pavithran

2
@ Hack-R และอื่น ๆ หากคุณติดตั้งPython 2.6 และ 2.7 แล้ว "python-devel" จะติดตั้งไลบรารี dev สำหรับ 2.6 เท่านั้น เพื่อบังคับให้ติดตั้งไลบรารี 2.7 ใช้sudo yum install python27-devel
Doktor J

15
ฉันใช้ python3.6 เมื่อ 14.04 ใช้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ในทำนองเดียวกันกับ
kas

346

บน Ubuntu ฉันใช้ Python 3 และฉันต้องติดตั้ง

sudo apt-get install python3-dev

หากคุณต้องการใช้เวอร์ชันของ Python ที่ไม่ได้เชื่อมโยงกับ python3 ให้ติดตั้งแพ็คเกจ python3.x-dev ที่เกี่ยวข้อง ตัวอย่างเช่น:

sudo apt-get install python3.5-dev

32
ฉันรันคำสั่งsudo apt-get install python3.4-devสำหรับ Python3.4 ของฉันและนี่แก้ปัญหาของฉันได้
Aaron Lelevier

4
@Rawrgulmuffins ขึ้นอยู่กับว่าคุณใช้ไพ ธ อนรุ่นไหน ในกรณีของฉันsudo apt-get install python2.7-devแก้ไขปัญหา
RockScience

6
ฉันจะเพิ่มสิ่งหนึ่งในคำตอบนี้ - ถ้าคุณมี Python 3.x หลายรุ่นpython3-devจะติดตั้งการพึ่งพาสำหรับเวอร์ชันที่เชื่อมโยงกับpython3คำสั่งนั้น ดังนั้นถ้าคุณต้องการติดตั้งสำหรับรุ่นที่เฉพาะเจาะจงให้ใช้เวอร์ชันเต็มเช่น python3.x-dev-
2560

3
สิ่งนี้ช่วยได้ด้วย python 3.6.3 บน Ubuntu 14.04sudo apt-get install python3.6-dev
codestruggle

หากใช้งานเวอร์ชันของ Python ภายในสภาพแวดล้อมเสมือนที่แตกต่างจาก Python ของระบบของคุณสิ่งนี้
SuperShoot

74

สำหรับPython 3.7และUbuntuโดยเฉพาะฉันต้องการ

sudo apt install libpython3.7-dev

. ฉันคิดว่าบางชื่อเปลี่ยนไปจากpythonm.n-devนี้

สำหรับ Python 3.6 เช่นเดียวกัน:

sudo apt install libpython3.6-dev

6
ty: tearsofjoy:
valem

1
ว้าว. หลังจากเวลาผ่านไป 30 นาทีในการค้นหาและติดตั้งสิ่งของทุกชนิดคำตอบนี้แก้ปัญหาได้จริง
Vyacheslav Tsivina

!!!!! แน่นอนว่านี่เป็นทางออกที่เหมาะสมสำหรับฉันในการใช้ Python 3.7 และ Ubuntu 18.04
villamejia

ขอบคุณ <3 <3 <3
Coffee inTime

1
มันใช้งานได้กับไพ ธ อน 3.6 เช่นกัน ... แต่sudo apt install libpython3.6-dev
Morteza Afshari

70

สองสิ่งที่คุณต้องทำ

ติดตั้งชุดพัฒนาสำหรับ Python ในกรณีของ Debian / Ubuntu / Mint มันทำด้วยคำสั่ง:

sudo apt-get install python-dev

สิ่งที่สองคือไฟล์รวมไม่ได้เป็นค่าเริ่มต้นในเส้นทางรวมและไม่มีห้องสมุด Python เชื่อมโยงกับปฏิบัติการโดยค่าเริ่มต้น คุณต้องเพิ่มการตั้งค่าสถานะเหล่านี้ (แทนที่รุ่น Python ตาม):

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

กล่าวอีกนัยหนึ่งคำสั่งการคอมไพล์ของคุณควรเป็น:

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

ฉันต้องเพิ่มการตั้งค่าสถานะสำหรับแต่ละไฟล์ที่รวมอยู่ในไฟล์นามสกุล C หรือไม่?
Mohanad Y.

1
หากคุณใช้ Python เวอร์ชันอื่นเช่น 3.3: sudo apt-get install python3.3-dev
FreshPow

ฉันขอแนะนำให้ใช้pkg-configแทน raw -I: stackoverflow.com/a/21531170/895245
Ciro Santilli 冠状病毒审查审查六四事件法轮功


35

ใน Fedora เรียกใช้สิ่งนี้สำหรับ Python 2:

sudo dnf install python2-devel

และสำหรับ Python 3:

sudo dnf install python3-devel

1
เมื่อวันที่มิ้นท์ 18.2 (อูบุนตู based) apt-get install python-devมันเป็น
Deleet

30

หากคุณใช้สารพิษในการรันการทดสอบกับ Python หลายเวอร์ชันคุณอาจต้องติดตั้ง Python dev library สำหรับ Python แต่ละเวอร์ชันที่คุณกำลังทดสอบ

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

27

ทางออกสำหรับCygwin

คุณต้องติดตั้งแพ็กเกจpython2-develหรือpython3-develขึ้นอยู่กับเวอร์ชันของ Python ที่คุณใช้

คุณสามารถติดตั้งโดยใช้32 บิตหรือ64 บิต setup.exe (ขึ้นอยู่กับการติดตั้งของคุณ) จากCygwin.com

ตัวอย่าง (แก้ไขsetup.exeชื่อไฟล์และเวอร์ชันหลักของ Python หากคุณต้องการ):

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

คุณสามารถตรวจสอบคำตอบอื่น ๆของฉันสำหรับตัวเลือกเพิ่มเติมอีกสองสามตัวเพื่อติดตั้งแพ็คเกจของ Cygwin ได้จากบรรทัดคำสั่ง


22

ใน AWS API (centOS)

yum install python27-devel

สิ่งนี้ไม่ได้ให้คำตอบสำหรับคำถาม จะวิจารณ์หรือการร้องขอคำชี้แจงจากผู้เขียนแสดงความคิดเห็นด้านล่างโพสต์ของพวกเขา - คุณสามารถแสดงความคิดเห็นในโพสต์ของคุณเองและเมื่อคุณมีเพียงพอชื่อเสียงคุณจะสามารถที่จะแสดงความคิดเห็นในโพสต์ใด
Wtower

2
@ Power ใช่มันมีคำตอบ
Tadeusz Kopec

1
มันให้คำตอบ แม้ว่าคุณจะต้องแทนที่รุ่นสำหรับสิ่งที่คุณต้องการ
พระพิฆเนศกฤษณะ

1
สิ่งนี้ช่วยแก้ไขปัญหาที่ฉันพยายามทำpip install cryptographyในอินสแตนซ์ amazon linux
Ryan Tuck

นี่เป็นคำตอบที่เป็นประโยชน์ แต่ก็เป็นไปได้ที่จะติดตั้ง python-devel หรือ python2-devel บน Amazon Linux นี่เป็นคำตอบเดียวที่ใช้งานได้จริงเมื่อฉันติดตั้ง pip ใน virtualenv
Kristofor Carle

21

สำหรับฉันการเปลี่ยนเป็นการทำงานนี้:

#include <python2.7/Python.h>

ฉันพบไฟล์/usr/include/python2.7/Python.hและเนื่องจาก/usr/includeมีอยู่ในพา ธ include แล้วpython2.7/Python.hควรมีเพียงพอ

คุณสามารถเพิ่มเส้นทางรวมจากบรรทัดคำสั่งแทน - gcc -I/usr/lib/python2.7(ขอบคุณ @ erm3nda)


4
คำตอบอื่น ๆ ทั้งหมดบอกให้คุณติดตั้งบางอย่าง อันนี้ใช้ได้สำหรับฉัน ทำไมนี่ไม่ใช่คำตอบยอดนิยม
noɥʇʎԀʎzɐɹƆ

1
@ uoɥʇʎPʎzɐɹCอาจเป็นเพราะมันไม่ทำงานภายใต้ python3 ใช่ไหม
หลุยส์

เป็นการดีกว่าหากตั้งค่า lib ที่gcc -I/usr/lib/python2.7 etcมากกว่า hardcode การเรียกรวม
m3nda

1
@ noɥʇʎԀʎzɐɹƆเพราะมันควรจะทำงานได้โดยไม่ต้องเปลี่ยนรหัส คุณมักจะต้องรวบรวมรหัสที่คุณไม่ได้เป็นเจ้าของการพึ่งพาภายนอกบางอย่างและสิ่งที่แย่ที่สุดที่คุณสามารถทำได้คือการแก้ไขรหัสนั้น
David Ferenczy Rogožan

@DawidFerenczy understod
noɥʇʎԀʎzɐɹƆ

19

ตรวจสอบให้แน่ใจว่าไฟล์ Python dev มาพร้อมกับระบบปฏิบัติการของคุณ

คุณไม่ควรเขียนโค้ดไลบรารีและพา ธ อย่างหนัก ใช้ 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

ในกรณีของฉันสิ่งที่แก้ไขใน Ubuntu คือการติดตั้งแพ็คเกจlibpython-all-dev(หรือlibpython3-all-devถ้าคุณใช้ Python 3)


2
python-all-devในกรณีของฉัน แต่ใกล้พอ
Dave S.

1
@Oriol Nieto ขอบคุณมาก python-all-dev แก้ปัญหาให้ฉันด้วย
shrawan_lakhe

14

หากคุณใช้ virtualenv ที่มี 3.6 python (edge ​​ทันที) ให้แน่ใจว่าได้ติดตั้ง python 3.6 ที่ตรงกันsudo apt-get install python3.6-devไม่เช่นนั้นการดำเนินการsudo python3-devจะติดตั้ง python dev 3.3.3-1 ซึ่งจะไม่สามารถแก้ไขปัญหาได้


1
ทำงานได้ดีสำหรับฉันในวันที่ 3.5 (.2) เช่นกัน การติดตั้งแพ็กเกจ dev ที่ถูกต้องอย่างชัดเจนสำหรับเวอร์ชั่น Python ของคุณเป็นสิ่งที่ดี
Seth

13

มันไม่ได้เป็นสถานการณ์เดียวกัน แต่ใช้งานได้สำหรับฉันและตอนนี้ฉันสามารถใช้SWIGกับPython3.5 ได้ :

ฉันพยายามรวบรวม:

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

ด้วย Python 2.7 ทำงานได้ดีไม่ใช่เวอร์ชัน 3.5 ของฉัน:

existe_wrap.c: 147: 21: ข้อผิดพลาดร้ายแรง: Python.h: ไม่มีการรวบรวมที่มีอยู่หรือการรวบรวม Directorio สิ้นสุดลง

หลังจากทำงานในการติดตั้ง 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

ฉันยังพบข้อผิดพลาดนี้เมื่อฉันติดตั้ง coolprop ใน Ubuntu

สำหรับ Ubuntu 16.04 กับ python 3.6

sudo apt-get install python3.6-dev

หากไม่ได้ผลให้ลองติดตั้ง / อัปเดตgcclib

sudo apt-get install gcc

1
อืมมฉันพยายามดิ้นรนกับเรื่องนี้นานมากเพราะฉันวิ่งมาpython3-devหลายครั้งแล้วก็พบข้อผิดพลาดเดิม แต่ไม่รู้อะไรเลยpython3.6-dev!! ขอบคุณ !!
Blairg23

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

สำหรับ CentOS 7:

sudo yum install python36u-devel

ฉันทำตามคำแนะนำที่นี่สำหรับการติดตั้ง python3.6 บน VMs หลายตัว: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming- environment-on-centos-7 และจากนั้นสามารถสร้าง mod_wsgi และทำให้มันทำงานกับ python3.6 virtualenv


5

หากคุณใช้ Python 3.6 บน Amazon Linux (อิงจาก RHEL แต่คำตอบ RHEL ที่ระบุในที่นี้ใช้ไม่ได้):

sudo yum install python36-devel

4

ข้อผิดพลาดนี้เกิดขึ้นเมื่อฉันพยายามติดตั้ง ctds บน CentOS 7 ด้วย Python3.6 yum install python34-develฉันไม่เทคนิคทั้งหมดรวมทั้งกล่าวถึงที่นี่ แต่ปัญหาก็คือพบว่าในPython.h /usr/include/python3.4m but not in /usr/include/python3.6mฉันพยายามใช้--global-optionเพื่อชี้ไปที่รวม dir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds) สิ่งนี้ส่งผลให้lpython3.6mไม่พบเมื่อเชื่อมโยง ctds

ในที่สุดสิ่งที่ทำงานได้แก้ไขสภาพแวดล้อมการพัฒนาสำหรับ Python3.6 จำเป็นต้องแก้ไขด้วยการรวมและ libs

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 ด้านบน
Babu Arunachalam

4

แน่ใจpython-devหรือlibpython-all-devเป็นสิ่งแรกที่จะ ( apt) installแต่หากไม่ได้ความช่วยเหลือเช่นกรณีของผมผมแนะนำให้คุณติดตั้งการเชื่อมต่อฟังก์ชั่นต่างประเทศแพคเกจโดยและsudo apt-get install libffi-devsudo pip install cffi

c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directoryนี้จะช่วยให้ออกมาโดยเฉพาะอย่างยิ่งถ้าคุณเห็นข้อผิดพลาดเป็น / จาก


sudo pip3 install cffi (# สำหรับ python3)
Magnus Melwin

3

มันมักจะปรากฏขึ้นเมื่อคุณพยายามที่จะลบและติดตั้งpython3.5python3.6

ดังนั้นเมื่อใช้python3(ซึ่งpython3 -V=> python3.6) เพื่อติดตั้งแพคเกจบางส่วนที่จำเป็นต้องใช้python3.5ส่วนหัวจะปรากฏข้อผิดพลาดนี้

แก้ไขโดยการติดตั้งpython3.6-devโมดูล


3
  1. คุณต้องติดตั้งไฟล์การพัฒนา Python บนระบบปฏิบัติการของคุณหาก Python ที่มาพร้อมกับระบบปฏิบัติการของคุณไม่ได้มาพร้อมกับพวกเขา คำตอบมากมายสำหรับคำถามนี้แสดงให้เห็นถึงวิธีการมากมายในระบบที่แตกต่างกัน

  2. เมื่อคุณทำเช่นนี้ปัญหาจะบอกคอมไพเลอร์ที่พวกเขาอยู่และวิธีการรวบรวมกับพวกเขา python-configงูใหญ่มาพร้อมกับโปรแกรมที่เรียกว่า สำหรับการคอมไพล์คุณต้องมี--includesเอาท์พุตและเชื่อมโยงโปรแกรมกับไลบรารี Python (ฝัง Python ในโปรแกรมของคุณ) --ldflagsเอาท์พุท ตัวอย่าง:

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

python-configโปรแกรมสามารถตั้งชื่อตามรุ่นหลาม - ใน Debian, Ubuntu ตัวอย่างเหล่านี้สามารถตั้งชื่อหรือpython3-configpython3.6-config


2

บางครั้งแม้หลังจากติดตั้ง python-dev ข้อผิดพลาดยังคงมีอยู่ตรวจสอบข้อผิดพลาดว่า 'gcc' หายไป

ดาวน์โหลดครั้งแรกตามที่ระบุไว้ในhttps://stackoverflow.com/a/21530768/8687063จากนั้นติดตั้ง gcc

สำหรับ apt (Ubuntu, Debian ... ):

sudo apt-get install gcc

สำหรับยำ (CentOS, RHEL ... ):

sudo yum install gcc

สำหรับ dnf (Fedora ... ):

sudo dnf install gcc

สำหรับ zypper (openSUSE ... ):

sudo zypper in gcc

สำหรับ apk (อัลไพน์ ... ):

sudo apk gcc

1

ซึ่งหมายความว่าไม่ได้Python.hอยู่ในเส้นทางรวมของคอมไพเลอร์ คุณได้ติดตั้งไว้ทั้งระบบหรือในเครื่อง? ระบบปฏิบัติการของคุณคืออะไร?

คุณสามารถใช้การ-I<path>ตั้งค่าสถานะเพื่อระบุไดเรกทอรีเพิ่มเติมที่คอมไพเลอร์ของคุณควรค้นหาส่วนหัว คุณอาจจะต้องมีการติดตาม-L<path>เพื่อให้ GCC -l<name>ที่สามารถหาห้องสมุดที่คุณจะได้รับการเชื่อมโยงกับการใช้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.