kesalahan fatal: Python.h: Tidak ada file atau direktori tersebut

1195

Saya mencoba membangun perpustakaan bersama menggunakan file ekstensi C tetapi pertama-tama saya harus menghasilkan file output menggunakan perintah di bawah ini:

gcc -Wall utilsmodule.c -o Utilc

Setelah menjalankan perintah, saya mendapatkan pesan kesalahan ini:

utilsmodule.c: 1: 20: kesalahan fatal: Python.h: Tidak ada kompilasi file atau direktori yang dihentikan.

Saya telah mencoba semua solusi yang disarankan melalui internet tetapi masalahnya masih ada. Saya tidak punya masalah dengan Python.h. Saya berhasil menemukan file di mesin saya.

Mohanad Y.
sumber

Jawaban:

2237

Sepertinya Anda belum menginstal file header dan perpustakaan statis dengan benar untuk python dev. Gunakan manajer paket Anda untuk menginstalnya di seluruh sistem.

Untuk apt( Ubuntu, Debian ... ):

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

Untuk yum( CentOS, RHEL ... ):

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

Untuk dnf( Fedora ... ):

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

Untuk zypper( openSUSE ... ):

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

Untuk apk( Alpine ... ):

# 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

Untuk apt-cyg( Cygwin ... ):

apt-cyg install python-devel   # for python2.x installs
apt-cyg install python3-devel  # for python3.x installs
wim
sumber
21
Coba locate Python.hdan lihat apakah Anda sudah memiliki file sebelum Anda melakukan semua ini. Jika Anda dapat menemukan file tersebut berada, sebagian besar jawaban ini akan berfungsi: stackoverflow.com/a/19344978/4954434 (Ini mungkin hanya masalah jalur)
Jithin Pavithran
2
@ Hack-R dan yang lainnya jika Anda menginstal Python 2.6 dan 2.7, "python-devel" hanya akan menginstal pustaka dev untuk 2.6. Untuk memaksanya menginstal 2,7 perpustakaan, gunakansudo yum install python27-devel
Doktor J
15
Saya menggunakan python3.6 pada 14,04 apt-get install python3.6-devbekerja untuk saya.
bit
9
bekerja dengan baik untuk saya (ubuntu 14.04) tetapi harus menentukan nomor versi lengkapsudo apt-get install python3.6-dev
landrykapela
17
Begitu juga dengan sudo apt-get install python3.7-dev.
kas
346

Di Ubuntu, saya menjalankan Python 3 dan saya harus menginstal

sudo apt-get install python3-dev

Jika Anda ingin menggunakan versi Python yang tidak tertaut ke python3, instal paket python3.x-dev yang terkait. Sebagai contoh:

sudo apt-get install python3.5-dev
FreshPow
sumber
32
Saya menjalankan perintah sudo apt-get install python3.4-devuntuk Python3.4 saya dan ini memecahkan masalah saya.
Aaron Lelevier
4
@Rawrgulmuffins juga tergantung pada versi python yang Anda gunakan. Dalam kasus saya sudo apt-get install python2.7-devmemperbaiki masalah
RockScience
6
Saya akan menambahkan satu hal lagi untuk jawaban ini - jika Anda memiliki beberapa versi Python 3.x, python3-devakan menginstal dependensi untuk versi yang dikaitkan dengan python3perintah. Jadi, jika Anda ingin menginstal untuk versi tertentu, gunakan versi lengkap seperti - python3.x-dev.
xyres
3
Ini membantu dengan python 3.6.3 di Ubuntu 14.04sudo apt-get install python3.6-dev
codestruggle
Jika menjalankan versi Python di dalam lingkungan virtual yang berbeda dengan sistem Anda Python, ini.
SuperShoot
76

Untuk Python 3.7 dan Ubuntu khususnya, saya perlu

sudo apt install libpython3.7-dev

. Saya pikir pada beberapa titik nama diubah dari pythonm.n-devini.

untuk Python 3.6, sama:

sudo apt install libpython3.6-dev
ijoseph
sumber
6
ty: tearofjoy:
valem
1
Wow. Setelah seperti 30 menit mencari dan menginstal semua jenis barang jawaban ini benar-benar menyelesaikan masalah
Vyacheslav Tsivina
!!!!! Tentu saja ini adalah solusi tepat bagi saya menggunakan Python 3.7 dan Ubuntu 18.04.
villamejia
terima kasih <3 <3 <3
Kopi inTime
1
ini berfungsi untuk python 3.6 juga ... tapisudo apt install libpython3.6-dev
Morteza Afshari
70

Dua hal yang harus Anda lakukan.

Instal paket pengembangan untuk Python, dalam hal Debian / Ubuntu / Mint itu dilakukan dengan perintah:

sudo apt-get install python-dev

Hal kedua adalah bahwa menyertakan file tidak secara default di path include, juga tidak perpustakaan Python terkait dengan dieksekusi secara default. Anda perlu menambahkan flag-flag ini (ganti versi Python yang sesuai):

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

Dengan kata lain perintah kompilasi Anda seharusnya:

gcc -Wall -I/usr/include/python2.7 -lpython2.7  utilsmodule.c -o Utilc 
vartec
sumber
apakah saya harus menambahkan flag untuk setiap file yang disertakan dalam file ekstensi C ??
Mohanad Y.
1
Jika Anda menggunakan versi lain dari Python, 3.3 misalnya: sudo apt-get install python3.3-dev
FreshPow
Saya akan merekomendasikan menggunakan pkg-configbukannya baku -I: stackoverflow.com/a/21531170/895245
Ciro Santilli郝海东冠状病六四事件法轮功
47

Jika Anda menggunakan Raspberry Pi:

sudo apt-get install python-dev
Maleakhi Bazar
sumber
35

di Fedora jalankan ini untuk Python 2:

sudo dnf install python2-devel

dan untuk Python 3:

sudo dnf install python3-devel
ravi.zombie
sumber
1
Pada Mint 18.2 (berbasis Ubuntu), itu apt-get install python-dev.
Menghapus
30

Jika Anda menggunakan tox untuk menjalankan tes pada beberapa versi Python, Anda mungkin perlu menginstal pustaka Python dev untuk setiap versi Python yang Anda uji.

sudo apt-get install python2.6-dev 
sudo apt-get install python2.7-dev 
etc.
Christian Long
sumber
27

Solusi untuk Cygwin

Anda perlu menginstal paket python2-develataupython3-devel , tergantung pada versi Python yang Anda gunakan.

Anda dapat menginstalnya dengan cepat menggunakan 32-bit atau 64-bit setup.exe (tergantung pada instalasi Anda) dari Cygwin.com .

Contoh (modifikasi setup.exenama file dan versi utama Python jika perlu):

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

Anda juga dapat memeriksa jawaban saya yang lain untuk beberapa opsi lagi untuk menginstal paket Cygwin dari baris perintah.

David Ferenczy Rogožan
sumber
22

Dalam AWS API (centOS) nya

yum install python27-devel
yespbs
sumber
Ini tidak memberikan jawaban untuk pertanyaan itu. Untuk mengkritik atau meminta klarifikasi dari penulis, tinggalkan komentar di bawah postingan mereka - Anda selalu dapat mengomentari posting Anda sendiri, dan begitu Anda memiliki reputasi yang cukup, Anda akan dapat mengomentari setiap posting .
Wtower
2
@ Power Ya, itu memang memberikan jawaban.
Tadeusz Kopec
1
Itu memang memberikan jawaban. Meskipun Anda harus mengganti versi untuk apa yang Anda butuhkan.
Ganesh Krishnan
1
ini membantu mengatasi masalah saya mencoba pip install cryptographypada contoh linux amazon.
Ryan Tuck
Ini adalah jawaban yang membantu, walaupun dimungkinkan untuk menginstal python-devel atau python2-devel di Amazon Linux, ini adalah satu-satunya yang benar-benar bekerja untuk saya ketika menjalankan instalasi pip di dalam virtualenv
Kristofor Carle
21

Bagi saya, mengubahnya menjadi ini berfungsi:

#include <python2.7/Python.h>

Saya menemukan file tersebut /usr/include/python2.7/Python.h, dan karena /usr/includesudah ada di path include, maka python2.7/Python.hsudah cukup.

Anda juga bisa menambahkan jalur sertakan dari baris perintah sebagai gantinya - gcc -I/usr/lib/python2.7(terima kasih @ erm3nda).

sashoalm
sumber
4
Semua jawaban lain memberitahu Anda untuk menginstal sesuatu. Yang ini berhasil untuk saya. Mengapa ini bukan jawaban teratas?
noɥʇʎԀʎzɐɹƆ
1
@ uoɥʇʎPʎzɐɹC Mungkin karena itu tidak akan berjalan di bawah python3?
Louis
Lebih baik untuk mengatur lib di gcc -I/usr/lib/python2.7 etcdaripada hardcode termasuk panggilan.
m3nda
1
@ noɥʇʎԀʎzɐɹƆ Karena seharusnya berfungsi tanpa mengubah kode. Anda sering perlu mengkompilasi kode yang tidak Anda miliki, misalnya ketergantungan eksternal, dan hal terburuk yang dapat Anda lakukan adalah memodifikasi kode itu.
David Ferenczy Rogožan
@DawidFerenczy Understod.
noɥʇʎԀʎzɐɹƆ
19

Pastikan bahwa file dev Python datang dengan OS Anda.

Anda seharusnya tidak membuat kode pustaka dan menyertakan path. Sebagai gantinya, gunakan pkg-config, yang akan menampilkan opsi yang benar untuk sistem spesifik Anda:

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

Anda dapat menambahkannya ke baris gcc Anda :

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

Instalasi AWS EC2 menjalankan python34:

sudo yum install python34-devel

parsini
sumber
14

Dalam kasus saya, apa yang diperbaiki di Ubuntu adalah menginstal paket libpython-all-dev(atau libpython3-all-devjika Anda menggunakan Python 3).

Oriol Nieto
sumber
2
python-all-devdalam kasus saya, tetapi cukup dekat.
Dave S.
1
@Oriol Nieto, Terima kasih banyak. python-all-dev juga memecahkan masalah bagi saya.
shrawan_lakhe
14

Jika Anda menggunakan virtualenv dengan 3,6 python (edge ​​sekarang), pastikan untuk menginstal python 3.6 dev yang cocok sudo apt-get install python3.6-dev, jika tidak mengeksekusi sudo python3-devakan menginstal python dev 3.3.3-1, yang tidak akan menyelesaikan masalah.

Guillaume Cisco
sumber
1
Bekerja dengan baik untuk saya pada 3,5 (.2), ​​juga. Secara eksplisit menginstal paket dev yang tepat untuk versi Python Anda adalah Good Thing.
Seth
13

Ini bukan situasi yang sama, tetapi juga berfungsi untuk saya dan sekarang saya dapat menggunakan SWIG dengan Python3.5 :

Saya mencoba mengkompilasi:

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

Dengan Python 2.7 berfungsi dengan baik, tidak dengan versi 3.5 saya:

existe_wrap.c: 147: 21: kesalahan fatal: Python.h: Tidak ada kompilasi arsip ar directorio yang diakhiri.

Setelah dijalankan di instalasi Ubuntu 16.04 saya:

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

Sekarang saya dapat mengkompilasi tanpa masalah Python3.5:

gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/
Hugo LM
sumber
11

Saya juga mengalami kesalahan ini ketika saya menginstal coolprop di ubuntu.

Untuk ubuntu 16.04 dengan python 3.6

sudo apt-get install python3.6-dev

Jika ini tidak berhasil cobalah menginstal / memperbarui gcclib.

sudo apt-get install gcc
Wreeecks
sumber
1
omg, saya berjuang dengan ini untuk waktu yang lama karena saya telah menjalankan python3-devberkali-kali dan terus mendapatkan kesalahan yang sama, tetapi tidak tahu tentang python3.6-dev!! Terima kasih!!
Blairg23
10

coba apt-file. Sulit untuk mengingat nama paket tempat file yang hilang berada. Ini generik dan berguna untuk semua file paket.

Sebagai contoh:

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# 

Sekarang Anda dapat membuat tebakan ahli untuk memilih yang mana.

Venfah Nazir
sumber
10

Saya berhasil memecahkan masalah ini dan menghasilkan file .so dalam satu perintah

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

Untuk kawan-kawan OpenSuse di luar sana:

sudo zypper install python3-devel
kmonsoor
sumber
5

Jika Anda menggunakan Python 3.6 di Amazon Linux (berdasarkan RHEL, tetapi jawaban RHEL yang diberikan di sini tidak berfungsi):

sudo yum install python36-devel
Yigal
sumber
4

Kesalahan ini terjadi ketika saya mencoba menginstal ctds pada CentOS 7 dengan Python3.6. Saya melakukan semua trik yang disebutkan di sini termasuk yum install python34-devel. Masalahnya Python.hditemukan di /usr/include/python3.4m but not in /usr/include/python3.6m. Saya mencoba menggunakan --global-optiontitik untuk memasukkan dir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds). Ini menghasilkan lpython3.6mtidak ditemukan ketika menghubungkan ctds.

Akhirnya yang berhasil adalah memperbaiki lingkungan pengembangan untuk Python3.6 perlu dikoreksi dengan include dan 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 harus berada di jalur sertakan Anda untuk gcc. Versi python mana pun yang digunakan, misalnya jika itu 3,6, maka itu harus dalam /usr/include/python3.6m/Python.hbiasanya.

Babu Arunachalam
sumber
Tidak yakin mengapa ada -1 tetapi ini merupakan masalah pada hari ini untuk python3.6 dengan CentOS karena python36-devel tidak tersedia. Anda harus menginstalnya dari URL di atas.
Babu Arunachalam
4

Tentu python-devatau libpython-all-devhal pertama yang ( apt) install, tetapi jika itu tidak membantu seperti kasus saya, saya menyarankan Anda untuk menginstal paket-paket Antarmuka Fungsi asing oleh sudo apt-get install libffi-devdan sudo pip install cffi.

Ini akan membantu terutama jika Anda melihat kesalahan sebagai / dari c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.

Sangat besar
sumber
sudo pip3 instal cffi (# for python3)
Magnus Melwin
3

Ini sering muncul ketika Anda mencoba untuk menghapus python3.5dan menginstal python3.6.

Jadi ketika menggunakan python3(yang python3 -V=> python3.6) untuk menginstal beberapa paket python3.5header yang diperlukan akan muncul kesalahan ini.

Atasi dengan menginstal python3.6-devmodul.

anak yatim
sumber
3
  1. Anda harus menginstal file pengembangan Python di sistem operasi Anda jika Python yang disertakan dengan sistem operasi Anda tidak menyertainya. Banyak jawaban pada pertanyaan ini menunjukkan berbagai cara ini dapat dicapai pada sistem yang berbeda.

  2. Ketika Anda telah melakukannya, masalahnya adalah memberitahu kompiler di mana mereka berada dan bagaimana cara mengkompilasinya. Python hadir dengan sebuah program bernama python-config. Untuk kompilasi, Anda memerlukan --includesoutput dan untuk menghubungkan suatu program dengan pustaka Python (menanamkan Python ke program Anda) --ldflagshasilnya. Contoh:

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

The python-configprogram dapat dinamai versi Python - pada Debian, Ubuntu misalnya ini dapat diberi nama python3-configatau python3.6-config.

Antti Haapala
sumber
2

Terkadang bahkan setelah menginstal python-dev kesalahan tetap ada, Periksa kesalahan apakah ada 'gcc' yang hilang.

Pertama unduh seperti yang dinyatakan dalam https://stackoverflow.com/a/21530768/8687063 , lalu instal gcc

Untuk apt (Ubuntu, Debian ...):

sudo apt-get install gcc

Untuk yum (CentOS, RHEL ...):

sudo yum install gcc

Untuk dnf (Fedora ...):

sudo dnf install gcc

Untuk zypper (openSUSE ...):

sudo zypper in gcc

Untuk apk (Alpine ...):

sudo apk gcc
HimanshuGahlot
sumber
1

Ini berarti bahwa Python.htidak ada dalam jalur sertakan default kompiler Anda. Sudahkah Anda menginstalnya ke seluruh sistem atau lokal? Apa OS kamu?

Anda bisa menggunakan -I<path>flag untuk menentukan direktori tambahan tempat kompiler Anda harus mencari header. Anda mungkin harus menindaklanjuti -L<path>sehingga gcc dapat menemukan perpustakaan yang akan Anda tautkan menggunakan -l<name>.

Kos
sumber