推荐学习书目
› Learn Python the Hard Way
Python Sites
› PyPI - Python Package Index
› http://diveintopython.org/toc/index.html
› Pocoo
值得关注的项目
› PyPy
› Celery
› Jinja2
› Read the Docs
› gevent
› pyenv
› virtualenv
› Stackless Python
› Beautiful Soup
› 结巴中文分词
› Green Unicorn
› Sentry
› Shovel
› Pyflakes
› pytest
Python 编程
› pep8 Checker
Styles
› PEP 8
› Google Python Style Guide
› Code Style from The Hitchhiker's Guide
among
0.01D
V2EX  ›  Python

内网环境中,如何快速的安装 py 的依赖包

  •  
  •   among · Sep 7, 2020 · 6014 views
    This topic created in 2252 days ago, the information mentioned may be changed or developed.
    原先有个系统,是基于 py3.5 的,内网的离线环境,没有 py 的内部源,当时安装 py 包的依赖,是一个个手工拷贝 whl 文件。

    现在准备迁移到新环境,包括 linux 的版本(升级到 centos 8.2 ),py 的版本( 3.6.8 ),因为是内网,无法连接外网。

    在迁移的时候,遇到了问题,安装一个,提示一个依赖,再拷贝安装,又有新的依赖。

    感觉无穷无尽啊,如何快速的把所需的依赖包,都一次性准备好。
    24 replies  •  2020-09-08 19:25:39 +08:00
    CallMeReznov
    CallMeReznov
    Sep 7, 2020
    1
    自己搭建内网 PIP 源啊
    zhzy
    zhzy
    Sep 7, 2020 via iPhone
    2
    直接把整个虚拟环境拷过去啊
    bruce0
    bruce0
    Sep 7, 2020
    3
    虚拟机的话,直接整个镜像复制过去最简单

    要不就先在外网安装完,再搞到内网, 我们就这样干过
    wandehul
    wandehul
    Sep 7, 2020❤️1
    4
    做个 docker image 不行吗
    676529483
    676529483
    Sep 7, 2020
    5
    感觉是你包管理没处理好,一般都是 requirements 记录的吧
    wangyzj
    wangyzj
    Sep 7, 2020
    6
    docker
    复制 venv 环境
    下载包然后传过去安装
    换 go
    ClutchBear
    ClutchBear
    Sep 7, 2020❤️1
    7
    用 miniconda,
    可以直接安装到 /home 目录下, 安装好第三方包后,
    直接 zip 压缩成文件, 然后拷贝新机子就是了.
    Rumplestiltskin
    Rumplestiltskin
    Sep 7, 2020
    8
    我觉得现在最好的方案就是 搞个容器 然后把容器 压缩包考过去直接 运行容器
    不过这样的前提是 docker 已经装了。
    不能搞容器 那就虚拟环境吧。
    joApioVVx4M4X6Rf
    joApioVVx4M4X6Rf
    Sep 7, 2020
    9
    同问啊,有没有什么好的解决方案,一个一个装太难受了
    WingOnSummit
    WingOnSummit
    Sep 7, 2020 via Android
    10
    在外网环境里,pip download 包名,把相关的依赖包一次性下好。
    scukmh
    scukmh
    Sep 7, 2020
    11
    能 ssh 上去吗?
    ```
    ssh yourServer -R localhost:7890:localhost:7890
    export https_proxy=http://127.0.0.1:7890 http_proxy=http://127.0.0.1:7890 all_proxy=socks5://127.0.0.1:7890
    pip install xxx
    ```
    aimoji
    aimoji
    Sep 7, 2020 via Android
    12
    pip 可以下载包含所有依赖的离线包,然后拷进内网用 pip 离线安装,具体命令看下 pip 帮助吧,好久以前搞过
    MilkShake
    MilkShake
    Sep 7, 2020
    13
    外网制作一个 docker 镜像包
    cissoid
    cissoid
    Sep 7, 2020❤️3
    14
    pip download -r requirements.txt -d deps/

    pip install -f deps/
    starsky007
    starsky007
    Sep 7, 2020
    15
    把依赖与程序一直打包,我在部署程序到 AWS Lambda 上时就是这么操作的,完全可行。
    先写好 requirements.txt ,然后使用以下命令,将依赖包安装到 target 目录下:
    pip install -r requirements.txt -t target
    然后,将程序复制到 target 目录下,一直打包,就可以了。
    among
    among
    OP
    Sep 7, 2020
    16
    @cissoid
    tks

    正在 ing

    pip3 download -d mypip --platform linux_x86_64 --python-version 36 --implementation cp --abi none -r requirements.txt
    xchaoinfo
    xchaoinfo
    Sep 7, 2020 via Android
    17
    pip install -f deps/ --no_index
    这个需要多加一个参数
    ClericPy
    ClericPy
    Sep 8, 2020
    18
    目前我是通过 shiv 打包做的部署, 主要就是像 jar 包一样把依赖环境打包成一起. 官方文档建议的是打包成 app, 不过我更喜欢当 venv 来用

    目前 hadoop 任务已经全是这玩意了, 不过得改环境变量把缓存文件放到当前目录, 其他没什么坑, 性能超过 pex, 稳定性也足够好
    cz5424
    cz5424
    Sep 8, 2020 via iPhone
    19
    最简单就拷贝 venv,复杂点就制作 docker 镜像
    arischow
    arischow
    Sep 8, 2020
    20
    能访问外网的机器:

    pip install wheel && pip wheel -r requirements.txt --wheel-dir=/svc/wheels

    即,安装 wheel 并按照 requirements.txt 编译 whl

    内网的机器:

    pip install --no-index --find-links=/svc/wheels -r requirements.txt

    即,使用本地 /svc/wheels 下的 whl 安装 requirements.txt ,并禁止其在 pypi index 下载安装。

    如果是 Docker 可以用 multi-stage build:

    ```docker
    # build wheels
    FROM python:3.7.9-buster as builder

    ENV PYTHONFAULTHANDLER=1 \
    PYTHONUNBUFFERED=1 \
    PYTHONHASHSEED=random \
    # pip:
    PIP_NO_CACHE_DIR=yes \
    PIP_DISABLE_PIP_VERSION_CHECK=on \
    PIP_DEFAULT_TIMEOUT=100

    RUN mkdir /svc
    WORKDIR /svc
    ADD ./requirements.txt .
    RUN pip install wheel && pip wheel -r requirements.txt --wheel-dir=/svc/wheels

    # clean slate
    FROM python:3.7.9-slim-buster as production

    # non-root user
    RUN addgroup --system --gid 101 devops && \
    adduser --system --disabled-login --ingroup devops --gecos "devops user" --shell /bin/false --uid 101 devops

    RUN mkdir -p /src/languages && \
    chown -R devops:devops /src

    # python packages
    COPY --from=builder /svc /svc
    WORKDIR /svc
    RUN pip install --no-index --find-links=/svc/wheels -r requirements.txt && \
    rm -rf /svc

    ```
    gtlions
    gtlions
    Sep 8, 2020 via iPhone
    22
    这是一个转 Go 的原因
    devtk
    devtk
    Sep 8, 2020
    23
    打包成 docker 镜像 ,然后到离线环境部署
    wuwukai007
    wuwukai007
    Sep 8, 2020 via Android
    24
    内网 docker 也是很烦的,建议你建议公司搭个镜箱源
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Privacy   ·   Solana   ·   1441 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 67ms · UTC 15:50 · PVG 23:50 · LAX 07:50 · JFK 10:50
    ♥ Do have faith in what you're doing.