我正在尝试通过 ssh 为远程托管之一安装 python3。我没有 root 访问权限。安装是通过以下方式完成的:
wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz
tar xvzf Python-3.4.3.tgz
./configure --prefix=$HOME/.local
make
make install
这将安装 Python 3,但是在安装结束时会出现此错误:
File "/home/someusername/Python-3.7.0/Lib/ctypes/__init__.py", line 7, in <module>
from _ctypes import Union, Structure, Array
ModuleNotFoundError: No module named '_ctypes'
python3已安装,但pip安装失败。经过一些研究,似乎 libffi 丢失了。使用wget获取libffi-3.2.1后,进行安装:
./configure --prefix=$HOME/.local
make
make install
这表明它已安装:
someusername@a2plcpnl079 [~/.local/lib]$ ls
./ ../ libffi-3.2.1/ libpython3.7m.a* pkgconfig/ python3.7/
someusername@a2plcpnl079 [~/.local/lib]$ cd libffi-3.2.1/
someusername@a2plcpnl079 [~/.local/lib/libffi-3.2.1]$ ls
./ ../ include/
someusername@a2plcpnl079 [~/.local/lib/libffi-3.2.1]$ cd include
someusername@a2plcpnl079 [~/.local/lib/libffi-3.2.1/include]$ ls
./ ../ ffi.h ffitarget.h
someusername@a2plcpnl079 [~/.local]$ cd lib64
someusername@a2plcpnl079 [~/.local/lib64]$ ls
./ ../ libffi.a libffi.la* libffi.so@ libffi.so.6@ libffi.so.6.0.4*
现在需要重新配置 python-3.7.0 的构建,以便它使用本地 libffi。我尝试了多种变体,但仍然无法安装 pip。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin
export PATH
export HISTTIMEFORMAT="%d/%m/%y %T "
export PATH="$HOME/.local/bin:$PATH"
export LD_LIBRARY_PATH=$HOME/.local/lib64
尝试了这样的事情:
$ ./configure --with-system-ffi --prefix=$HOME/.local LDFLAGS="-L/home/someusername/.local/lib64" LIBS="-L/home/someusername/.local/lib"
出现了同样的错误,那么问题是如何正确调用Python-3.7.0 configure使用本地libffi库才能完全安装python?
答案1
如果您不介意不pip
与 Python 安装捆绑在一起(可通过 访问python -m pip
),则可以使用 取消选择它configure --without-ensurepip
。通过这样做,您将不需要libffi
构建 Python。安装后,pip
像往常一样安装 python 包,例如使用easy_install pip
,或下载并执行get-pip.py
。
但是,您应该能够使用自定义的libffi
.我的建议,未经测试:
$ export LD_LIBRARY_PATH=$HOME/.local/lib64
$ export LD_RUN_PATH=$HOME/.local/lib64
$ ./configure --prefix=$HOME/.local LDFLAGS="-L$HOME/.local/lib64" CPPFLAGS="-I $HOME/.local/lib/libffi-3.2.1/include"
$ make
$ make install
可选:在运行之前make install
,考虑执行测试:make test
,这可能会发现更多错误或丢失的库。