Python3 : ImportError : 모듈 다중 처리의 값을 사용할 때 '_ctypes'라는 모듈이 없습니다.


127

Ubuntu를 사용하고 있으며 Python 2.7.5 및 3.4.0을 설치했습니다. Python 2.7.5에서는 변수를 성공적으로 할당 할 수 x = Value('i', 2)있지만 3.4.0에서는 할당 할 수 없습니다. 나는 얻고있다:

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'

3.4.0 소스를 설치하여 3.3.2로 업데이트했습니다. /usr/local/lib/python3.4에 설치되었습니다 .

Python 3.4로 올바르게 업데이트 했습니까?

Python 3.4가 usr / local / lib 에 설치되어있는 반면 Python 3.3.2는 여전히 usr / lib에 설치되어 있으므로 덮어 쓰지 않았습니다.


"3.4.0의 소스를 설치"하는 동안 문제가 발생한 것 같습니다. 그게 정확히 무슨 뜻입니까? 3.3.2에서 작동하는 명령입니까?
mechanical_meat

sudo make install 명령을 사용하여 소스 코드에서 설치했습니다. 예 다중 처리에서 값 가져 오기는 3.3.2에서 작동했습니다.
htc_m8 2014

8
_ctypeslibffi-dev종속성을 사용할 수 없기 때문에 빌드 되지 않았습니다. 대신 deadsnakes PPA 를 사용하는 것이 좋습니다.
Eryk Sun

11
설치 libffi-DEV하고 다시 설치 python3.4 나를 위해 문제를 해결
htc_m8

답변:


227

libffi-devpython3.7을 설치 하고 다시 설치하면 문제가 해결되었습니다.

py 3.7을 깨끗하게 빌드 libffi-dev 하려면 필요합니다. 그렇지 않으면 나중에 실패합니다.

RHEL / Fedora를 사용하는 경우 :

yum install libffi-devel

또는

sudo dnf install libffi-devel

Debian / Ubuntu를 사용하는 경우 :

sudo apt-get install libffi-dev

35
내가 설치 한 libffi-dev하지만 난 여전히이 오류를 얻고있다
tushar_ecmc

2
linux ldconfig를 사용하는 경우 새 libffi.so. 의 주요 목적은 @tushar_ecmc에서 확인할 수 apt-get install libffi-dev있는 파일을 설치하는 것입니다libffi.sodpkg -L libffi-dev
Ben-xue

15
컴파일 한 경우 자체 Python 배포 (예 :를 통해 pyenv install) 인 경우 패키지를 설치 한 후 배포를 다시 컴파일해야합니다.
ned

121

새로운 Debian 이미지에서 https://github.com/python/cpython을 복제 하고 다음을 실행합니다.

sudo apt-get update
sudo apt-get upgrade
sudo apt-get dist-upgrade
sudo apt-get install build-essential python-dev python-setuptools python-pip python-smbus
sudo apt-get install libncursesw5-dev libgdbm-dev libc6-dev
sudo apt-get install zlib1g-dev libsqlite3-dev tk-dev
sudo apt-get install libssl-dev openssl
sudo apt-get install libffi-dev

이제 configure위에서 복제 한 파일을 실행합니다 .

./configure
make # alternatively `make -j 4` will utilize 4 threads
sudo make altinstall

3.7을 설치하고 나를 위해 일했습니다.

약간의 업데이트

이 답변을 더 많은 설명으로 업데이트하겠다고 말한 것 같습니다. 2 년 후에는 추가 할 내용이 많지 않습니다.

  • 이 SO 게시물은 특정 라이브러리 python-dev가 필요한 이유를 설명 합니다.
  • 이 SO 게시물make 명령 에서 인수가 altinstall아닌 install인수를 사용할 수있는 이유를 설명합니다 .

그 외에도 cpython 코드베이스 #include를 통해 충족해야 할 지시문을 읽는 것이 선택이 될 것이라고 생각 하지만 일반적으로 패키지를 설치하려고 계속 시도하고 필요한 패키지를 설치할 때까지 출력을 계속 읽는 것입니다. 성공합니다.

자동차가 언덕을 내려가는 엔지니어, 관리자 및 프로그래머 의 이야기가 생각납니다 .


3
환상적입니다. 이제 위의 목록을 어떻게 얻었는지 말씀해 주시겠습니까? 시행 착오로? : -O
Veky

4
솔직히, @Veky는 "ImportError : No module named '_ctypes'"라는 오류에 대해 웹 검색을 수행했으며, 작동하기 전에 몇 가지 작업을 시도했을 것입니다. APT, Python, make 등에 대한 나의 부족한 이해로 명확하게 답변을 업데이트 할
예정입니다

python3-dev대신 이어야합니다 python-dev. python-dev에 대한 것 같습니다 python2.
Timo

소스 코드 저장소를 복제 한 다음 사용하는 이유는 무엇 sudo apt-get입니까? 그건 말이 안 돼요. sudo apt-get이미 컴파일 된 코드의 다운로드를 처리하는데 왜 코드를 다운로드 한 다음 사용하지 않습니까?
Ryan

1
@MikeiLL sudo다운로드 한 소스 코드를 빌드하기 위해 모든 명령문이 필수 구성 요소를 설치 하고 있음을 깨달았습니다 . ./configuremake물건 그 일을 설치해야합니다.
라이언

30

pyenv를 사용하고 Debian / Raspbian / Ubuntu에서 "No module named '_ctypes'"(예 : 나처럼) 오류가 발생하면 다음 명령을 실행해야합니다.

sudo apt-get install libffi-dev
pyenv uninstall 3.7.6
pyenv install 3.7.6

3.7.6 대신 Python 버전을 넣으십시오.


스택 오버플로에 오신 것을 환영합니다. 더 많은 정보를 제공 할 수 있습니까? 참조 등을 확인하고 stackoverflow.com/help/how-to-answer
Nodejs-nerd

답변 주셔서 감사합니다. 가장 많이 득표 한 사람이 필요한 전체 목록을 가지고 있었지만 pyenv실제로 작업을 수행하려면 via를 다시 설치해야한다는 생각이 들었습니다 . pyenv를 사용하는 것은 소스 코드를 잡고 모든 것을 make확실히 하는 것 보다 훨씬 쉽습니다 .
dragon788

이것은 Ubuntu에서 나를 위해 일했습니다. 간단하고 효과적입니다.
Phil

감사합니다. 도움이되었습니다. pyenv의 전제 조건 전체 목록을 보려면 github.com/pyenv/pyenv/wiki/Common-build-problems#prerequisites를
Paweł Mucha

먼저 Python을 제거 할 필요가 없습니다. 다시 설치하면 Python 바이너리가 다시 컴파일되며 그게 필요합니다.
RusI

22

CentOS 또는 Redhat Linux 시스템에 Python 3.7을 설치하는 자세한 단계 :

  1. https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz 에서 Python을 다운로드합니다.
  2. 새 폴더에서 콘텐츠 추출
  3. 동일한 디렉토리에서 터미널 열기
  4. 아래 코드를 단계별로 실행하십시오.
sudo yum -y install gcc gcc-c++ 
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel 
./configure
make
make install

14

Centos 설치를 추가 할 것이라고 생각했습니다.

sudo yum -y install gcc gcc-c++ 
sudo yum -y install zlib zlib-devel
sudo yum -y install libffi-devel 

파이썬 버전 확인 :

python3 -V

virtualenv 생성 :

virtualenv -p python3 venv


2
저품질로 표시되었으며 검토 대기열에서 확인 중입니다. 독립형 답변으로 작동하지 않습니다. 삭제를 권하고 싶지만 확장하면 개선 할 수 있을까요?
dbliss 2017-10-05

11

내가 설치하려고 할 때이 오류로 실행 파이썬 3.7.3우분투 18.04 다음 명령을 : $ pyenv install 3.7.3. 실행 후 설치가 성공했습니다 $ sudo apt-get update && sudo apt-get install libffi-dev( 여기에 제안 된대로 ). 문제가 해결 되었습니다 .


6

어떤 해결책도 효과가 없었습니다. 파이썬을 다시 컴파일해야합니다. 모든 필수 패키지가 완전히 설치되면.

이것을 따르십시오 :

  1. 필수 패키지 설치
  2. 운영 ./configure --enable-optimizations

https://gist.github.com/jerblack/798718c1910ccdd4ede92481229043be


2
실제로 좋은 대답입니다. 모든 사람들은 libffi-devel이 필요하고 그것을 해결할 것이라고 언급합니다. 문제는 파이썬을 다시 컴파일해야한다는 것입니다. 나는 alsmot가 libffi를 포기했습니다.
Aleksander Fular

3

이 스레드 또는 이 스레드를 참조하십시오. libffi의 사용자 정의 설치에 대해서는 Python3.7이 libffi의 라이브러리 위치를 찾기가 어렵습니다. 다른 방법은 CONFIGURE_LDFLAGSMakefile 에서 변수 를 설정하는 것 입니다 (예 : CONFIGURE_LDFLAGS="-L/path/to/libffi-3.2.1/lib64".


링크가 끊어졌습니다. 여기에 표시된대로 Makefile에서 수정을 시도했지만 작동하지 않았습니다. _ctypes는 아직 빌드되지 않았습니다.
user5915738

다른 스레드 링크를 추가했습니다.
펑키

2

내 솔루션 : apt-get으로 libffi-dev를 설치해도 도움이되지 않았습니다. 그러나 이것은 도움이되었습니다 : 소스에서 libffi를 설치 한 다음 소스에서 Python 3.8을 설치하십시오.

내 구성 : Ubuntu 16.04 LTS Python 3.8.2

단계별 :

Visual Studio Code에서 디버거를 시작하고 python3 -c "import sklearn; sklearn.show_versions()".

  • https://github.com/libffi/libffi/releases 에서 libffi v3.3을 다운로드합니다.
  • libtool 설치 : sudo apt-get install libtool libffi의 README.md 파일에는 autoconf 및 automake도 필요하다고 언급되어 있습니다. 내 시스템에 이미 설치되어 있습니다.
  • 문서없이 libffi 구성 :

./configure --disable-docs

make check

sudo make install

그 후 파이썬 설치가 _ctypes를 찾을 수 있습니다.


2

이것은 데비안 에서 동일한 오류를 해결 했습니다 .

sudo apt-get install libffi-dev

다시 컴파일

참조 : issue31652


0

Miniconda를 사용해도 괜찮다 면 필요한 외부 라이브러리와 _ctypes가 기본적으로 설치됩니다. 더 많은 공간을 차지하고 적당히 이전 버전의 Python을 사용해야 할 수 있습니다 (예 :이 글을 쓰는 시점에서 3.8.2 대신 3.7.6).


0

패키지 관리자에서 누락 된 php3 (Python3) 모듈을로드해야합니다. Ubuntu가있는 경우 다음을 권장합니다 Synaptic Package Manager.

sudo apt-get install synaptic

여기에서 누락 된 모듈을 간단히 검색 할 수 있습니다. ctypes를 검색하고 모든 패키지를 설치하십시오. 그런 다음 Python 디렉토리로 이동하여

./configure
make install.

이것은 당신의 문제를 해결할 것입니다.


0

나는 같은 문제를 겪고 있었다. 위의 솔루션 중 어느 것도 나를 위해 일하지 않았습니다. 핵심 과제는 루트 액세스 권한이 없다는 것입니다. 그래서 먼저 libffi의 소스를 다운로드합니다. 그런 다음 일반적인 명령으로 컴파일했습니다.

./configure --prefix=desired_installation_path_to_libffi
make 

그런 다음 사용하여 파이썬을 다시 컴파일했습니다.

./configure --prefix=/home/user123/Softwares/Python/installation3/  LDFLAGS='-L/home/user123/Softwares/library/libffi/installation/lib64'
make 
make install

필자의 경우 'home / user123 / Softwares / library / libffi / installation / lib64'는 libffi.so가있는 LIBFFI 설치 디렉토리의 경로입니다. 그리고 / home / user123 / Softwares / Python / installation3 /은 Python 설치 디렉터리의 경로입니다. 귀하의 경우에 따라 수정하십시오.


-1

만약 당신이 뭔가를하고 있다면 여기에서 아무도 "당신이 잘못된 방식으로하고 있기 때문에"당신의 말을 듣지 않을 것입니다. 그러나 당신은 너무 어리석은 이유로 "잘못된 방식"으로해야합니다 (예를 들어, 제 경우에는 그것은 빨리 파울로 떨어집니다. devops 팀 과체중 어머니의 누군가에 대한 단어), 먼저해야합니다.

libffi를 가져 와서 일반적인 방법으로 사용자 설치 영역에 설치하십시오.

git clone https://github.com/libffi/libffi.git
cd libffi
./configure --prefix=path/to/your/install/root
make
make install

그런 다음 Python 3 소스로 돌아가서 Python 소스 디렉터리의 최상위 수준에있는 setup.py에서 코드의이 부분을 찾습니다.

        ffi_inc = [sysconfig.get_config_var("LIBFFI_INCLUDEDIR")]
        if not ffi_inc or ffi_inc[0] == '':
            ffi_inc = find_file('ffi.h', [], inc_dirs)
        if ffi_inc is not None:
            ffi_h = ffi_inc[0] + '/ffi.h'
            if not os.path.exists(ffi_h):
                ffi_inc = None
                print('Header file {} does not exist'.format(ffi_h))
        ffi_lib = None
        if ffi_inc is not None:
            for lib_name in ('ffi', 'ffi_pic'):
                if (self.compiler.find_library_file(lib_dirs, lib_name)):
                    ffi_lib = lib_name
                    break

        ffi_lib="ffi"  # --- AND INSERT THIS LINE HERE THAT DOES NOT APPEAR ---
        if ffi_inc and ffi_lib:
            ext.include_dirs.extend(ffi_inc)
            ext.libraries.append(ffi_lib)
            self.use_system_libffi = True

주석과 함께 위에 표시 한 줄을 추가합니다. 왜 필요한지, Linux 플랫폼에서 '--without-system-ffi'를 존중하도록 구성 할 수있는 방법이없는 이유는 아마도 다음 몇 시간 내에 이것이 "지원되지 않는"이유를 알아낼 것입니다. 그 이후로 일했습니다. 그렇지 않으면 행운을 빕니다 ... YMMV.

그것이하는 일 : 그저 로직을 무시하고 컴파일러 연결 명령이 정말로 필요한 "-lffi"를 추가하도록합니다. 라이브러리의 경우 아마 잘 한 당신과 같이 헤더를 감지하는, 사용자 설치 PKG_CONFIG_PATH포함 path/to/your/install/root/lib/pkgconfig.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.