内网环境中,如何快速的安装 py 的依赖包 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
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 2020-09-07 16:41:34 +08:00 4799 次点击
    这是一个创建于 1863 天前的主题,其中的信息可能已经有所发展或是发生改变。
    原先有个系统,是基于 py3.5 的,内网的离线环境,没有 py 的内部源,当时安装 py 包的依赖,是一个个手工拷贝 whl 文件。

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

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

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

    要不就先在外网安装完,再搞到内网, 我们就这样干过
    wandehul
        4
    wandehul  
       2020-09-07 16:57:47 +08:00   1
    做个 docker image 不行吗
    676529483
        5
    676529483  
       2020-09-07 17:13:07 +08:00
    感觉是你包管理没处理好,一般都是 requirements 记录的吧
    wangyzj
        6
    wangyzj  
       2020-09-07 17:16:21 +08:00
    docker
    复制 venv 环境
    下载包然后传过去安装
    换 go
    ClutchBear
        7
    ClutchBear  
       2020-09-07 17:19:24 +08:00   1
    用 miniconda,
    可以直接安装到 /home 目录下, 安装好第三方包后,
    直接 zip 压缩成文件, 然后拷贝新机子就是了.
    Rumplestiltskin
        8
    Rumplestiltskin  
       2020-09-07 17:24:28 +08:00
    我觉得现在最好的方案就是 搞个容器 然后把容器 压缩包考过去直接 运行容器
    不过这样的前提是 docker 已经装了。
    不能搞容器 那就虚拟环境吧。
    joApioVVx4M4X6Rf
        9
    joApioVVx4M4X6Rf  
       2020-09-07 17:25:48 +08:00
    同问啊,有没有什么好的解决方案,一个一个装太难受了
    WingOnSummit
        10
    WingOnSummit  
       2020-09-07 17:33:18 +08:00 via Android
    在外网环境里,pip download 包名,把相关的依赖包一次性下好。
    scukmh
        11
    scukmh  
       2020-09-07 17:35:48 +08:00
    能 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
        12
    aimoji  
       2020-09-07 19:08:46 +08:00 via Android
    pip 可以下载包含所有依赖的离线包,然后拷进内网用 pip 离线安装,具体命令看下 pip 帮助吧,好久以前搞过
    aaa5838769
        13
    aaa5838769  
       2020-09-07 19:46:08 +08:00
    外网制作一个 docker 镜像包
    cissoid
        14
    cissoid  
       2020-09-07 20:45:31 +08:00   3
    pip download -r requirements.txt -d deps/

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

    正在 ing

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

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

    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
        22
    gtlions  
       2020-09-08 08:20:09 +08:00 via iPhone
    这是一个转 Go 的原因
    devtk
        23
    devtk  
       2020-09-08 09:05:20 +08:00
    打包成 docker 镜像 ,然后到离线环境部署
    wuwukai007
        24
    wuwukai007  
       2020-09-08 19:25:39 +08:00 via Android
    内网 docker 也是很烦的,建议你建议公司搭个镜箱源
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     5419 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 34ms UTC 08:11 PVG 16:11 LAX 01:11 JFK 04:11
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86