Używam Ubuntu i zainstalowałem Python 2.7.5 i 3.4.0. W Pythonie 2.7.5 mogę z powodzeniem przypisać zmienną x = Value('i', 2)
, ale nie w 3.4.0. Staje się:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/multiprocessing/context.py", line 132, in Value
from .sharedctypes import Value
File "/usr/local/lib/python3.4/multiprocessing/sharedctypes.py", line 10, in <
module>
import ctypes
File "/usr/local/lib/python3.4/ctypes/__init__.py", line 7, in <module>
from _ctypes import Union, Structure, Array
ImportError: No module named '_ctypes'
Właśnie zaktualizowałem do wersji 3.3.2, instalując źródło 3.4.0. Został zainstalowany w /usr/local/lib/python3.4 .
Czy zaktualizowałem Python 3.4 poprawnie?
Zauważyłem jedną rzecz, że Python 3.4 jest zainstalowany w usr / local / lib , podczas gdy Python 3.3.2 jest nadal zainstalowany w usr / lib , więc nie został nadpisany.
_ctypes
nie został zbudowany, ponieważlibffi-dev
zależność nie była dostępna. Zamiast tego rozważ użycie PPA z martwych węży .Odpowiedzi:
Zainstalowanie
libffi-dev
i ponowne zainstalowanie Pythona3.7 rozwiązało problem.czyste zbudowanie py 3.7
libffi-dev
jest wymagane, w przeciwnym razie później coś się nie powiedzieJeśli używasz RHEL / Fedora:
lub
Jeśli używasz Debian / Ubuntu:
źródło
libffi-dev
ale nadal otrzymuję ten błądldconfig
aby załadować nowy pliklibffi.so
. Głównym celemapt-get install libffi-dev
jest zainstalowanie pliku o nazwie,libffi.so
który możesz sprawdzić przezdpkg -L libffi-dev
@tushar_ecmcpyenv install
), będziesz musiał ponownie skompilować dystrybucję po zainstalowaniu pakietu.Na nowym obrazie Debiana, klonowanie https://github.com/python/cpython i uruchamianie:
Teraz uruchom
configure
plik sklonowany powyżej:Mam zainstalowany 3.7 i działa dla mnie.
NIEWIELKA AKTUALIZACJA
Wygląda na to, że powiedziałem, że zaktualizuję tę odpowiedź o więcej wyjaśnień, a dwa lata później nie mam wiele do dodania.
python-dev
mogą być konieczne.altinstall
przeciwieństwie doinstall
argumentu .Poza tym wydaje mi się, że wybór będzie polegał na przeczytaniu bazy kodu cpython w poszukiwaniu
#include
dyrektyw, które muszą być spełnione, ale zwykle próbuję zainstalować pakiet i po prostu czytać dane wyjściowe instalując wymagane pakiety, aż to nastąpi udaje się.Przypomina mi historię Inżyniera, Menadżera i Programisty, którego samochód stacza się ze wzgórza .
źródło
python3-dev
zamiastpython-dev
.python-dev
wydaje siępython2
.sudo apt-get
? To po prostu nie ma sensu.sudo apt-get
obsługuje pobieranie już skompilowanego kodu, więc dlaczego pobierasz kod, a następnie go nie używasz?sudo
instrukcje instalują wymagania wstępne, aby rozpocząć tworzenie pobranego kodu źródłowego../configure
imake
rzeczy wymaga te rzeczy, które mają być zainstalowane.Jeśli używasz pyenv i otrzymujesz błąd „Brak modułu o nazwie„ _ctypes ”” (tak jak ja) w systemie Debian / Raspbian / Ubuntu, musisz uruchomić następujące polecenia:
Umieść swoją wersję Pythona zamiast 3.7.6
źródło
pyenv
, aby wszystko działało. Korzystanie z pyenv jest o wiele łatwiejsze niż pobieranie kodu źródłowego i robienie wszystkiegomake
na pewno.Szczegółowe kroki instalacji Pythona 3.7 w CentOS lub dowolnej maszynie redhat z systemem Linux:
źródło
Pomyślałem, że dodam instalacje Centos:
Sprawdź wersję Pythona:
python3 -V
Utwórz virtualenv:
virtualenv -p python3 venv
źródło
Biegnę do tego błędu, gdy próbowałem zainstalować Python 3.7.3 w Ubuntu 18.04 z następnego polecenia:
$ pyenv install 3.7.3
. Instalacja powiodła się po uruchomieniu$ sudo apt-get update && sudo apt-get install libffi-dev
(jak sugerowano tutaj ). Problem został rozwiązany tam .źródło
Żadne z rozwiązań nie zadziałało. Musisz ponownie skompilować Pythona; gdy wszystkie wymagane pakiety zostały całkowicie zainstalowane.
Obserwuj to:
./configure --enable-optimizations
https://gist.github.com/jerblack/798718c1910ccdd4ede92481229043be
źródło
Zapoznaj się z tym wątkiem lub tym wątkiem , aby uzyskać niestandardową instalację libffi, Python3.7 ma trudności ze znalezieniem lokalizacji biblioteki libffi. Alternatywną metodą jest na przykład ustawienie
CONFIGURE_LDFLAGS
zmiennej w pliku MakefileCONFIGURE_LDFLAGS="-L/path/to/libffi-3.2.1/lib64"
.źródło
Moje rozwiązanie: instalacja libffi-dev za pomocą apt-get nie pomogła. Ale to pomogło: instalacja libffi ze źródła, a następnie zainstalowanie Pythona 3.8 ze źródła.
Moja konfiguracja: Ubuntu 16.04 LTS Python 3.8.2
Krok po kroku:
Otrzymałem komunikat o błędzie „ModuleNotFoundError: brak modułu o nazwie„ _ctypes ”” podczas uruchamiania debugera z programu Visual Studio Code i podczas uruchamiania
python3 -c "import sklearn; sklearn.show_versions()"
.sudo apt-get install libtool
plik README.md z libffi wspomina, że konieczne są również autoconf i automake. Zostały już zainstalowane w moim systemie../configure --disable-docs
make check
sudo make install
./configure
make
make test
make install
Po tym moja instalacja Pythona mogła znaleźć _ctypes.
źródło
To rozwiązało ten sam błąd dla mnie w Debianie :
i skompiluj ponownie
Numer referencyjny: issue31652
źródło
Jeśli nie masz nic przeciwko używaniu Minicondy , niezbędne biblioteki zewnętrzne i _ctypes są instalowane domyślnie. Zajmuje więcej miejsca i może wymagać użycia nieco starszej wersji Pythona (np. 3.7.6 zamiast 3.8.2 w chwili pisania tego tekstu).
źródło
Musisz załadować brakujące moduły php3 (Python3) z menedżera pakietów. Jeśli masz Ubuntu, polecam
Synaptic Package Manager
:Tam możesz po prostu wyszukać brakujące moduły. wyszukaj ctypes i zainstaluj wszystkie pakiety. Następnie przejdź do swojego katalogu Python i zrób
To powinno rozwiązać twój problem.
źródło
Miałem ten sam problem. Żadne z powyższych rozwiązań nie zadziałało. Głównym wyzwaniem było to, że nie miałem dostępu do roota. Więc najpierw pobieram źródło libffi. Następnie skompilowałem go za pomocą zwykłych poleceń:
Następnie ponownie skompilowałem Pythona za pomocą
W moim przypadku „home / user123 / Softwares / library / libffi / installation / lib64” to ścieżka do katalogu instalacyjnego LIBFFI, w którym znajduje się libffi.so. A / home / user123 / Softwares / Python / installation3 / to ścieżka do katalogu instalacyjnego Pythona. Zmodyfikuj je zgodnie ze swoim przypadkiem.
źródło
Jeśli coś robisz, nikt cię tutaj nie posłucha, ponieważ "robisz to w zły sposób", ale musisz to zrobić "w niewłaściwy sposób" z powodów zbyt głupich (na przykład w moim przypadku szybko się to psuje słowa o kimś w zespole devops z nadwagą matką), najpierw musisz:
Pobierz libffi i zainstaluj go w obszarze instalacji użytkownika w zwykły sposób.
Następnie wróć do źródła Python 3 i znajdź tę część kodu w setup.py na najwyższym poziomie katalogu źródłowego Pythona
i dodaj wiersz, który zaznaczyłem powyżej z komentarzem. Dlaczego jest to konieczne i dlaczego nie ma sposobu, aby skonfigurować przestrzeganie „--without-system-ffi” na platformach Linux, być może dowiem się, dlaczego jest to „nieobsługiwane” w ciągu najbliższych kilku godzin, ale wszystko pracował od tamtej pory. W przeciwnym razie powodzenia ... YMMV.
CO ROBI: po prostu nadpisuje tam logikę i powoduje, że polecenie łączenia kompilatora dodaje „-lffi”, czyli wszystko, czego naprawdę potrzebuje. Jeśli masz bibliotekę zainstalowaną przez użytkownika, prawdopodobnie wykrywa ona nagłówki dobrze, o ile
PKG_CONFIG_PATH
zawiera onapath/to/your/install/root/lib/pkgconfig
.źródło