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 版本,其他还有什么坑?麻烦各位支个招,有踩坑过的也来分享一下。

5426 次点击
所在节点    程序员
26 条回复
clino
2021-05-19 22:20:09 +08:00
我一般用 virtualenv+pyenv
wongskay
2021-05-19 23:01:38 +08:00
anaconda
ClericPy
2021-05-19 23:28:03 +08:00
最近同样部署 chrome 自动化工具, 用的自己写的 zipapps, 如果不嫌麻烦可以继续看, 我这边是 Jenkins 打包机 Linux 打包以后在 Hadoop 那边直接执行的

看你情景必须把依赖和源代码打包起来一起发布, 可以尝试一下. 有几个前提:
1. Python3.7+
2. Windows 打包的只能 Windows 用, Linux 打包的只能 Linux 用, 有些库不是跨平台的要编译, 打包机 Python 版本也得和运行环境一致, 类似 selectolax 或者 psutil 这样有 .so 的就没法同时给 3.7 3.8 一起用
3. 执行的时候估计会解压出一个文件夹在旁边

步骤:
1. 打包机上安装 python3.7 -m pip install zipapps -U --user
2. python3.7 -m zipapps -c -a path_to_your_package -m package_name.__main__:main -o app.pyz -u="*" -r requirement.txt
3. 客户端那边运行 python3.7 app.pyz

打包以后文件挺大的, 毕竟带了所有依赖, 如果想依赖和代码分开打包也可以, 也可以不指定 entry_point (也就是那个-m 参数), 打包后当虚拟环境使
shayuvpn0001
2021-05-20 11:09:36 +08:00
@frostming 你是 PDM 作者?哈哈,厉害。

另外,PDM 依赖 python 3.7 以上,我刚好有个包最高只能用到 3.6,可以先装 Python 3.7,然后 PDM,再用版本管理工具弄个 Python 3.6,再用 PDM 弄我的项目么?思路是 PDM 泡在 3.7 上,我自己的跑在 3.6 上。

然后给你文档挑个书写错误:Use PDM in Continuous Integration# 这一部分里面,Here is an example worflow of GitHub 应该是 workflow
xiebinbin666
2021-05-20 17:09:06 +08:00
frostming
2021-05-28 15:18:18 +08:00
@shayuvpn0001 可以,PDM 就是这样工作的

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

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

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

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

© 2021 V2EX