致命的なエラー:Python.h:そのようなファイルまたはディレクトリはありません


1193

C拡張ファイルを使用して共有ライブラリを構築しようとしていますが、最初に以下のコマンドを使用して出力ファイルを生成する必要があります。

gcc -Wall utilsmodule.c -o Utilc

コマンドを実行すると、次のエラーメッセージが表示されます。

utilsmodule.c:1:20:致命的なエラー:Python.h:そのようなファイルまたはディレクトリのコンパイルは終了しませんでした。

私はインターネットで提案されたすべての解決策を試しましたが、問題はまだ存在しています。私は問題ありませんPython.h。私は自分のマシンでファイルを見つけることができました。

回答:


2235

python devのヘッダーファイルと静的ライブラリが適切にインストールされていないようです。パッケージマネージャーを使用して、システム全体にインストールします。

以下のためにaptUbuntuの、Debianの...):

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

以下のためにyumCentOSの、RHEL ...):

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

以下のためのdnfFedoraの...):

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

zypperopenSUSEの...):

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-cygCygwinの...):

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の開発ライブラリのみをインストールします。2.7ライブラリのインストールを強制するには、次を使用しますsudo yum install python27-devel
Doktor J

15
14.04でpython3.6を使用apt-get install python3.6-devしています。
ビット

9
私にとっては問題なく動作しましたが(ubuntu 14.04)、完全なバージョン番号を指定する必要がありましたsudo apt-get install python3.6-dev
landrykapela '20

17
同様にsudo apt-get install python3.7-dev
kas

346

Ubuntuでは、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-dev自分のPython3.4に対してコマンドを実行し、これで問題が解決しました。
アーロンLelevier 2014

4
@Rawrgulmuffinsは、使用しているPythonのバージョンによって異なります。私の場合sudo apt-get install python2.7-dev、問題を修正しました
RockScience

6
この答えにもう1つ追加します。複数のPython 3.xバージョンがある場合、コマンドにpython3-devリンクされているそのバージョンの依存関係をインストールしpython3ます。したがって、特定のバージョン用にインストールする場合は、-などの完全バージョンを使用しpython3.x-devます。
xyres 2017

3
これはUbuntu 14.04のpython 3.6.3に役立ちましたsudo apt-get install python3.6-dev
codestruggle

ご使用のシステムPythonとは異なる仮想環境内でPythonのバージョンを実行している場合、これは。
SuperShoot 2018年

75

特にPython 3.7Ubuntuでは

sudo apt install libpython3.7-dev

。ある時点で名前がpythonm.n-devこれに変わったと思います。

同様にPython 3.6の場合:

sudo apt install libpython3.6-dev

6
ty:tearsofjoy:
valem

1
ワオ。30分程度であらゆる種類のものを検索してインストールした後、この答えは実際に問題を解決しました
Vyacheslav Tsivina

!!!!! もちろん、これはPython 3.7とUbuntu 18.04を使用する私にとって適切なソリューションでした。
villamejia

感謝<3 <3 <3
Coffee inTime

1
それはあまりにものpython 3.6のために働く...しかしsudo apt install libpython3.6-dev
モルテザAfshari

70

あなたがしなければならない2つのこと。

Python用の開発パッケージをインストールします。Debian/ Ubuntu / Mintの場合は、次のコマンドで実行します。

sudo apt-get install python-dev

もう1つは、インクルードファイルがデフォルトでインクルードパスに含まれておらず、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. 14

1
別のバージョンのPython、たとえば3.3を使用している場合:sudo apt-get install python3.3-dev
FreshPow

pkg-configrawの代わりに使用することをお勧めします-Istackoverflow.com/a/21531170/895245
Ciro Santilli冠状病毒审查六四事件法轮功


35

Fedoraでは、これをPython 2で実行します。

sudo dnf install python2-devel

Python 3の場合:

sudo dnf install python3-devel

1
Mint 18.2(Ubuntuベース)では、それはでしたapt-get install python-dev
Deleet、2017

30

複数のバージョンのPythonでテストを実行するためにtoxを使用している場合、テストするPythonのバージョンごとにPython devライブラリをインストールする必要がある場合があります。

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

27

Cygwinのソリューション

使用しているPythonのバージョンに応じて、パッケージ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 2015

2
@Wtowerはい、それは答えを提供します。
Tadeusz Kopec、2015

1
それは答えを提供しません。ただし、必要なバージョンをバージョンに置き換える必要があります。
ガネーシュクリシュナン2015

1
これはpip install cryptography、Amazon 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それで十分でしょう。

コマンドラインからインクルードパスを追加することもできます- gcc -I/usr/lib/python2.7(@ erm3ndaに感謝)。


4
他のすべての答えは、何かをインストールするように指示します。これは私のために働いた。なぜこれが一番の答えではないのですか?
noɥʇʎԀʎzɐɹƆ

1
@uoɥʇʎPʎzɐɹC多分それはpython3で実行されないためでしょうか?
Louis

gcc -I/usr/lib/python2.7 etcinclude呼び出しをハードコードするよりも、libをatに設定することをお勧めします。
m3nda 2017年

1
@noɥʇʎԀʎzɐɹƆコードを変更しなくても機能するため。自分が所有していないコード、たとえば外部依存関係などをコンパイルする必要があることがよくあります。最悪のことは、そのコードを変更することです。
David FerenczyRogožan2017

@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) 


14

私の場合、Ubuntuで修正されたのはパッケージをインストールすることでしたlibpython-all-dev(またはlibpython3-all-devPython 3を使用している場合)。


2
python-all-dev私の場合、十分に近いです。
Dave S.

1
@オリオールニエト、ありがとうございました。python-all-devも問題を解決しました。
shrawan_lakhe

14

3.6 python(現在はエッジ)で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)でもうまくいきました。お使いのバージョンのPythonに適切な開発パッケージを明示的にインストールすることは良いことです。
セス

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:存在しません。elarchivo o el directorioコンパイルは終了しました。

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/

11

また、ubuntuにcoolpropをインストールしているときにもこのエラーが発生しました。

ubuntu 16.04とPython 3.6

sudo apt-get install python3.6-dev

これでうまくいかない場合は、gcclibをインストール/更新してみてください。

sudo apt-get install gcc

1
omg、python3-dev何度も実行して同じエラーが発生し続けたので、これにとても苦労しましたが、それについてはわかりませんでしたpython3.6-dev。ありがとう!!
Blairg23

10

apt-fileを試してください。不足しているファイルが存在するパッケージ名を覚えておくのは困難です。汎用的であり、あらゆるパッケージファイルに役立ちます。

例えば:

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

私はこの問題を解決し、1つのコマンドで.soファイルを生成することができました

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

8

そこにあるOpenSuseの仲間にとって:

sudo zypper install python3-devel

8

CentOS 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で動作させることができました


5

Amazon LinuxでPython 3.6を使用している場合(RHELに基づいていますが、ここに記載されているRHELの回答が機能しません):

sudo yum install python36-devel

4

このエラーは、Python3.6を搭載したCentOS 7にctdsをインストールしようとしたときに発生しました。ここで言及したすべてのトリックを行いました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.6mctdsのリンク時にが見つかりませんでした。

最後に機能したのは、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通常はそれが必要です。


なぜ-1があるのか​​はわかりませんが、CentOSを搭載したpython3.6の場合、python36-develが利用できないため、これは今日の問題です。上記のURLからインストールする必要があります。
Babu Arunachalam 2017年

4

確かに、python-devまたはlibpython-all-devapt)の最初のことですinstallが、私の場合のようにそれが役に立たない場合は、およびによって外部関数インターフェイスパッケージをインストールすることをお勧めします。sudo apt-get install libffi-devsudo pip install cffi

これは、特にas / fromでエラーが発生した場合に役立ちますc/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory


sudo pip3 install cffi(#for python3)
Magnus

3

削除python3.5してインストールしようとするとよく表示されますpython3.6

したがって、python3python3 -V== python3.6)を使用して必要なパッケージをインストールする場合python3.5ヘッダーがこのエラーを表示します。

インストールpython3.6-devモジュールで解決します。


3
  1. オペレーティングシステムに付属のPythonに付属していない場合は、Python開発ファイルをオペレーティングシステムにインストールする必要があります。この質問に対する多くの回答は、これがさまざまなシステムで実現できる無数の方法を示しています。

  2. そうした場合、問題はコンパイラーがどこにあるか、そしてどのようにコンパイルするかをコンパイラーに伝えることです。Pythonにはというプログラムが付属していpython-configます。コンパイルには、--includes出力が必要です。また、プログラムをPythonライブラリに対してリンクする(Pythonをプログラムに埋め込む)には、--ldflags出力が必要です。例:

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

python-config例えば、これらは名前を付けることができますのDebian、Ubuntuの上で-プログラムは、Pythonのバージョンにちなんで命名することができます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.