C拡張ファイルを使用して共有ライブラリを構築しようとしていますが、最初に以下のコマンドを使用して出力ファイルを生成する必要があります。
gcc -Wall utilsmodule.c -o Utilc
コマンドを実行した後、私はこのエラーメッセージを得ます:
utilsmodule.c:1:20:致命的エラー:Python.h:そのようなファイルまたはディレクトリのコンパイルは終了しませんでした。
実際、私はインターネット上で提案されたすべての解決策を試してみましたが、問題はまだ存在しています... Python.h
に関しても問題はありません。私は自分のマシン上でファイルを見つけることに成功しました...誰かが以前に同じ問題に直面したことがありますか?
この問題を解決し、1つのコマンドで.soファイルを生成することができました
gcc -shared -o UtilcS.so
-fPIC -I/usr/include/python2.7 -lpython2.7 utilsmodule.c
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
Ubuntuでは、私はPython 3を実行していたのでインストールしなければなりませんでした
Sudo apt-get install python3-dev
Python3にリンクされていないバージョンのPythonを使用したい場合は、関連するpython3.x-devパッケージをインストールしてください。例えば:
Sudo apt-get install python3.5-dev
あなたがしなければならない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
ラズベリーパイを使用している場合
Sudo apt-get install python-dev
fedoraではPython 2でこれを実行します。
Sudo dnf install python2-devel
そしてPython 3の場合:
Sudo dnf install python3-devel
tox を使用して複数のバージョンのPythonでテストを実行している場合は、テストしている各バージョンのPythonに対してPython devライブラリをインストールする必要があります。
Sudo apt-get install python2.6-dev
Sudo apt-get install python2.7-dev
etc.
使用している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
私にとっては、これに変更するとうまくいきました。
#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)。
Python34を実行しているAWS EC2インストール:
Sudo yum install python34-devel
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
それは同じ状況ではありませんが、それは私のためにも動作し、今私は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/
私の場合、Ubuntuでそれを修正したのは、パッケージlibpython-all-dev
(またはPython 3を使用している場合はlibpython3-all-dev
)をインストールすることでした。
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がインストールされ、問題は解決しません。
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#
今、あなたは専門家にどれを選ぶべきかについて推測させることができます。
私はまた私がubuntuにcoolpropをインストールしていたときにこのエラーに遭遇しました。
Python 3.6を使用するUbuntu 16.04の場合
Sudo apt-get install python3.6-dev
これでうまくいかない場合は、gcc
libをインストール/更新してみてください。
Sudo apt-get install gcc
OpenSuseの仲間たちのために:
Sudo zypper install python3-devel
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で動かすことができた
このエラーは、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
にあるはずです。
確かにpython-dev
またはlibpython-all-dev
が(apt
)install
の最初のものですが、それでも問題が解決しない場合は、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
のエラーが表示される場合は、これが役立ちます。
Python 3.7および特にUbuntuの場合、
Sudo apt install libpython3.7-dev
。ある時点で、名前がpythonm.n-dev
からこれに変更されたと思います。
python3.5
を削除してpython3.6
をインストールしようとしたときによく見られます。
そのため、いくつかのパッケージをインストールするためにpython3
(which python3 -V
=> python3.6
)を使用する場合、python3.5
ヘッダーが必要なのでこのエラーが表示されます。
Install python3.6-dev
モジュールで解決します。
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
Amazon Linux上でPython 3.6を使用している場合(RHELに基づいていますが、ここで示されているRHELの回答は機能しませんでした)。
Sudo yum install python36-devel
これは、Python.h
がコンパイラのデフォルトのインクルードパスに含まれていないことを意味します。システム全体またはローカルにインストールしましたか。あなたのOSは何ですか?
-I<path>
フラグを使用して、コンパイラがヘッダを探す追加のディレクトリを指定できます。 gccが-L<path>
を使用してリンクするライブラリを見つけることができるように、おそらく-l<name>
をフォローアップする必要があります。
オペレーティングシステムに付属のPythonが付属していない場合は、オペレーティングシステムにPython開発ファイルをインストールする必要があります。この質問に対する多くの回答は、これがさまざまなシステムで達成できる無数の方法を示しています。
とき あなたがそうしたとき、問題はそれらがどこにあるかそしてそれらに対してどのようにコンパイルするかをコンパイラに伝えることです。 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
と命名することができます。