ölümcül hata: Python.h: Böyle bir dosya veya dizin yok


1192

Bir C uzantısı dosyası kullanarak paylaşılan bir kütüphane oluşturmaya çalışıyorum ama önce aşağıdaki komutu kullanarak çıktı dosyası oluşturmak zorunda:

gcc -Wall utilsmodule.c -o Utilc

Komutu uyguladıktan sonra şu hata iletisini alıyorum:

utilsmodule.c: 1: 20: ölümcül hata: Python.h: Böyle bir dosya veya dizin derlemesi sonlandırılmadı.

Tüm önerilen çözümleri internet üzerinden denedim ama sorun hala var. İle bir sorunum yok Python.h. Dosyayı makinemde bulmayı başardım.

Yanıtlar:


2234

Görünüşe göre python dev için başlık dosyalarını ve statik kitaplıkları düzgün yüklemediniz. Sistem genelinde yüklemek için paket yöneticinizi kullanın.

İçin apt( Ubuntu, Debian ... ):

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

İçin yum( CentOS, RHEL ... ):

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

İçin dnf( Fedora ... ):

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

İçin zypper( openSUSE ... ):

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

İçin 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

İçin apt-cyg( Cygwin ... ):

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

21
locate Python.hTüm bunları yapmadan önce dosyaya sahip olup olmadığınızı görün ve deneyin .
Bulunan

2
@ Hack-R ve diğerleri Python 2.6 ve 2.7 yüklüyse, "python-devel" yalnızca 2.6 için dev kütüphanelerini kuracaktır. 2.7 kütüphaneyi kurmaya zorlamak için şunu kullanınsudo yum install python27-devel
Doktor J

15
14.04 tarihinde python3.6 kullanıyorum apt-get install python3.6-devbenim için çalıştı.
bit

9
benim için iyi çalıştı ( sudo apt-get install python3.6-dev
Ubuntu 14.04

17
Aynı şekilde sudo apt-get install python3.7-dev.
kas

346

Ubuntu'da Python 3 çalıştırıyordum ve yüklemem gerekiyordu

sudo apt-get install python3-dev

Python3'e bağlı olmayan bir Python sürümünü kullanmak istiyorsanız, ilişkili python3.x-dev paketini yükleyin. Örneğin:

sudo apt-get install python3.5-dev

32
sudo apt-get install python3.4-devPython3.4 için komutu çalıştırdım ve bu sorunumu çözdü.
Aaron Lelevier

4
@Rawrgulmuffins, hangi python sürümünü kullandığınıza bağlıdır. Benim durumumda sudo apt-get install python2.7-devsorun giderildi
RockScience

6
Bu cevaba bir şey daha ekleyeceğim - birden fazla Python 3.x sürümünüz varsa, komuta python3-devbağlı olan bu sürüm için bağımlılıklar yükleyecektir python3. Bu nedenle, belirli bir sürüm için yüklemek istiyorsanız, - gibi tam sürümü kullanın python3.x-dev.
xyres

3
Bu Ubuntu sudo apt-get install python3.6-dev
14.04

Python'un bir sürümünü sistem Python'unuzdan farklı bir sanal ortamda çalıştırıyorsanız, bu.
SuperShoot

75

İçin Python 3.7 ve Ubuntu özellikle ihtiyacım

sudo apt install libpython3.7-dev

. Sanırım bazı noktalarda isimleri bundan değiştirildi pythonm.n-dev.

Python 3.6 için benzer şekilde:

sudo apt install libpython3.6-dev

6
ty: tearsofjoy:
valem

1
vay. 30 dakika gibi arama ve her türlü şey yükledikten sonra bu cevap aslında sorunu çözdü
Vyacheslav Tsivina

!!!!! Tabii ki bu benim için Python 3.7 ve Ubuntu 18.04 kullanarak doğru çözümdü.
villamejia

teşekkürler <3 <3 <3
Kahve inTime

1
3.6 python için de çalışıyor ... amasudo apt install libpython3.6-dev
Morteza Afshari

70

Yapmanız gereken iki şey var.

Debian / Ubuntu / Mint durumunda şu komutla Python için geliştirme paketi yükleyin:

sudo apt-get install python-dev

İkinci şey, içerme dosyalarının içerme yolunda varsayılan olarak olmaması veya Python kitaplığının varsayılan olarak yürütülebilir dosya ile bağlantılı olmasıdır. Bu bayrakları eklemeniz gerekir (Python'un sürümünü buna göre değiştirin):

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

Başka bir deyişle, derleme komutunuz şu şekilde olmalıdır:

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

C dosyasında bulunan her dosya için bayrak eklemek zorunda mıyım?
Mohanad Y.

1
Python'un başka bir sürümünü kullanıyorsanız, örneğin 3.3: sudo apt-get install python3.3-dev
FreshPow



35

Fedora'da bunu Python 2 için çalıştırın:

sudo dnf install python2-devel

ve Python 3 için:

sudo dnf install python3-devel

1
Mint 18.2'de (Ubuntu tabanlı) öyleydi apt-get install python-dev.
Deleet

30

Testleri Python'un birden çok sürümünde çalıştırmak için tox kullanıyorsanız , test ettiğiniz her Python sürümü için Python dev kütüphanelerini kurmanız gerekebilir.

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

27

Cygwin için çözüm

Paketi python2-develveyapython3-devel kullandığınız Python sürümüne bağlı olarak yüklemeniz gerekir .

Cygwin.com'dan 32 bit veya 64 bit setup.exe (kurulumunuza bağlı olarak) kullanarak hızlı bir şekilde kurabilirsiniz .

Örnek ( setup.exegerekirse dosya adını ve Python'un ana sürümünü değiştirin ):

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

Cygwin paketlerini komut satırından yüklemek için birkaç seçenek için diğer cevabımı da kontrol edebilirsiniz .


22

AWS API'sında (centOS)

yum install python27-devel

Bu soruya bir cevap sağlamaz. Bir yazardan eleştiri veya açıklama istemek için gönderilerinin altına bir yorum bırakın - her zaman kendi yayınlarınıza yorum yapabilirsiniz ve yeterli bir üne sahip olduğunuzda herhangi bir yazı hakkında yorum yapabilirsiniz .
Wtower

2
@Wtower Evet, bir cevap veriyor.
Tadeusz Kopec

1
Bir cevap veriyor. Gereksinim duyduğunuz sürümü değiştirmek zorunda kalmanıza rağmen.
Ganesh Krishnan

1
Bu pip install cryptography, Amazon linux örneğinde denediğim sorunlarımın üstesinden gelmeye yardımcı oldu .
Ryan Tuck

Amazon Linux üzerinde piton-devel ya python2-devel, bu bir virtualenv içine yüklemek bir pip çalıştırırken aslında benim için çalıştı tek yüklemek mümkün iken bu yararlı bir cevap oldu
Kristofor Carle'ye

21

Benim için bunu değiştirmek işe yaradı:

#include <python2.7/Python.h>

Dosyayı buldum /usr/include/python2.7/Python.hve /usr/includezaten içerme yolunda python2.7/Python.holduğu için yeterli olmalı.

Komut satırından içerme yolunu da ekleyebilirsiniz - gcc -I/usr/lib/python2.7(teşekkürler @ erm3nda).


4
Diğer tüm yanıtlar size bir şey yüklemenizi söyler. Bu benim için çalıştı. Bu neden en iyi cevap değil?
noɥʇʎԀʎzɐɹƆ

1
@ uoɥʇʎPʎzɐɹC Belki de python3 altında çalışmaz?
Louis

gcc -I/usr/lib/python2.7 etcİçerme çağrılarını sabit kodlamak yerine lib'i ayarlamak daha iyidir.
m3nda

1
@ noɥʇʎԀʎzɐɹƆ Çünkü kodu değiştirmeden çalışması gerekir. Genellikle size ait olmayan bir kodu derlemeniz gerekir, örneğin bazı dış bağımlılıklar ve yapabileceğiniz en kötü şey bu kodu değiştirmektir.
David Ferenczy Rogožan

@DawidFerenczy Understod.
noɥʇʎԀʎzɐɹƆ

19

Python dev dosyalarının işletim sisteminizle birlikte geldiğinden emin olun.

Kütüphaneyi kodlamamalı ve yolları eklememelisiniz. Bunun yerine, sisteminiz için doğru seçenekleri sağlayacak pkg-config komutunu kullanın:

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

Bunu gcc satırınıza ekleyebilirsiniz :

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

16

AWS EC2 python34 çalıştıran kurulum:

sudo yum install python34-devel


14

Benim durumumda, Ubuntu'da düzeltilen şey paketleri yüklemekti libpython-all-dev(veya libpython3-all-devPython 3'ü kullanıyorsanız).


2
python-all-devbenim durumumda, ama yeterince yakın.
Dave S.

1
@Oriol Nieto, Çok teşekkür ederim. python-all-dev de sorunu benim için çözdü.
shrawan_lakhe

14

3.6 python (şu anda edge) ile bir sanal ağ kullanıyorsanız, eşleşen python 3.6 dev'i kurduğunuzdan emin olun sudo apt-get install python3.6-dev, aksi takdirde yürütme sudo python3-devsorunu çözmeyecek python dev 3.3.3-1'i yükleyecektir.


1
3.5 (.2) de benim için çok çalıştı. Python sürümünüz için doğru dev paketini açıkça kurmak iyi bir şeydir.
Seth

13

Aynı durum değil, ama aynı zamanda benim için çalışıyor ve şimdi Python3.5 ile SWIG kullanabilirsiniz :

Derlemeye çalışıyordum:

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

Python 2.7 ile benim sürüm 3.5 ile iyi çalışır:

existe_wrap.c: 147: 21: ölümcül hata: Python.h: Hiçbir yönetici derlemesi sonlandırılmadı.

Ubuntu 16.04 kurulumumda çalıştırdıktan sonra:

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

Şimdi sorunsuz Python3.5 derleme:

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

11

Ubuntu'da coolprop yüklerken de bu hatayla karşılaştım.

Python 3.6 ile ubuntu 16.04 için

sudo apt-get install python3.6-dev

Bu işe yaramazsa, lib'i yüklemeyi / güncellemeyi deneyin gcc.

sudo apt-get install gcc

1
Aman tanrım, çünkü ben python3-devdefalarca koşmuştu ve aynı hatayı almaya devam, ama hakkında bilmiyordum çünkü çok uzun süre mücadele etti python3.6-dev! Teşekkürler!!
Blairg23

10

apt dosyasını deneyin. Eksik dosyanın bulunduğu paket adını hatırlamak zordur. Herhangi bir paket dosyası için genel ve kullanışlıdır.

Örneğin:

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# 

Şimdi hangisini seçeceğiniz konusunda uzman bir tahmin yapabilirsiniz.


10

Bu sorunu çözmeyi ve .so dosyasını bir komutta oluşturmayı başardım

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

8

Orada OpenSuse yoldaşları için:

sudo zypper install python3-devel


5

Amazon Linux'ta Python 3.6 kullanıyorsanız (RHEL tabanlı, ancak burada verilen RHEL cevapları işe yaramadı):

sudo yum install python36-devel

4

Bu hata Python3.6 ile CentOS 7 ctds yüklemeye çalıştığımda oluştu. Burada da dahil olmak üzere tüm hileleri yaptım yum install python34-devel. Sorun Python.hbulundu /usr/include/python3.4m but not in /usr/include/python3.6m. Ben --global-optiondir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds) eklemek için işaret etmeye çalıştı . Bu, lpython3.6mctds bağlanırken bulunamadı.

Nihayet işe yarayan Python3.6 için geliştirme ortamı düzeltmek dahil ve libs ile düzeltilmesi gerekiyordu.

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 dosyasının gcc için içerme yolunda olması gerekir. Hangi python sürümü kullanılırsa, örneğin 3.6 ise, /usr/include/python3.6m/Python.htipik olarak olmalıdır .


Neden -1 olduğundan emin değilim ama bugün python3.6 için python3.6 CentOS ile python3.6 için bir sorun mevcut değildir. Yukarıdaki URL'den yüklemeniz gerekir.
Babu Arunachalam

4

Tabii python-devya libpython-all-dev(ilk şey vardır apt) install, ama benim olduğu gibi bu yardım yapmazsa, ben yüklemenizi tavsiye yabancı Fonksiyon Arayüz tarafından paketlerini sudo apt-get install libffi-devve sudo pip install cffi.

Bu, özellikle hatayı / from olarak görürseniz yardımcı olacaktır c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.


sudo pip3 install cffi (python3 için #)
Magnus Melwin

3

Genellikle kaldırmaya python3.5ve yüklemeye çalıştığınızda görünür python3.6.

Bu nedenle, bazı paketleri yüklemek için python3(which python3 -V=> python3.6) kullanılırken gerekli python3.5başlık bu hatayı görüntüleyecektir.

Kurulum python3.6-devmodülü ile çözün .


3
  1. İşletim sisteminizle birlikte verilen Python onlarla birlikte gelmiyorsa, Python geliştirme dosyalarını işletim sisteminize yüklemelisiniz. Bu soruya verilen birçok cevap, bunun farklı sistemlerde elde edilebileceği sayısız yolu göstermektedir.

  2. Bunu yaptığınızda, sorun derleyiciye nerede bulunduğunu ve bunlara nasıl derleneceğini anlatmaktır. Python adlı bir programla birlikte gelir python-config. Derleme için, --includesçıktıya ve bir programı Python kütüphanesine (Python'u programınıza gömerek) bağlamak için --ldflagsçıktıya ihtiyacınız vardır. Misal:

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

python-configBu adlandırılabilir örneğin Debian, Ubuntu - Program Python sürümleri adını edilebilir python3-configveya python3.6-config.


2

Bazen python-dev'i kurduktan sonra bile hata devam eder, 'gcc' eksikse hatayı kontrol edin.

İlk önce https://stackoverflow.com/a/21530768/8687063 adresinde belirtildiği gibi indirin , ardından gcc'yi yükleyin

Apt için (Ubuntu, Debian ...):

sudo apt-get install gcc

Yum için (CentOS, RHEL ...):

sudo yum install gcc

DNF (Fedora ...) için:

sudo dnf install gcc

Zypper için (openSUSE ...):

sudo zypper in gcc

Apk (Alpine ...) için:

sudo apk gcc

1

Bu Python.h, derleyicinizin varsayılan içerme yollarında olmadığı anlamına gelir . Sistem genelinde mi yoksa yerel olarak mı kurdunuz? İşletim sisteminiz nedir?

Sen kullanabilirsiniz -I<path>sizin derleyici başlıklarını için görünmelidir ek bir dizin belirtmek için bayrak. Muhtemelen takip etmek zorunda kalacaksınız, -L<path>böylece gcc kullanarak bağlayacağınız kütüphaneyi bulabilir -l<name>.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.