无需root即可从python3远程安装pip

无需root即可从python3远程安装pip

我正在尝试通过 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,这可能会发现更多错误或丢失的库。

相关内容