从没有root的python3远程安装pip

Zer*_*ash 4 linux remote python

我正在尝试通过 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
Run Code Online (Sandbox Code Playgroud)

这将安装 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'
Run Code Online (Sandbox Code Playgroud)

安装了python3,但是pip安装失败。经过一些研究,似乎缺少 libffi。使用wget获取libffi-3.2.1后,安装:

./configure --prefix=$HOME/.local
make
make install
Run Code Online (Sandbox Code Playgroud)

这表明它已安装:

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*
Run Code Online (Sandbox Code Playgroud)

现在需要重新配置 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
Run Code Online (Sandbox Code Playgroud)

尝试过这样的事情:

$ ./configure --with-system-ffi --prefix=$HOME/.local LDFLAGS="-L/home/someusername/.local/lib64" LIBS="-L/home/someusername/.local/lib"
Run Code Online (Sandbox Code Playgroud)

出现同样的错误,那么问题来了,如何正确调用Python-3.7.0 configure使用本地libffi库才能完整安装python?

hoe*_*ing 5

如果您没有pip捆绑 Python 安装(可通过 访问的安装python -m pip),您可以使用configure --without-ensurepip. 通过这样做,您将不需要libffi构建 Python。安装后,pip像往常一样安装python 包,例如 with 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
Run Code Online (Sandbox Code Playgroud)

可选:在运行之前make install,考虑执行测试:make test,这可能会发现更多错误或丢失的库。