web-dev-qa-db-ja.com

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

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

gcc -Wall utilsmodule.c -o Utilc

コマンドを実行した後、私はこのエラーメッセージを得ます:

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

実際、私はインターネット上で提案されたすべての解決策を試してみましたが、問題はまだ存在しています... Python.hに関しても問題はありません。私は自分のマシン上でファイルを見つけることに成功しました...誰かが以前に同じ問題に直面したことがありますか?

890
Mohanad Y.

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

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

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 python34-devel   # for python3.4 installs

dnf Fedora ... )の場合:

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

apt-cyg Cygwin ... )の場合:

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

Ubuntuでは、私はPython 3を実行していたのでインストールしなければなりませんでした

Sudo apt-get install python3-dev

Python3にリンクされていないバージョンのPythonを使用したい場合は、関連するpython3.x-devパッケージをインストールしてください。例えば:

Sudo apt-get install python3.5-dev
266
FreshPow

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

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

Sudo apt-get install python-dev

2つ目は、インクルードファイルがデフォルトでインクルードパスに含まれていないこと、およびPythonライブラリがデフォルトで実行ファイルにリンクされていないことです。これらのフラグを追加する必要があります(それに応じてPythonのバージョンを置き換えます)。

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

言い換えれば、あなたのコンパイルコマンドは次のようになるはずです。

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

ラズベリーパイを使用している場合

Sudo apt-get install python-dev
46
Malachi Bazar

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

Sudo dnf install python2-devel

そしてPython 3の場合:

Sudo dnf install python3-devel
34
ravi.zombie

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

Sudo apt-get install python2.6-dev 
Sudo apt-get install python2.7-dev 
etc.
29
Christian Long

Cygwinの解決策

使用しているPythonのバージョンに応じて、 パッケージpython2-develまたはpython3-develをインストールする必要があります。

Cygwin.com から 32-bit または 64-bitsetup.exe(インストール環境によります)を使って素早くインストールできます。

例(必要ならばsetup.exeのファイル名とPythonのメジャーバージョンを変更します):

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

コマンドラインからCygwinのパッケージをインストールするためのその他のオプションについては、私の other answer をチェックすることもできます。

AWS API(centOS)では、

yum install python27-devel
21
yespbs

私にとっては、これに変更するとうまくいきました。

#include <python2.7/Python.h>

私はファイル/usr/include/python2.7/Python.hを見つけました、そして、/usr/includeはすでにインクルードパスにあるので、python2.7/Python.hは十分であるべきです。

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

20
sashoalm

Python34を実行しているAWS EC2インストール:

Sudo yum install python34-devel

15
orsonady

Python devファイルがあなたのOSに付属していることを確認してください。

ライブラリをハードコードしてパスを含めるべきではありません。代わりに、あなたの特定のシステムに正しいオプションを出力するpkg-configを使ってください。

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

あなたはそれをあなたの gcc 行に追加することができます。

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

それは同じ状況ではありませんが、それは私のためにも動作し、今私は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 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/
13
Hugo L.M

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

13
Oriol Nieto

3.6 python(今のところEdge)でvirtualenvを使用する場合、必ず対応するpython 3.6 dev Sudo apt-get install python3.6-devをインストールしてください。そうしないとSudo python3-devを実行してもpython dev 3.3.3-1がインストールされ、問題は解決しません。

12
Guillaume Cisco

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# 

今、あなたは専門家にどれを選ぶべきかについて推測させることができます。

9
Venfah Nazir

私はまた私がubuntuにcoolpropをインストールしていたときにこのエラーに遭遇しました。

Python 3.6を使用するUbuntu 16.04の場合

Sudo apt-get install python3.6-dev

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

Sudo apt-get install gcc
8
Wreeecks

OpenSuseの仲間たちのために:

Sudo zypper install python3-devel
8
kmonsoor

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で動かすことができた

8
Steve G

このエラーは、Python 3.6を使用してCentOS 7にctdsをインストールしようとしたときに発生しました。 yum install python34-develを含む、ここで述べたすべてのトリックをやりました。問題はPython.h/usr/include/python3.4m but not in /usr/include/python3.6mに見つかったことです。 dir(--global-option)をインクルードするためにpip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctdsを使用しようとしました。これにより、ctdをリンクするときに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にあるはずです。

4

確かにpython-devまたはlibpython-all-devが(aptinstallの最初のものですが、それでも問題が解決しない場合は、Sudo apt-get install libffi-devおよびSudo pip install cffiを使用して 外部関数インターフェース packagesをインストールすることをお勧めします。

特にc/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directoryのエラーが表示される場合は、これが役立ちます。

4
Huge

Python 3.7および特にUbuntuの場合、

Sudo apt install libpython3.7-dev

。ある時点で、名前がpythonm.n-devからこれに変更されたと思います。

2
ijoseph

python3.5を削除してpython3.6をインストールしようとしたときによく見られます。

そのため、いくつかのパッケージをインストールするためにpython3(which python3 -V => python3.6)を使用する場合、python3.5ヘッダーが必要なのでこのエラーが表示されます。

Install python3.6-devモジュールで解決します。

2
dphans

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(Alpine ...)の場合:

Sudo apk gcc
2
HimanshuGahlot

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

Sudo yum install python36-devel
2
Yigal

これは、Python.hがコンパイラのデフォルトのインクルードパスに含まれていないことを意味します。システム全体またはローカルにインストールしましたか。あなたのOSは何ですか?

-I<path>フラグを使用して、コンパイラがヘッダを探す追加のディレクトリを指定できます。 gccが-L<path>を使用してリンクするライブラリを見つけることができるように、おそらく-l<name>をフォローアップする必要があります。

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

  2. とき あなたがそうしたとき、問題はそれらがどこにあるかそしてそれらに対してどのようにコンパイルするかをコンパイラに伝えることです。 Pythonにはpython-configというプログラムが付属しています。コンパイルには--icnludes出力が必要です。プログラムを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と命名することができます。

0
Antti Haapala