我正在尝试通过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
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?
解决方法:
如果没有与Python安装捆绑的pip(可以通过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,这可能会发现更多错误或缺少库.
标签:python,linux,remote
来源: https://codeday.me/bug/20190814/1656113.html