从缺少'_ctypes'的源代码构建Python3.7.3

时间:2019-04-26 12:01:03

标签: python-3.x

我正在尝试使用ensurepip从源代码构建Python-3.7.3,但出现此错误:

ModuleNotFoundError: No module named '_ctypes'

所有在线答案都表明需要libffi-dev,但我已经安装了它,但仍然给我这个错误。

root@4b6d672f1334:/Python-3.7.3# find / -name libffi.*
/usr/lib/pkgconfig/libffi.pc
/usr/lib/libffi.a
/usr/lib/libffi.so
/usr/lib/libffi.so.5.0.10
/usr/lib/libffi.so.5
/usr/share/info/libffi.info.gz

该版本位于ubuntu:10.04中的容器映像中。 这是有目的的旧版本,因为我正在使用PyInstaller编译应用程序,并且它需要在具有旧glibc(2.11)的计算机上运行,​​并且该映像是我发现的唯一具有旧版本的映像。

我在Python-2.7.16上也做了同样的工作,并且没有任何问题。

更新 Python-3.6.8也可以正常工作

2 个答案:

答案 0 :(得分:1)

这是我在 debian 6.0.60 上的解决方案,根据 Amir Rossert 的解决方案,非常感谢!

(1) 安装 libffi

tar zxf libffi-3.3.tar.gz
cd libffi-3.3
./configure
make
make install

(2) 安装 Python 3.8

tar zxf Python-3.8.5.tgz
cd Python-3.8.5
export LD_LIBRARY_PATH=/usr/local/lib && \
export LD_RUN_PATH=/usr/local/lib && \
./configure --prefix=/usr/local/python38 --with-openssl=/usr/local/openssl111 --enable-shared --enable-optimizations --with-system-ffi=/usr/local/lib/
make
make install

ln -s /usr/local/python38/bin/python3 /usr/local/bin/python3
ln -s /usr/local/python38/bin/pip3 /usr/local/bin/pip3

touch /etc/ld.so.conf/python38.conf
echo "/usr/local/python38/lib" > /etc/ld.so.conf/python38.conf
ldconfig

好的,效果很好。

答案 1 :(得分:0)

我能够找到解决方法here

问题可能与libffi-dev的旧版本有关,解决方案是从源代码构建并安装libffi,然后构建Python3.7.3

构建libffi:

wget ftp://sourceware.org/pub/libffi/libffi-3.2.1.tar.gz
tar xzf libffi-3.2.1.tar.gz
cd libffi-3.2.1
./configure --disable-docs
make
make install

构建Python3.7.3:

wget https://www.python.org/ftp/python/3.7.2/Python-3.7.2.tgz
tar xzf Python-3.7.2.tgz && 
cd Python-3.7.2
export LD_LIBRARY_PATH=/usr/local/lib && \
export LD_RUN_PATH=/usr/local/lib && \
./configure --enable-optimizations --prefix=/usr/ --with-ensurepip=install --enable-shared LDFLAGS="-L/usr/local/lib" CPPFLAGS="-I /usr/local/lib/libffi-3.2.1/include"
make
make install