erro fatal: Python.h: Esse arquivo ou diretório não existe

1194

Estou tentando criar uma biblioteca compartilhada usando um arquivo de extensão C, mas primeiro tenho que gerar o arquivo de saída usando o comando abaixo:

gcc -Wall utilsmodule.c -o Utilc

Depois de executar o comando, recebo esta mensagem de erro:

utilsmodule.c: 1: 20: erro fatal: Python.h: Nenhuma compilação de arquivo ou diretório foi encerrada.

Eu tentei todas as soluções sugeridas pela internet, mas o problema ainda existe. Eu não tenho nenhum problema com Python.h. Consegui localizar o arquivo na minha máquina.

Mohanad Y.
fonte

Respostas:

2236

Parece que você não instalou corretamente os arquivos de cabeçalho e as bibliotecas estáticas do python dev. Use seu gerenciador de pacotes para instalá-los em todo o sistema.

Para apt( Ubuntu, Debian ... ):

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

Para yum( CentOS, RHEL ... ):

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

Para dnf( Fedora ... ):

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

Para zypper( openSUSE ... ):

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

Para 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

Para apt-cyg( Cygwin ... ):

apt-cyg install python-devel   # for python2.x installs
apt-cyg install python3-devel  # for python3.x installs
wim
fonte
21
Experimente locate Python.he veja se você já possui o arquivo antes de fazer tudo isso. Se você puder encontrar o arquivo localizado, em geral esta resposta funcionará: stackoverflow.com/a/19344978/4954434 (Pode ser apenas um problema de caminho) #
487 Jithin Pavithran
2
@ Hack-R e outros, se você tiver o Python 2.6 e 2.7 instalado, "python-devel" instalará apenas as bibliotecas dev para 2.6. Para forçá-lo a instalar as bibliotecas 2.7, usesudo yum install python27-devel
Doktor J
15
Eu estou usando python3.6 em 14.04 apt-get install python3.6-devfuncionou para mim.
bits
9
funcionou bem para mim (ubuntu 14.04), mas teve de especificar o número da versão completasudo apt-get install python3.6-dev
landrykapela
17
Da mesma forma com sudo apt-get install python3.7-dev.
kas
346

No Ubuntu, eu estava executando o Python 3 e tive que instalar

sudo apt-get install python3-dev

Se você deseja usar uma versão do Python que não esteja vinculada ao python3, instale o pacote python3.x-dev associado. Por exemplo:

sudo apt-get install python3.5-dev
FreshPow
fonte
32
Eu executei o comando sudo apt-get install python3.4-devpara o meu Python3.4 e isso resolveu o meu problema.
Aaron Lelevier
4
@Rawrgulmuffins bem, depende de qual versão do python você está usando. No meu caso, sudo apt-get install python2.7-devo problema foi
resolvido
6
Eu acrescentaria mais uma coisa a esta resposta - se você tiver várias versões do Python 3.x, python3-devinstalará dependências para essa versão vinculada ao python3comando. Portanto, se você deseja instalar para uma versão específica, use a versão completa como - python3.x-dev.
Xyres
3
Isso ajudou com o python 3.6.3 no Ubuntu 14.04sudo apt-get install python3.6-dev
codestruggle
Se você estiver executando uma versão do Python dentro de um ambiente virtual diferente do Python do seu sistema, é isso.
SuperShoot
76

Para Python 3.7 e Ubuntu em particular, eu precisava

sudo apt install libpython3.7-dev

. Eu acho que em algum momento os nomes foram alterados pythonm.n-devpara isso.

para Python 3.6, da mesma forma:

sudo apt install libpython3.6-dev
ijoseph
fonte
6
ty: tearsofjoy:
valem
1
Uau. Depois de 30 minutos pesquisando e instalando todo tipo de coisa, essa resposta resolveu o problema
Vyacheslav Tsivina
!!!!! Claro que esta foi a solução certa para mim usando Python 3.7 e Ubuntu 18.04.
villamejia
obrigado <3 <3 <3
Café inTime
1
funciona para python 3.6 também ... massudo apt install libpython3.6-dev
Morteza Afshari
70

Duas coisas que você tem que fazer.

Instale o pacote de desenvolvimento para Python, no caso do Debian / Ubuntu / Mint, isso é feito com o comando:

sudo apt-get install python-dev

A segunda coisa é que os arquivos de inclusão não estão por padrão no caminho de inclusão, nem a biblioteca Python é vinculada ao executável por padrão. Você precisa adicionar esses sinalizadores (substitua a versão do Python de acordo):

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

Em outras palavras, seu comando de compilação deve ser:

gcc -Wall -I/usr/include/python2.7 -lpython2.7  utilsmodule.c -o Utilc 
vartec
fonte
preciso adicionar sinalizadores para cada arquivo incluído no arquivo de extensão C?
Mohanad Y.
1
Se você estiver usando outra versão do Python, 3.3 por exemplo: sudo apt-get install python3.3-dev
FreshPow
Eu recomendo usar pkg-configem vez de uma matéria- -I: stackoverflow.com/a/21531170/895245
Ciro Santilli郝海东冠状病六四事件法轮功
47

Se você estiver usando um Raspberry Pi:

sudo apt-get install python-dev
Malachi Bazar
fonte
35

no Fedora, execute isso para o Python 2:

sudo dnf install python2-devel

e para Python 3:

sudo dnf install python3-devel
ravi.zombie
fonte
1
No Mint 18.2 (baseado no Ubuntu), era apt-get install python-dev.
Deleet 31/08/19
30

Se você estiver usando o tox para executar testes em várias versões do Python, pode ser necessário instalar as bibliotecas de desenvolvimento Python para cada versão do Python em que você está testando.

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

Solução para Cygwin

Você precisa instalar o pacote python2-develoupython3-devel , dependendo da versão do Python que estiver usando.

Você pode instalá-lo rapidamente usando os de 32 ou 64 bits setup.exe (dependendo da instalação) do Cygwin.com .

Exemplo (modifique setup.exeo nome do arquivo e a versão principal do Python, se necessário):

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

Você também pode verificar minha outra resposta para mais algumas opções para instalar os pacotes do Cygwin a partir da linha de comando.

David Ferenczy Rogožan
fonte
22

Na API da AWS (centOS), seus

yum install python27-devel
yespbs
fonte
Isso não fornece uma resposta para a pergunta. Para criticar ou solicitar esclarecimentos a um autor, deixe um comentário abaixo da postagem - você sempre pode comentar em suas próprias postagens e, quando tiver reputação suficiente , poderá comentar em qualquer post .
Wtower
2
@ Tower Sim, fornece uma resposta.
Tadeusz Kopec
1
Ele fornece uma resposta. Embora você precise substituir a versão pelo que você precisa.
Ganesh Krishnan
1
isso ajudou a superar meus problemas tentando pip install cryptographyem uma instância do linux da amazon.
Ryan Tuck
Esta foi uma resposta útil, embora seja possível instalar o python-devel ou python2-devel na Amazon Linux, este é o único que realmente funcionou para mim quando executando um pip instalar dentro de um virtualenv
Kristofor Carle
21

Para mim, alterá-lo para isso funcionou:

#include <python2.7/Python.h>

Encontrei o arquivo /usr/include/python2.7/Python.he, como já /usr/includeestá no caminho de inclusão, python2.7/Python.hdeve ser suficiente.

Você também pode adicionar o caminho de inclusão na linha de comando - gcc -I/usr/lib/python2.7(obrigado @ erm3nda).

sashoalm
fonte
4
Todas as outras respostas dizem para você instalar algo. Este funcionou para mim. Por que essa não é a resposta principal?
noɥʇʎԀʎzɐɹƆ
1
@ uoɥʇʎPʎzɐɹC Talvez porque não funcione no python3?
Louis
É melhor definir a lib em gcc -I/usr/lib/python2.7 etcvez de codificar as chamadas de inclusão.
M3nda 29/03
1
@ noɥʇʎԀʎzɐɹƆ Porque deve funcionar sem alterar o código. Você geralmente precisa compilar um código que não pertence a você, alguma dependência externa, por exemplo, e a pior coisa que você pode fazer é modificar esse código.
David Ferenczy Rogožan
@DawidFerenczy Understod.
noɥʇʎԀʎzɐɹƆ
19

Verifique se os arquivos dev do Python vêm com o seu sistema operacional.

Você não deve codificar a biblioteca e incluir caminhos. Em vez disso, use pkg-config, que exibirá as opções corretas para o seu sistema específico:

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

Você pode adicioná-lo à sua linha do gcc :

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

Instalação do AWS EC2 executando python34:

sudo yum install python34-devel

parsethis
fonte
14

No meu caso, o que o corrigiu no Ubuntu foi instalar os pacotes libpython-all-dev(ou libpython3-all-devse você usa o Python 3).

Oriol Nieto
fonte
2
python-all-devno meu caso, mas perto o suficiente.
Dave S.
1
@Oriol Nieto, muito obrigado. O python-all-dev também resolveu o problema para mim.
shrawan_lakhe
14

Se você usa um virtualenv com um python 3.6 (borda agora), instale o python 3.6 dev correspondente sudo apt-get install python3.6-dev; caso contrário, a execução sudo python3-devinstalará o python dev 3.3.3-1, o que não resolverá o problema.

Guillaume Cisco
fonte
1
Também funcionou muito bem para mim em 3,5 (.2). A instalação explícita do pacote dev para a sua versão do Python é uma coisa boa.
Seth
13

Não é a mesma situação, mas também funciona para mim e agora posso usar o SWIG com o Python3.5 :

Eu estava tentando compilar:

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

Com o Python 2.7 funciona bem, não com a minha versão 3.5:

existe_wrap.c: 147: 21: erro fatal: Python.h: Não existe o arquivo ou a compilação de diretório finalizada.

Depois de executar na minha instalação do Ubuntu 16.04:

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

Agora eu posso compilar sem problemas Python3.5:

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

Também encontrei esse erro ao instalar o coolprop no ubuntu.

Para o ubuntu 16.04 com python 3.6

sudo apt-get install python3.6-dev

Se isso não funcionar, tente instalar / atualizar a gcclib.

sudo apt-get install gcc
Wreeecks
fonte
1
omg, eu lutei com isso por tanto tempo porque eu corri python3-devvárias vezes e continuava recebendo o mesmo erro, mas não sabia python3.6-dev!! Obrigado!!
Blairg23
10

tente o arquivo apt. É difícil lembrar o nome do pacote em que reside o arquivo ausente. É genérico e útil para qualquer arquivo de pacote.

Por exemplo:

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# 

Agora você pode adivinhar qual escolher.

Venfah Nazir
fonte
10

Consegui resolver esse problema e gerar o arquivo .so em um comando

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

Para os camaradas OpenSuse por aí:

sudo zypper install python3-devel
kmonsoor
fonte
5

Se você estiver usando o Python 3.6 no Amazon Linux (baseado no RHEL, mas as respostas do RHEL fornecidas aqui não funcionaram):

sudo yum install python36-devel
Yigal
fonte
4

Este erro ocorreu quando tentei instalar o ctds no CentOS 7 com o Python3.6. Eu fiz todos os truques mencionados aqui, incluindo yum install python34-devel. O problema foi Python.hencontrado em /usr/include/python3.4m but not in /usr/include/python3.6m. Eu tentei usar --global-optionpara apontar para incluir dir ( pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds). Isso resultou em um lpython3.6mnão encontrado ao vincular ctds.

Finalmente, o que funcionou foi consertar o ambiente de desenvolvimento do Python3.6 para corrigir as inclusões e bibliotecas.

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

O Python.h precisa estar no seu caminho de inclusão do gcc. Qualquer que seja a versão do python usada, por exemplo, se for 3.6, deve estar /usr/include/python3.6m/Python.hnormalmente.

Babu Arunachalam
fonte
Não sei por que existe um -1, mas hoje é um problema para o python3.6 com o CentOS, já que o python36-devel não está disponível. Você precisará instalá-lo a partir do URL acima.
Babu Arunachalam
4

Claro python-devou libpython-all-devé a primeira coisa a ( apt) install, mas se isso não ajudar como foi o meu caso, aconselho você a instalar os pacotes externos da Interface de Função por sudo apt-get install libffi-devesudo pip install cffi .

Isso deve ajudar especialmente se você vir o erro como / de c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory.

Imenso
fonte
sudo PIP3 instalar CFFI (# para python3)
Magnus Melwin
3

Aparece frequentemente quando você está tentando remover python3.5e instalar python3.6.

Portanto, ao usar python3(which python3 -V=> python3.6) para instalar alguns pacotes, o python3.5cabeçalho necessário aparecerá esse erro.

Resolva pelo python3.6-devmódulo de instalação .

órfãos
fonte
3
  1. Você deve instalar os arquivos de desenvolvimento Python no seu sistema operacional se o Python fornecido com o sistema operacional não vier com eles. As muitas respostas sobre essa pergunta mostram as inúmeras maneiras que isso pode ser alcançado em diferentes sistemas.

  2. Quando você o faz, o problema é informar ao compilador onde eles estão localizados e como compilar com eles. Python vem com um programa chamado python-config. Para compilação, você precisa da --includessaída e para vincular um programa à biblioteca Python (incorporando o Python ao seu programa) a --ldflagssaída. Exemplo:

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

O python-configprograma pode ter o nome das versões do Python - no Debian, Ubuntu, por exemplo, elas podem ter o nome python3-configou python3.6-config.

Antti Haapala
fonte
2

Às vezes, mesmo após a instalação do python-dev, o erro persiste, verifique o erro se estiver 'gcc' ausente.

Primeiro faça o download, conforme indicado em https://stackoverflow.com/a/21530768/8687063 , depois instale o gcc

Para o apt (Ubuntu, Debian ...):

sudo apt-get install gcc

Para yum (CentOS, RHEL ...):

sudo yum install gcc

Para dnf (Fedora ...):

sudo dnf install gcc

Para zypper (openSUSE ...):

sudo zypper in gcc

Para apk (Alpine ...):

sudo apk gcc
HimanshuGahlot
fonte
1

Isso significa que Python.hnão está no caminho de inclusão padrão do seu compilador. Você o instalou em todo o sistema ou localmente? Qual é o seu sistema operacional?

Você pode usar o -I<path>sinalizador para especificar um diretório adicional onde seu compilador deve procurar por cabeçalhos. Você provavelmente terá que fazer o acompanhamento -L<path>para que o gcc possa encontrar a biblioteca que você usará -l<name>.

Kos
fonte