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的几种安装方式

Python中不能安装python-docx的问题

python-docx是咱们常用的一个python中处理word文档的库,相对于VB来说,更容易学,也比较适合通过python作为胶水,将其他内容放在word中。然而很多时候安装python-docx会报错,如何解决呢?

0. 前提

必须使用的是windows系统,python-docx在mac os上是不能够工作的。

另外python-docx使用了lxml,而lxml的更新又不是那么快,所以导致了问题。

在命令行中,使用pip install python-docx安装

1. 问题提示

一般来说,大家看到的提示有这么几个:

  1. 提示vcvarsall.bat不存在。
  2. 提示 fatal error C1083: Cannot open include file: ‘libxml/xpath.h’: No such file or directory

2. 问题解决方案

对于上面两个问题,由以下方法解决:

  1. vcvarsall.bat不存在,是因为没有安装visual studio。可以到微软官网下载一个visual studio express并且安装。
  2. 再提示的libxml/xpath.h的错误,通常是因为lxml的安装有问题导致的。所以这里建议分两步安装,先安装lxml的非官方的包:lxml补丁包链接,然后再通过pip install python-docx即可。
    • 注意补丁包的选择,需要选择跟你的python版本对应的版本,例如如果你使用的是32位的python35,就需要选择lxml-3.5.0-cp35-none-win32.whl这个版本
    • whl包的安装:用命令行工具cd到whl目录,再pip install即可