linux在(无root权限,无互联网连接,无pypi源)服务器环境中安装python包

安全性和可用性是反比关系

通过这篇文章,你会学到:

  1. 如何通过非root用户安装python
  2. 如何通过非root用户安装pip
  3. 如何在无互联网的条件下安装python的包
  4. 验证安装成功

1. 如何通过非root用户安装python

  1. 下载源码之后,先进行shasum校验通过。
  2. 解压缩,并执行
    ./configure prefix=/home/username/python
    make install
  3. 然后把路径加到.*rc文件中
    PYTHONPATH=/home/username/python/bin
    export PATH=$PYTHONPATH:$PATH
  4. source .*rc重启,并且通过which python验证是否成功。

参考

2. 如何通过非root用户安装pip

TL;DR

  1. 把pip的wheel文件下载下来。
  2. 执行python pip-9.0.1-py2.py3-none-any.whl/pip install --no-index pip-9.0.1-py2.py3-none-any.whl

Long Version

这个链接中的pfmoore写的答案,注意他提到上面写的这个安装方法没有提供任何warranty。

3. 如何在无互联网的条件下安装python的包

3.1 找到依赖包

应该找一台有互联网的机器,把目前安装paramiko(某个包)所需要的依赖给写下来。通过以下语句:

pip2 download paramiko -d /tmp --no-binary :all:

可以得到以下stdout,然后注意系统提示Successfully downloaded paramiko bcrypt cryptography pynacl pyasn1 cffi six idna asn1crypto enum34 ipaddress pycparser,就是我们需要的包。

Collecting paramiko
  File was already downloaded /private/tmp/paramiko-2.4.0.tar.gz
Collecting bcrypt>=3.1.3 (from paramiko)
  File was already downloaded /private/tmp/bcrypt-3.1.4.tar.gz
Collecting six>=1.4.1 (from bcrypt>=3.1.3->paramiko)
  Downloading six-1.11.0.tar.gz
  Saved /private/tmp/six-1.11.0.tar.gz
......
Collecting idna>=2.1 (from cryptography>=1.5->paramiko)
  Downloading idna-2.6.tar.gz (135kB)
    100% |████████████████████████████████| 143kB 172kB/s 
  Saved /private/tmp/idna-2.6.tar.gz
......
Collecting ipaddress (from cryptography>=1.5->paramiko)
  Downloading ipaddress-1.0.18.tar.gz
  Saved /private/tmp/ipaddress-1.0.18.tar.gz
Collecting pycparser (from cffi>=1.1->bcrypt>=3.1.3->paramiko)
  Downloading pycparser-2.18.tar.gz (245kB)
    100% |████████████████████████████████| 256kB 122kB/s 
  Saved /private/tmp/pycparser-2.18.tar.gz
Successfully downloaded paramiko bcrypt cryptography pynacl pyasn1 cffi six idna asn1crypto enum34 ipaddress pycparser

也可以写成一个shell脚本来下载+列出依赖包

link

#!/bin/sh
# get_pypi_dependencies.sh

PACKAGE=$1
pip download $PACKAGE -d /tmp --no-binary :all: \
| grep Collecting \
| cut -d' ' -f2 \
| grep -v $PACKAGE

执行./get_pypi_dependencies.sh bcrypto,得到:

cffi>=1.1
six>=1.4.1
pycparser

3.2 把这些包的wheel文件下载下来

建议在官网上下载。

  1. 平台版本要选对,windows就选择windows的,linux就是linux的。另外32位和64位要选对。
  2. python2还是python3要选对
  3. 版本要满足最小依赖
  4. cpython和jpython的选择。一般都选择cpython,在安装包上会写成cp27, cp34, cp35, cp36
  5. UCS-2和UCS-4的选择。对于linux版本,可以看到有一个是cp27m版本,一个是cp27mu版本,分别代表了UCS-2和UCS-4.
    • 大部分服务器只能够用UCS-2,用UCS-4安装会报错。
    • UCS-2即UTF-16, 这里的2代表2 bytes,一个byte又是8位,所以总共2^16,可以代表65536个字符。
    • UCS-4即4 bytes per character,2^32, 这个比较耗磁盘空间。
    • 有兴趣可以看看这个讨论

将这些包用SFTP、跳板机等方式传递到离线的服务器上。

然后按照3.1中相反的顺序,通过以下方法安装:

pip install [*.whl]

4. 验证安装成功

执行python,并且import对应的包

5. 其他参考链接

Python的几种安装方式