Python之离线环境安装第三方模块

  熟悉Python的读者都知道,在Python中安装(在线环境)第三方模块十分方便,只需要输入pip install package_name即可完成第三方模块的完成,因为它会帮助你解决各个模块之间的依赖关系。但是,如果是离线环境,安装第三方模块将是一件十分困难的事情,因为你不清楚他们之间的依赖关系。
  本文将介绍如何在离线环境中安装第三方模块。
  本文以离线安装Python3.5的tensorflow模块为例,首先我们先找到tensorflow的依赖模块,然后将这些依赖模块下载下来,最后完成安装。

寻找依赖模块

  笔者新建了一个Docker项目,我们借助Docker打镜像来完成tensorflow模块的安装,在安装的同时我们便能得到依赖的第三方模块及下载网址。
  项目结构如下:
项目结构
其中Python安装包为Python-3.5.2.tar.xz,requirement.txt中只有tensorflow==1.14.0这个模块,run.py为空。我们用来制作镜像的Dockerfile为flask_demo.build,完整内容如下:

FROM centos:7.2.1511

# install related packages
ENV ENVIRONMENT DOCKER_PROD
RUN cd / && ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/localtime \
    && yum makecache \
    && yum install -y wget aclocal supervisor automake autoconf make gcc gcc-c++ python-devel mysql-devel bzip2 libffi-devel epel-release \
    && yum clean all

# install Python3.5.2
COPY python_dev/Python-3.5.2.tar.xz /root
RUN cd /root \
    && tar -xvf Python-3.5.2.tar.xz -C /usr/local/ \
    && rm -rf Python-3.5.2.tar.xz \
    && cd /usr/local/Python-3.5.2 \
    && ./configure && make && make install

# set ENV variable WORK_DIR and copy source code
ENV WORK_DIR /root/flask_demo/src
COPY src $WORK_DIR

# install pip3 and related Python packages
COPY python_dev/pip-8.0.2.tar.gz /root/pip-8.0.2.tar.gz
RUN cd /root \
    && tar -zxvf pip-8.0.2.tar.gz \
    && cd pip-8.0.2 \
    && python3 setup.py build \
    && python3 setup.py install \
    && pip3 install --upgrade pip -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \
    && mkdir -m 755 -p /etc/supervisor/conf.d \
    && pip3 install supervisor -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \
    && cd $WORK_DIR \
    && pip3 install -r requirements.txt -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com \
    && yum clean all

# WORK_DIR
WORKDIR $WORK_DIR

# use supervisor to run Python script
CMD ["pytho3", "run.py"]

build.sh内容如下:

#!/usr/bin/env bash
TIMENOW=`date +%y.%m.%d.%H%M`
cd ..
docker build -f ./docker/flask_demo.build -t demo:${TIMENOW} .

我们运行build.sh脚本,等待镜像打包完成,其中安装tensorflow的过程如下图:
tensorflow安装过程

下载依赖模块

  我们将上述的依赖模块复制到install.txt文件中,前几行如下:

Collecting tensorflow==1.14.0
  Downloading http://pypi.doubanio.com/packages/7c/fb/7b2c5b3e85ad335b53ca67deb2ef4af574dc0a8759f43b7f45e15005e449/tensorflow-1.14.0-cp35-cp35m-manylinux1_x86_64.whl (109.2 MB)
Collecting tensorflow-estimator<1.15.0rc0,>=1.14.0rc0
  Downloading http://pypi.doubanio.com/packages/3c/d5/21860a5b11caf0678fbc8319341b0ae21a07156911132e0e71bffed0510d/tensorflow_estimator-1.14.0-py2.py3-none-any.whl (488 kB)
Collecting google-pasta>=0.1.6
  Downloading http://pypi.doubanio.com/packages/a3/de/c648ef6835192e6e2cc03f40b19eeda4382c49b5bafb43d88b931c4c74ac/google_pasta-0.2.0-py3-none-any.whl (57 kB)

  我们使用Python脚本去解析该文本,并利用Linux系统自带的wget命令下载这个依赖文件至modules文件夹。解析及下载模块的脚本(download_modules.py)代码如下:

# -*- coding: utf-8 -*-
import os

with open("../install.txt", "r", encoding="utf-8") as f:
    content = [_.strip() for _ in f.readlines()]

for line in content:
    if line.startswith("Downloading"):
        module_url = line.split()[1]
        print(module_url)
        if module_url.startswith("http"):
            os.system("wget {}".format(module_url))
            print("Download {}".format(module_url.split("/")[-1]))

输出结果(部分)如下:
下载模块
这时候,我们发现在modules文件夹已经有了安装tensorflow所需的全部第三方模块,如下:
模块列表
  如果在离线环境,我们只需要将这些安装包拷贝进去,并用pip install ***.whl(or tar.gz)安装即可。

总结

  本文已上传至Github,网址为:https://github.com/percent4/offline_python_third_party_module_install 。
  本文到此结束,感谢大家的阅读~

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值