치명적인 오류 : Python.h : 해당 파일이나 디렉토리가 없습니다.


1190

C 확장 파일을 사용하여 공유 라이브러리를 만들려고하지만 먼저 아래 명령을 사용하여 출력 파일을 생성해야합니다.

gcc -Wall utilsmodule.c -o Utilc

명령을 실행 한 후이 오류 메시지가 나타납니다.

utilsmodule.c : 1 : 20 : 치명적인 오류 : Python.h : 해당 파일 또는 디렉토리 컴파일이 종료되지 않았습니다.

인터넷을 통해 제안 된 모든 솔루션을 시도했지만 문제가 여전히 존재합니다. 에 문제가 없습니다 Python.h. 내 컴퓨터에서 파일을 찾을 수있었습니다.

답변:


2233

python dev 용 헤더 파일과 정적 라이브러리를 제대로 설치하지 않은 것 같습니다. 패키지 관리자를 사용하여 시스템 전체에 설치하십시오.

위해 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( 오픈 수세 ... )

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 파 비싸 란

2
@ Hack-R 및 기타 Python 2.6 2.7이 설치된 경우 "python-devel"은 2.6의 dev 라이브러리 만 설치합니다. 2.7 라이브러리를 강제로 설치하려면sudo yum install python27-devel
Doktor J

15
14.04 apt-get install python3.6-dev에서 python3.6을 사용하고 있습니다.
비트

9
나를 위해 잘 작동했지만 (우분투 14.04) 완전한 버전 번호를 지정해야했습니다sudo apt-get install python3.6-dev
landrykapela

17
마찬가지로 sudo apt-get install python3.7-dev.
kas

344

우분투에서 Python 3을 실행 중이며 설치해야했습니다.

sudo apt-get install python3-dev

python3에 연결되지 않은 Python 버전을 사용하려면 관련 python3.x-dev 패키지를 설치하십시오. 예를 들면 다음과 같습니다.

sudo apt-get install python3.5-dev

32
sudo apt-get install python3.4-devPython3.4에 대한 명령 을 실행하면 문제가 해결되었습니다.
Aaron Lelevier

4
@Rawrgulmuffins 잘 사용하고있는 파이썬 버전에 따라 다릅니다. 제 경우 sudo apt-get install python2.7-dev에는 문제가 해결되었습니다
RockScience

6
이 답변에 한 가지 더 추가하겠습니다. 여러 Python 3.x 버전 python3-dev을 사용하는 경우 python3명령에 연결된 해당 버전의 종속성을 설치 합니다. 따라서 특정 버전을 설치하려면-와 같은 정식 버전을 사용하십시오 python3.x-dev.
xyres

3
이것은 우분투 14.04에 파이썬 3.6.3에 도움sudo apt-get install python3.6-dev
codestruggle

시스템 Python과 다른 가상 환경에서 Python 버전을 실행하는 경우 이는 Python입니다.
SuperShoot

74

들어 파이썬 3.7우분투 특히, 내가 필요

sudo apt install libpython3.7-dev

. 나는 어느 시점에서 이름이 이것으로 바뀌 었다고 생각 pythonm.n-dev합니다.

Python 3.6의 경우 다음과 같습니다.

sudo apt install libpython3.6-dev

6
ty : tearsofjoy :
valem '12

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

두 번째로 include 파일은 include 경로에 기본적으로 포함되어 있지 않으며 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원시 대신 -I: stackoverflow.com/a/21531170/895245
치로 틸리을冠状病毒审查六四事件法轮功


35

Fedora에서 Python 2에 대해 이것을 실행하십시오.

sudo dnf install python2-devel

그리고 파이썬 3의 경우 :

sudo dnf install python3-devel

1
Mint 18.2 (우분투 기반)에서는 apt-get install python-dev입니다.
Deleet

30

tox 를 사용하여 여러 버전의 Python에서 테스트를 실행하는 경우 테스트중인 각 버전의 Python에 대해 Python dev 라이브러리를 설치해야 할 수 있습니다.

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

27

Cygwin 솔루션

당신은 할 필요 패키지를 설치 python2-devel하거나python3-devel 사용중인 파이썬 버전에 따라.

Cygwin.com 에서 32 비트 또는 64 비트 setup.exe (설치에 따라 다름)를 사용하여 빠르게 설치할 수 있습니다 .

예 ( setup.exe필요한 경우 파일 이름과 Python의 주 버전을 수정하십시오 ) :

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

명령 줄에서 Cygwin의 패키지를 설치하는 몇 가지 추가 옵션에 대한 다른 답변 을 확인할 수도 있습니다.


22

AWS API (centOS)에서

yum install python27-devel

이것은 질문에 대한 답변을 제공하지 않습니다. 작성자의 의견을 비판하거나 설명을 요청하려면 게시물 아래에 댓글을 남겨주세요. 언제든지 자신의 게시물 에 댓글 수 있으며 평판 이 충분 하면 게시물댓글 수 있습니다 .
Wtower

2
@Wtower 예, 답을 제공합니다.
Tadeusz Kopec

1
답변을 제공합니다. 필요한 버전을 대신해야합니다.
Ganesh Krishnan

1
이것은 pip install cryptographyAmazon Linux 인스턴스에서 시도하는 문제를 극복하는 데 도움이되었습니다 .
Ryan Tuck

이것은 유용한 답변 이었지만 Amazon Linux에 python-devel 또는 python2-devel을 설치할 수는 있지만 virtualenv에서 pip 설치를 실행할 때 실제로 도움이 된 유일한 방법입니다.
Kristofor Carle

21

나를 위해 이것을 다음과 같이 변경했습니다.

#include <python2.7/Python.h>

내가 파일을 발견 /usr/include/python2.7/Python.h하고, 이후 /usr/include(가) 경로를 포함 이미하고 python2.7/Python.h충분해야한다.

대신 명령 줄에서 include 경로를 추가 할 수도 있습니다 gcc -I/usr/lib/python2.7(@ erm3nda 덕분에).


4
다른 모든 답변은 무언가를 설치하라고 알려줍니다. 이것은 나를 위해 일했습니다. 이것이 왜 정답이 아닌가?
noɥʇʎԀʎzɐɹƆ

1
@ uoɥʇʎPʎzɐɹC 어쩌면 python3에서 실행되지 않기 때문일까요?
Louis

gcc -I/usr/lib/python2.7 etc포함 호출을 하드 코드하는 대신 lib를 설정하는 것이 좋습니다 .
m3nda

1
@ noɥʇʎԀʎzɐɹƆ 코드를 바꾸지 않고 작동해야하기 때문입니다. 종종 소유하지 않은 코드, 예를 들어 외부 의존성을 컴파일해야하며 최악의 방법은 해당 코드를 수정하는 것입니다.
David Ferenczy Rogožan

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

19

Python dev 파일이 OS와 함께 제공되는지 확인하십시오.

라이브러리를 하드 코딩하고 경로를 포함해서는 안됩니다. 대신 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) 

16

python34를 실행하는 AWS EC2 설치 :

sudo yum install python34-devel


14

필자의 경우 우분투에서 수정 한 것은 패키지를 설치하는 것입니다 libpython-all-dev(또는 libpython3-all-devPython 3을 사용하는 경우).


2
python-all-dev내 경우에는, 그러나 충분히 가까이.
Dave S.

1
@Oriol Nieto, 대단히 감사합니다. python-all-dev도 문제를 해결했습니다.
shrawan_lakhe

14

3.6 파이썬 (가장자리)과 함께 virtualenv를 사용하는 경우 일치하는 python 3.6 dev를 설치하십시오 sudo apt-get install python3.6-dev. 그렇지 않으면 실행 sudo python3-dev하면 python dev 3.3.3-1이 설치되어 문제가 해결되지 않습니다.


1
3.5 (.2)에서도 나에게 효과적이었습니다. 파이썬 버전에 맞는 dev 패키지를 명시 적으로 설치하는 것이 좋습니다.
세스

13

그것은 같은 상황이 아니지만 나에게도 효과가 있으며 이제 Python3.5 와 함께 SWIG 를 사용할 수 있습니다 .

컴파일하려고했습니다.

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 : 없음 el archivo o el directorio 컴파일이 종료되지 않았습니다.

내 Ubuntu 16.04 설치에서 실행 한 후 :

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

이제 파이썬 3.5 문제없이 컴파일 할 수 있습니다 :

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

11

우분투에서 coolprop를 설치할 때이 오류가 발생했습니다.

Python 3.6이 설치된 우분투 16.04의 경우

sudo apt-get install python3.6-dev

그래도 작동하지 않으면 gcclib를 설치 / 업데이트 해보십시오 .

sudo apt-get install gcc

1
omg, 나는 python3-dev여러 번 달리고 같은 오류가 계속 발생했지만 오랫동안 알지 못했지만 python3.6-dev!! 감사!!
Blairg23

10

적절한 파일을 사용해보십시오. 누락 된 파일이있는 패키지 이름은 기억하기 어렵습니다. 일반적이며 모든 패키지 파일에 유용합니다.

예를 들면 다음과 같습니다.

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


5

Amazon Linux에서 Python 3.6을 사용하고있는 경우 (RHEL 기반이지만 여기에 제공된 RHEL 답변이 작동하지 않음) :

sudo yum install python36-devel

4

이 오류는 Python3.6으로 CentOS 7에 ctd를 설치하려고 할 때 발생했습니다. 를 포함하여 여기에 언급 된 모든 트릭을 수행했습니다 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.6mctd를 연결할 때 찾을 수 없었습니다.

마지막으로 Python3.6의 개발 환경을 수정하는 작업은 include 및 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이 있는지 확실하지 않지만 CentOS가 python36-devel을 사용할 수 없으므로 CentOS가있는 python3.6의 경우 오늘 문제입니다. 위의 URL에서 설치해야합니다.
Babu Arunachalam

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 설치 cffi (python3의 경우 #)
Magnus Melwin

3

제거 python3.5하고 설치 하려고 할 때 종종 나타납니다 python3.6.

따라서 python3(which python3 -V=> python3.6)를 사용하여 일부 패키지를 설치 python3.5하면 헤더가 필요합니다 .

설치 python3.6-dev모듈로 해결하십시오 .


3
  1. 운영 체제와 함께 제공되는 Python과 함께 제공되지 않으면 운영 체제에 Python 개발 파일을 설치해야합니다. 이 질문에 대한 많은 답변은 다른 시스템에서 이것이 달성 될 수있는 무수한 방법을 보여줍니다.

  2. 당신이 그렇게 한 문제는이 위치하고있는 컴파일러를 말하고 어떻게 그들에 대해 컴파일 할 수 있습니다. 파이썬에는이라는 프로그램이 python-config있습니다. 컴파일하려면 --includes출력 이 필요하고 출력을 파이썬 라이브러리 (파이썬을 프로그램에 임베드)와 연결하는 프로그램 이 필요합니다 --ldflags. 예:

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

python-config이이 이름을 지정할 수 있습니다 예를 들어 데비안, 우분투 - 프로그램은 파이썬 버전의 이름을 따서 명명 할 수있다 python3-configpython3.6-config.


2

때때로 python-dev를 설치 한 후에도 오류가 지속되면 'gcc'가없는 경우 오류를 확인하십시오.

https://stackoverflow.com/a/21530768/8687063에 설명 된대로 먼저 다운로드 한 다음 gcc를 설치 하십시오 .

apt (Ubuntu, Debian ...)의 경우 :

sudo apt-get install gcc

yum (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컴파일러의 기본 포함 경로에 없다는 것을 의미합니다 . 시스템 전체 또는 로컬로 설치 했습니까? 당신의 OS는 무엇입니까?

-I<path>플래그를 사용하여 컴파일러가 헤더를 찾아야하는 추가 디렉토리를 지정할 수 있습니다 . -L<path>gcc가을 사용하여 연결할 라이브러리를 찾을 수 있도록 후속 조치 를 취해야 할 것 -l<name>입니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.