Python 环境管理用那一套比较好: pyenv, pipenv 还是 virtualen

2021-05-19 15:23:27 +08:00
 shayuvpn0001

我现在有这样一个场景,内网不能连接互联网,需要部署一套基于 selenium 的自动化系统,不能用 pip 从网上下包,也不允许用 docker 做镜像导入,只能用安装包一个个安装部署,最多自己写写脚本自动安装。

我可以在外网弄一个虚拟机,安装一模一样的操作系统,试验部署直至整个系统稳定运行,然后把所有依赖打包至内网,然后手动或者用脚本重复整个过程。

这个部署过程还得分别在 Debian 9 和 Windows 7 上面部署两套,我准备弄 Debian 9 和 Win 7 两套虚拟机分别做,都只能单机条件下,而且不能自己内网弄个服务器建一个本地源存放所有包,有什么比较好的解决方案。最好是能自动化脚本,机器数量还比较多。

目前看了一下,本地包管理的话使用 pip 和 pyinstaller,Python 环境管理有 pyenv,pipenv 还是 virtualenv,已知的问题是 pyenv 必须使用 pyenv 管理的 python 版本,其他还有什么坑?麻烦各位支个招,有踩坑过的也来分享一下。

5396 次点击
所在节点    程序员
26 条回复
RRRoger
2021-05-19 16:02:10 +08:00
使用 conda pack 打包 用 miniconda 作为虚拟环境
abersheeran
2021-05-19 16:03:27 +08:00
恰好我也有这样的需求。推荐使用 pdm 解决。
noqwerty
2021-05-19 16:04:27 +08:00
conda 或者 poetry 吧
frostming
2021-05-19 16:08:33 +08:00
PDM 可以把依赖装到__pypackages__里,直接打包带走,在目标机器上只要 PYTHONPATH=path/to/__pypackages__/3.8/lib 即可

可以参考 https://pdm.fming.dev/usage/advanced/#use-pdm-in-a-multi-stage-dockerfile

打包还可以用 zipapp 或者 shiv 这种
abersheeran
2021-05-19 16:09:51 +08:00
补充楼上,这是我添加的两个环境变量。

```dockerfile
..................

ENV PATH="/app/__pypackages__/3.9/bin:$PATH"
ENV PYTHONPATH="/app/__pypackages__/3.9/lib:$PYTHONPATH"

WORKDIR /app

.........................
```
jianjian001
2021-05-19 16:10:47 +08:00
pyenv 管理版本
poetry 管理依赖
shayuvpn0001
2021-05-19 16:17:16 +08:00
@frostming
@abersheeran

Win 7 系统下面没办法用 Docker 吧
zeroDev
2021-05-19 16:23:54 +08:00
如果你习惯命令行界面
pipenv,反正自带的那个就行
如果习惯 GUI,那不清楚了
ctro15547
2021-05-19 16:25:19 +08:00
conda 太爽了。。。
Jirajine
2021-05-19 16:29:24 +08:00
poetry or pyflow
paopjian
2021-05-19 16:32:06 +08:00
zip 打包 conda 环境,但是有些包必须要用 pip 重装一遍,只好附带 whl 了
frostming
2021-05-19 16:34:18 +08:00
@shayuvpn0001 不是让用 Docker,是提供借鉴,这里 build 和 run 两个 stage 刚好对应你外网和内网的机器
zone10
2021-05-19 16:47:13 +08:00
用 virtualenv, 把依赖下在 venv 目录里整个复制过去就行. 是不允许用 docker 还是不允许拉 docker 镜像, 如果是后者可以把 docker 镜像导出为压缩包再去内网安装, win7 能用 docker, 有个工具叫 DockerToolBox, 如果是 win10 能用 Hyper-V 就更方便了, Docker Desktop 了解一下
terencehan
2021-05-19 18:48:41 +08:00
一直在用 miniconda
z740713651
2021-05-19 18:52:16 +08:00
miniconda +1
yzc27
2021-05-19 18:58:26 +08:00
poetry
youngce
2021-05-19 19:01:23 +08:00
回归 virtualenv,方便生产纯净的依赖文件
SenLief
2021-05-19 20:13:31 +08:00
python 不是自带个虚拟环境吗? python -m venv .venv 这个和上面的有啥差别吗?
cmdOptionKana
2021-05-19 21:40:21 +08:00
还是觉得 miniconda 的逻辑最清晰
among
2021-05-19 22:18:44 +08:00
@RRRoger 顺便问下,用 conda pack 打包的东西包括 py 的基础环境么。

如果是 centos7 下大打包的 py3.6, 在 centos 8 中 使用,是否会有问题。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/777916

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX