Próbuję zbudować bibliotekę współdzieloną przy użyciu pliku rozszerzenia C, ale najpierw muszę wygenerować plik wyjściowy za pomocą poniższej komendy:
gcc -Wall utilsmodule.c -o Utilc
Po wykonaniu polecenia pojawia się następujący komunikat o błędzie:
utilsmodule.c: 1: 20: błąd krytyczny: Python.h: Żadna taka kompilacja pliku lub katalogu nie została zakończona.
Wypróbowałem wszystkie sugerowane rozwiązania przez Internet, ale problem nadal występuje. Nie mam z tym problemu Python.h
. Udało mi się zlokalizować plik na moim komputerze.
źródło
locate Python.h
to zrobić, zanim już to zrobisz. Jeśli znajdziesz plik znajdujący się, przeważnie ta odpowiedź będzie działać: stackoverflow.com/a/19344978/4954434 (Może to być tylko problem ze ścieżką)sudo yum install python27-devel
apt-get install python3.6-dev
pracował dla mnie.sudo apt-get install python3.6-dev
sudo apt-get install python3.7-dev
.Na Ubuntu działałem w Pythonie 3 i musiałem zainstalować
Jeśli chcesz użyć wersji Pythona, która nie jest połączona z python3, zainstaluj powiązany pakiet python3.x-dev. Na przykład:
źródło
sudo apt-get install python3.4-dev
dla mojego Python3.4 i to rozwiązało mój problem.sudo apt-get install python2.7-dev
naprawiono problempython3-dev
zainstaluję zależności dla tej wersji, która jest połączona zpython3
poleceniem. Jeśli chcesz zainstalować konkretną wersję, użyj pełnej wersji, takiej jak -python3.x-dev
.sudo apt-get install python3.6-dev
W szczególności dla Python 3.7 i Ubuntu potrzebowałem
sudo apt install libpython3.7-dev
. Myślę, że w pewnym momencie nazwy zostały zmienione z
pythonm.n-dev
na to.w przypadku Pythona 3.6 podobnie:
sudo apt install libpython3.6-dev
źródło
sudo apt install libpython3.6-dev
Dwie rzeczy, które musisz zrobić.
Zainstaluj pakiet programistyczny dla Pythona, w przypadku Debian / Ubuntu / Mint odbywa się to za pomocą polecenia:
Po drugie, pliki dołączane nie są domyślnie w ścieżce dołączania, a biblioteka Pythona nie jest domyślnie połączona z plikiem wykonywalnym. Musisz dodać te flagi (odpowiednio zastąp wersję Pythona):
Innymi słowy, Twoim poleceniem kompilacji powinno być:
źródło
pkg-config
zamiast surowego-I
: stackoverflow.com/a/21531170/895245Jeśli używasz Raspberry Pi:
źródło
na Fedorze uruchom to dla Pythona 2:
i dla Python 3:
źródło
apt-get install python-dev
.Jeśli używasz programu toksycznego do uruchamiania testów na wielu wersjach Pythona, może być konieczne zainstalowanie bibliotek programistycznych Pythona dla każdej wersji testowanego Pythona.
źródło
Rozwiązanie dla Cygwin
Musisz zainstalować pakiet
python2-devel
lubpython3-devel
, w zależności od używanej wersji Pythona.Możesz go szybko zainstalować za pomocą 32-bitowego lub 64-bitowego
setup.exe
(w zależności od instalacji) z Cygwin.com .Przykład (
setup.exe
w razie potrzeby zmodyfikuj nazwę pliku i główną wersję Pythona):Możesz także sprawdzić moją drugą odpowiedź, aby uzyskać kilka dodatkowych opcji instalacji pakietów Cygwin z wiersza poleceń.
źródło
W AWS API (centOS) jego
źródło
pip install cryptography
instancją Linux-a Amazon.Dla mnie zmiana na tę działała:
Znalazłem plik
/usr/include/python2.7/Python.h
, a ponieważ/usr/include
jest już w ścieżce dołączania,python2.7/Python.h
powinien wystarczyć.Możesz także dodać ścieżkę dołączania z wiersza poleceń -
gcc -I/usr/lib/python2.7
(dzięki @ erm3nda).źródło
gcc -I/usr/lib/python2.7 etc
niż zakodować na stałe wywołania włączenia.Upewnij się, że pliki deweloperskie Python są dostarczane wraz z systemem operacyjnym.
Nie należy na stałe kodować biblioteki i zawierać ścieżek. Zamiast tego użyj pkg-config, który wyświetli prawidłowe opcje dla twojego systemu:
Możesz dodać go do linii gcc :
źródło
Instalacja AWS EC2 z uruchomionym python34:
sudo yum install python34-devel
źródło
W moim przypadku tym, co naprawiło to w Ubuntu, była instalacja pakietów
libpython-all-dev
(lublibpython3-all-dev
jeśli używasz Python 3).źródło
python-all-dev
w moim przypadku, ale wystarczająco blisko.Jeśli używasz virtualenv z pythonem 3.6 (teraz Edge), zainstaluj pasujące do niego python 3.6 dev
sudo apt-get install python3.6-dev
, w przeciwnym razie wykonaniesudo python3-dev
spowoduje zainstalowanie python dev 3.3.3-1, co nie rozwiąże problemu.źródło
To nie jest ta sama sytuacja, ale działa również dla mnie i teraz mogę używać SWIG z Python3.5 :
Próbowałem skompilować:
Z Pythonem 2.7 działa dobrze, nie z moją wersją 3.5:
Po uruchomieniu w mojej instalacji Ubuntu 16.04:
Teraz mogę kompilować bez problemów Python3.5:
źródło
Ten błąd również napotkałem, gdy instalowałem Coolprop w Ubuntu.
Dla Ubuntu 16.04 z python 3.6
Jeśli to nie zadziała, spróbuj zainstalować / zaktualizować
gcc
lib.źródło
python3-dev
wiele razy i ciągle otrzymywałem ten sam błąd, ale nie wiedziałem o tympython3.6-dev
!! Dzięki!!spróbuj apt-file. Trudno zapamiętać nazwę pakietu, w którym znajduje się brakujący plik. Jest ogólny i przydatny dla wszystkich plików pakietów.
Na przykład:
Teraz możesz zgadnąć, który z nich wybrać.
źródło
Udało mi się rozwiązać ten problem i wygenerować plik .so w jednym poleceniu
źródło
Dla towarzyszy OpenSuse:
źródło
W przypadku CentOS 7:
Postępowałem zgodnie z instrukcjami tutaj, aby zainstalować Python3.6 na kilku maszynach wirtualnych: https://www.digitalocean.com/community/tutorials/how-to-install-python-3-and-set-up-a-local-programming- environment-on-centos-7, a następnie był w stanie zbudować mod_wsgi i uruchomić go z wirtualnym python3.6
źródło
Jeśli używasz Pythona 3.6 w Amazon Linux (oparty na RHEL, ale odpowiedzi RHEL podane tutaj nie działały):
źródło
Ten błąd wystąpił, gdy próbowałem zainstalować ctds na CentOS 7 z Python3.6. Zrobiłem wszystkie sztuczki wymienione tutaj, w tym
yum install python34-devel
. ProblemPython.h
został znaleziony w/usr/include/python3.4m but not in /usr/include/python3.6m
. Próbowałem użyć,--global-option
aby wskazać dołączenie dir (pip3.6 install --global-option=build_ext --global-option="--include-dirs=/usr/include/python3.4m" ctds
). Spowodowało to, żelpython3.6m
nie znaleziono podczas łączenia ctds.Wreszcie to, co zadziałało, to naprawienie środowiska programistycznego dla Python3.6 musi zostać poprawione za pomocą dołączeń i bibliotek lib.
Python.h musi znajdować się w ścieżce dołączania dla gcc. Niezależnie od tego, która wersja Pythona jest używana, na przykład, jeśli jest to wersja 3.6, powinna ona być
/usr/include/python3.6m/Python.h
zwykle.źródło
Jasne,
python-dev
czylibpython-all-dev
są pierwszą rzeczą (apt
)install
, ale jeśli to nie pomoże, tak jak w moim przypadku, radzę zainstalować zagraniczne pakiety interfejsu funkcji przezsudo apt-get install libffi-dev
isudo pip install cffi
.To powinno pomóc, zwłaszcza jeśli widzisz błąd jako / z
c/_cffi_backend.c:2:20: fatal error: Python.h: No such file or directory
.źródło
Często pojawia się, gdy próbujesz usunąć
python3.5
i zainstalowaćpython3.6
.Tak więc przy użyciu
python3
(którypython3 -V
=>python3.6
) do zainstalowania niektórych pakietów wymaganypython3.5
nagłówek pojawi się ten błąd.Rozwiąż za pomocą
python3.6-dev
modułu instalacyjnego .źródło
Musisz zainstalować pliki programistyczne Python w swoim systemie operacyjnym, jeśli Python dostarczony z systemem operacyjnym nie jest dostarczany z nimi. Wiele odpowiedzi na to pytanie pokazuje niezliczone możliwości osiągnięcia tego w różnych systemach.
Gdy to zrobisz, problemem jest poinformowanie kompilatora, gdzie się znajdują i jak skompilować z nimi. Python jest dostarczany z programem o nazwie
python-config
. Do kompilacji potrzebne są dane--includes
wyjściowe, a do połączenia programu z biblioteką Python (osadzanie Pythona w programie) dane--ldflags
wyjściowe. Przykład:python-config
Program może być nazwany wersji Pythona - na Debianie, Ubuntu na przykład te mogą być nazwanepython3-config
lubpython3.6-config
.źródło
Czasami nawet po zainstalowaniu Python-dev błąd nadal występuje, sprawdź, czy nie ma błędu „gcc”.
Najpierw pobierz zgodnie z https://stackoverflow.com/a/21530768/8687063 , a następnie zainstaluj gcc
W przypadku apt (Ubuntu, Debian ...):
Dla mniam (CentOS, RHEL ...):
W przypadku dnf (Fedora ...):
W przypadku zyppera (openSUSE ...):
Dla apk (Alpine ...):
źródło
Oznacza to, że
Python.h
nie ma domyślnych ścieżek dołączania kompilatora. Czy zainstalowałeś go w całym systemie lub lokalnie? Jaki masz system operacyjny?Można użyć
-I<path>
flagi, aby określić dodatkowy katalog, w którym kompilator powinien szukać nagłówków. Prawdopodobnie będziesz musiał to-L<path>
zrobić, aby gcc mógł znaleźć bibliotekę, z którą będziesz się łączył-l<name>
.źródło