질문자 :Mohanad Y.
C 확장 파일을 사용하여 공유 라이브러리를 빌드하려고 하지만 먼저 아래 명령을 사용하여 출력 파일을 생성해야 합니다.
gcc -Wall utilsmodule.c -o Utilc
명령을 실행한 후 다음 오류 메시지가 나타납니다.
> utilsmodule.c:1:20: fatal error: Python.h: No such file or directory compilation terminated.
인터넷을 통해 제안된 모든 솔루션을 시도했지만 문제가 여전히 존재합니다. Python.h
문제가 없습니다. 내 컴퓨터에서 파일을 찾을 수 있었습니다.
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
( 페도라... ):
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
wimUbuntu에서 Python 3을 실행 중이었고 설치해야했습니다.
sudo apt-get install python3-dev
python3에 연결되지 않은 Python 버전을 사용하려면 연결된 python3.x-dev 패키지를 설치하세요. 예를 들어:
sudo apt-get install python3.5-dev
FreshPow특히 Python 3.7 및 Ubuntu의 경우
sudo apt install libpython3.7-dev
. 어느 시점에서 이름이 pythonm.n-dev
에서 이것으로 변경되었다고 생각합니다.
Python 3.6, 3.8 및 3.9의 경우 유사하게:
sudo apt install libpython3.6-dev
sudo apt install libpython3.8-dev
sudo apt install libpython3.9-dev
ijoseph당신이해야 할 두 가지.
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
vartecFedora에서 Python 2에 대해 다음을 실행합니다.
sudo dnf install python2-devel
그리고 파이썬 3의 경우:
sudo dnf install python3-devel
ravi.zombietox 를 사용하여 여러 버전의 Python에서 테스트를 실행하는 경우 테스트 중인 각 Python 버전에 대해 Python 개발 라이브러리를 설치해야 할 수 있습니다.
sudo apt-get install python2.6-dev sudo apt-get install python2.7-dev etc.
Christian LongPython 개발 파일이 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)
sleblancCygwin을 위한 솔루션
사용 중인 Python 버전에 따라 python2-devel
또는 python3-devel
패키지 를 설치해야 합니다.
Cygwin.com 에서 32비트 또는 64비트 setup.exe
(설치에 따라 다름)를 사용하여 빠르게 설치할 수 있습니다.
예( setup.exe
의 파일 이름 및 Python의 주요 버전 수정):
$ setup.exe -q --packages=python3-devel
명령 줄에서 Cygwin의 패키지를 설치하는 몇 가지 옵션에 대한 다른 답변 을 확인할 수도 있습니다.
David Ferenczy Rogožan나를 위해 이것을 변경하면 효과가있었습니다.
#include <python2.7/Python.h>
/usr/include/python2.7/Python.h
파일을 찾았고 /usr/include
가 이미 포함 경로에 python2.7/Python.h
로 충분해야 합니다.
대신 명령줄에서 포함 경로를 추가할 수도 있습니다 - gcc -I/usr/lib/python2.7
python2.7 (@erm3nda에게 감사드립니다).
sashoalmAWS API(centOS)에서
yum install python27-devel
yespbspython34를 실행하는 AWS EC2 설치:
sudo yum install python34-devel
parsethis3.6 python(지금 edge)과 함께 virtualenv를 사용하는 경우 일치하는 python 3.6 dev sudo apt-get install python3.6-dev
. 그렇지 않으면 sudo python3-dev
실행하면 python dev 3.3.3-이 설치됩니다. 1, 문제가 해결되지 않습니다.
Guillaume Cisco제 경우 우분투에서 수정한 것은 libpython-all-dev
(또는 Python 3을 사용하는 경우 libpython3-all-dev
Oriol Nieto같은 상황은 아니지만 저에게도 효과적이며 이제 Python3.5에서 SWIG 를 사용할 수 있습니다.
나는 컴파일하려고했다 :
gcc -fPIC -c existe.c existe_wrap.c -I /usr/include/python3.5m/
Python 2.7에서는 내 버전 3.5가 아니라 잘 작동합니다.
Existing_wrap.c:147:21: 치명적인 오류: Python.h: 기존 파일 아카이브 또는 디렉토리 컴파일이 종료되지 않았습니다.
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/
Hugo L.M이 문제를 해결하고 하나의 명령으로 .so 파일을 생성했습니다.
gcc -shared -o UtilcS.so -fPIC -I/usr/include/python2.7 -lpython2.7 utilsmodule.c
Mohanad Y.우분투에 coolprop을 설치할 때도 이 오류가 발생했습니다.
Python 3.6이 설치된 우분투 16.04의 경우
sudo apt-get install python3.6-dev
gcc
lib를 설치/업데이트해 보십시오.
sudo apt-get install gcc
Wreeecksapt 파일을 시도하십시오. 누락된 파일이 있는 패키지 이름을 기억하기 어렵습니다. 모든 패키지 파일에 일반적이며 유용합니다.
예를 들어:
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#
이제 어느 것을 선택할지 전문가가 추측할 수 있습니다.
Venfah NazirCentOS 7의 경우:
sudo yum install python36u-devel
여러 VM에 python3.6을 설치하는 방법은 다음과 같습니다. 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와 함께 작동하도록 할 수 있었습니다.
Steve GOpenSuse 동지들에게:
sudo zypper install python3-devel
kmonsoorAmazon Linux에서 Python 3.6을 사용하는 경우(RHEL을 기반으로 하지만 여기에 제공된 RHEL 답변이 작동하지 않음):
sudo yum install python36-devel
Yigal운영 체제와 함께 제공되는 Python이 함께 제공되지 않는 경우 운영 체제에 Python 개발 파일을 설치해야 합니다. 이 질문에 대한 많은 답변은 다양한 시스템에서 이것이 달성될 수 있는 무수한 방법을 보여줍니다.
그렇게 했을 때 문제는 컴파일러에게 위치와 컴파일 방법을 알려주는 것입니다. python-config
라는 프로그램이 함께 제공됩니다. 컴파일을 위해서는 --includes
출력이 필요하고 Python 라이브러리에 대해 프로그램을 연결하려면(Python을 프로그램에 포함) --ldflags
출력이 필요합니다. 예시:
gcc -c mypythonprogram.c $(python3-config --includes) gcc -o program mypythonprogram.o $(python3-config --ldflags)
python-config
프로그램은 Python 버전의 이름을 따서 명명할 수 있습니다. 예를 들어 Debian, Ubuntu에서는 python3-config
또는 python3.6-config
로 명명할 수 있습니다.
Antti Haapala물론 python-dev
또는 libpython-all-dev
apt
) install
의 첫 번째 항목이지만 제 경우처럼 도움이 되지 않으면 sudo apt-get install libffi-dev
외부 함수 인터페이스 패키지를 설치하는 것이 좋습니다. 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
오류가 표시되는 경우 도움이 됩니다.
Huge이 오류는 Python3.6이 설치된 CentOS 7에 ctds를 설치하려고 할 때 발생했습니다. yum install python34-devel
포함하여 여기에 언급된 모든 트릭을 수행했습니다. 문제는 Python.h
가 /usr/include/python3.4m에서 발견 /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
를 연결할 때 lpython3.6m을 찾을 수 없습니다.
마지막으로 작동한 것은 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의 포함 경로에 있어야 합니다. 어떤 버전의 python이 사용되든, 예를 들어 3.6인 경우 일반적으로 /usr/include/python3.6m/Python.h
Babu ArunachalamPython.h를 찾으십시오.
gemfield@ThinkPad-X1C:~$ locate Python.h /home/gemfield/anaconda3/include/python3.7m/Python.h /home/gemfield/anaconda3/pkgs/python-3.7.6-h0371630_2/include/python3.7m/Python.h /usr/include/python3.8/Python.h
찾을 수 없으면 python-dev 또는 python3-dev를 설치하십시오. 그렇지 않으면 컴파일러에 대한 올바른 헤더 경로를 포함합니다.
g++ -I/usr/include/python3.8 ...
gemfield제거하려고 할 때 종종 나타납니다 python3.5
설치 python3.6
.
따라서 python3
( python3 -V
=> python3.6
)을 사용하여 일부 패키지에 필요한 python3.5
헤더를 설치할 때 이 오류가 나타납니다.
python3.6-dev
모듈을 설치하여 해결하십시오.
dphans이러한 솔루션 중 어느 것도 저에게 효과가 없었기 때문에 여기에 또 다른 솔루션이 있습니다. 참고로 저는 Python 3.6용 Amazon Linux AMI 기반 Docker 이미지에 무언가 pip install
비도커 솔루션:
# Install python3-devel like everyone says yum -y install python36-devel.x86_64 # Find the install directory of `Python.h` rpm -ql python36-devel.x86_64 | grep -i "Python.h" # Forcefully add it to your include path C_INCLUDE_PATH='/usr/include/python3.6m' export C_INCLUDE_PATH
도커 솔루션:
# Install python3-devel like everyone says RUN yum -y install python36-devel.x86_64 # Find the install directory of `Python.h`, for me it was /usr/include/python3.6m RUN rpm -ql python36-devel.x86_64 | grep -i "Python.h" && fake_command_so_docker_fails_and_shows_us_the_output # Since the previous command contains a purposeful error, remove it before the next run # Forcefully add it to your include path ARG C_INCLUDE_PATH='/usr/include/python3.6m'
참고: C++를 컴파일할 때 오류가 발생하면 CPLUS_INCLUDE_PATH
사용하세요.
serg06Python.h
가 컴파일러의 기본 포함 경로에 없다는 것을 의미합니다. 시스템 전체에 설치했습니까 아니면 로컬에 설치했습니까? 당신의 OS는 무엇입니까?
-I<path>
플래그를 사용하여 컴파일러가 헤더를 찾아야 하는 추가 디렉토리를 지정할 수 있습니다. -l<name>
을 사용하여 연결할 라이브러리를 찾을 수 있도록 -L<path>
로 후속 조치를 취해야 할 것입니다.
Kos간혹 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(페도라...):
sudo dnf install gcc
지퍼(openSUSE...)의 경우:
sudo zypper in gcc
APK의 경우(알파인...):
sudo apk gcc
HimanshuGahlot이 문제는 다른 Python 버전이 설치되어 있고 시스템 버전이 아닌 pip를 사용하는 경우에도 발생할 수 있습니다. 이 경우 비시스템 pip는 올바른 버전의 Python 헤더를 찾지 못합니다.
응용 프로그램과 함께 번들로 제공되는 Python용 패키지 를 pip 설치 하려고 할 때 발생했습니다. 시스템의 파이썬이 아니 어서 apt install pythonXX-dev 가 작동하지 않았습니다.
이 경우 해결책은 올바른 파이썬 헤더를 찾는 것입니다.
find / -iname 'Python.h'
출력에서 시스템 python 헤더를 볼 수 있으며, 예를 들어 다음과 같이 찾고 있는 헤더를 볼 수 있습니다.
/usr/include/python3.7m/Python.h /usr/include/python3.6m/Python.h /home/ubuntu/workspace/blender-git/lib/linux_centos7_x86_64/python/include/python3.7m/Python.h /home/ubuntu/miniconda3/pkgs/python-3.8.5-h7579374_1/include/python3.8/Python.h /home/ubuntu/miniconda3/pkgs/python-3.7.0-h6e4f718_3/include/python3.7m/Python.h /home/ubuntu/miniconda3/include/python3.8/Python.h /home/ubuntu/miniconda3/envs/sim/include/python3.7m/Python.h /home/ubuntu/src/blender-deps/Python-3.7.7/Include/Python.h /opt/lib/python-3.7.7/include/python3.7m/Python.h
그런 다음 pip에서 호출할 때 gcc에서 사용할 컴파일러 플래그를 설정할 수 있습니다. 광산은 /home/ubuntu/workspace/blender-git/lib/linux_centos7_x86_64/python/include/python3.7m/Python.h 였으므로 다음을 수행했습니다.
export CPPFLAGS=-I/home/ubuntu/src/blender-deps/Python-3.7.7/Include pip install <package>
Milocmake를 사용하여 프로젝트를 빌드하는 경우 이 예제를 사용할 수 있습니다.
cmake_minimum_required(VERSION 2.6) project(demo) find_package(PythonLibs REQUIRED) include_directories(${PYTHON_INCLUDE_DIRS}) add_executable(demo main.cpp) target_link_libraries(demo ${PYTHON_LIBRARIES})
KingKong출처 : http:www.stackoverflow.com/questions/21530577/fatal-error-python-h-no-such-file-or-directory