Python 虚拟环境 打包 py-all-in-one

342 天前
 Alfons

搞了个 python 虚拟环境 打包的工具,解决 无公网环境安装 python 、不同 Linux 操作系统 Python 环境兼容的问题

https://github.com/Alfonsxh/py-all-in-one

2533 次点击
所在节点    Python
32 条回复
jackOff
342 天前
我的问题是可以在 arm 设备上使用吗? x86 架构的 python 打包工具实际上很多?如果可以的话请给出最简单的 demo 打包实例
gumuxi
342 天前
用 docker 不就好了么
Alfons
341 天前
@gumuxi 我接触的很多企业用户,还是很保守的,接受不了 docker 这种方案
Alfons
341 天前
@jackOff 可以的,一会补充使用方案
Geekerstar
341 天前
太巧了,昨天正需要这个,今天就看到了
MasterCai
341 天前
为什么不用 conda-pack ?有什么区别呢?
Alfons
341 天前
docker run -it --rm --platform linux/amd64 \
-v `pwd`/test/Python:/packages/Python \
-v `pwd`/test/requirements.txt:/packages/requirements.txt \
-v `pwd`/test/build:/packages/build alfonsxh/py-all-in-one:latest --install-dir /usr/local/python_env/ --project alfonstest --python-version 3.8.18


docker 参数:

- --platform linux/amd64 - 平台可以选 linux/amd64 、linux/arm64
- `pwd`/test/Python - Python 安装包位置,打包前需要将 Python 源码下载保存在该目录。源码下载地址: https://www.python.org/ftp/python/ (当前只支持 tgz 包)
- `pwd`/test/requirements.txt - 项目依赖的 Python 模块
- `pwd`/test/build - 打完包后,保存的目录

命令参数:

--install-dir - Python 环境安装的目录,对应在部署机器上的路径
--project - 项目名称,虚拟环境会生成在 {install-dir}/{python_version}/{project} 目录下
--python-version - Python 版本,根据 pwd/test/Python 目录下的 Python 源码包进行选择。暂时只支持先下载 Python 源码的方式
Alfons
341 天前
@MasterCai 试过很多方案,没办法解决动态库 glibc 依赖的问题
Geekerstar
341 天前
安装三方依赖包的时候报错了,是因为这个地址 403 么?

+++++++++++++++++安装项目第三方依赖包+++++++++++++++++
[ OK ]: Execute cmd -> source /usr/local/python3/3.9.0/alfonstest/bin/activate && export LD_LIBRARY_PATH=/usr/local/python3/3.9.0/alfonstest/main/lib:$LD_LIBRARY_PATH && pip install --upgrade pip && pip install -r /packages/requirements.txt
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pip
ERROR: HTTP error 403 while getting https://pypi.tuna.tsinghua.edu.cn/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl#sha256=5052d7889c1f9d05224cd41741acb7c5d6fa735ab34e339624a614eaaa7e7d76 (from https://pypi.tuna.tsinghua.edu.cn/simple/pip/) (requires-python:>=3.7)
ERROR: Could not install requirement pip from https://pypi.tuna.tsinghua.edu.cn/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl#sha256=5052d7889c1f9d05224cd41741acb7c5d6fa735ab34e339624a614eaaa7e7d76 because of HTTP error 403 Client Error: Forbidden for url: https://pypi.tuna.tsinghua.edu.cn/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl for URL https://pypi.tuna.tsinghua.edu.cn/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl#sha256=5052d7889c1f9d05224cd41741acb7c5d6fa735ab34e339624a614eaaa7e7d76 (from https://pypi.tuna.tsinghua.edu.cn/simple/pip/) (requires-python:>=3.7)
WARNING: You are using pip version 20.2.3; however, version 23.3.2 is available.
You should consider upgrading via the '/usr/local/python3/3.9.0/alfonstest/bin/python3 -m pip install --upgrade pip' command.
Traceback (most recent call last):
File "build.py", line 513, in <module>
prompt=args.project,
File "build.py", line 91, in wrapper
res = func(*args, **kwargs)
File "build.py", line 406, in run
self.pip_install()
File "build.py", line 91, in wrapper
res = func(*args, **kwargs)
File "build.py", line 209, in pip_install
requirements=requirements_path))
File "build.py", line 71, in run_local_cmd
raise
TypeError: exceptions must be old-style classes or derived from BaseException, not NoneType
Alfons
341 天前
@Geekerstar 是在本地 Docker desktop 里设置 了 容器 proxy 吗
Geekerstar
341 天前
@Alfons 好像没有哦,我是在服务器上运行的。我马上重新弄个干净的虚拟机再试试。感谢你的工具,很牛逼,希望能成功,我昨天搞了一天离线安装没搞好
Alfons
341 天前
@Geekerstar 嗯嗯,不客气。

你应该是机器上的环境问题,刚在我自己环境上是可以打出来的

[root@0d315fcc076b alfonstest]# source /usr/local/python3/3.9.0/alfonstest/bin/activate
(alfonstest) [root@0d315fcc076b alfonstest]# python --version
Python 3.9.0
Etuloser
341 天前
@Alfons 请教一下,不太理解这个项目使用场景,如果是项目打包,使用 pyinstaller 就好,如果是 python 环境的话,直接到服务器上编译安装指定版本,使用的时候用 virtualenv 指定解释器路径就行,请问有什么区别或者说优势嘛。
gumuxi
341 天前
@Alfons #8 虚拟环境最大的问题就是 glibc 难以通用兼容
gumuxi
341 天前
@Alfons #3 部署上就好啦,还要求技术细节嘛。我们也是离线内网环境,我搞了一键安装 docker+docker-compose ,自动导入镜像启动容器服务啥的,服务可用稳定靠谱,兼容各种 linux 发行版,amd 和 arm 架构,客户倒是不关心用的啥技术部署的。
Geekerstar
341 天前
我换了个虚拟机还是不行,是不是网络有问题呢?安装三方包报 403 ,三方包是下面这些:
Flask==3.0.0
scikit-learn==1.3.1
flasgger==0.9.7.1
pandas==2.1.4
matplotlib==3.8.2
statsmodels==0.14.1
PyWavelets==1.5.0
minio==7.2.2
openpyxl==3.1.2
@Alfons
Alfons
341 天前
@Etuloser 无外网访问,虚拟环境中的动态库依赖的 glibc ,不同操作系统难以通用
Alfons
341 天前
@Geekerstar 应该还是网络的问题,我这边是可以的

+++++++++++++++++安装项目第三方依赖包+++++++++++++++++
[ OK ]: Execute cmd -> source /usr/local/python3/3.9.0/alfonstest/bin/activate && export LD_LIBRARY_PATH=/usr/local/python3/3.9.0/alfonstest/main/lib:$LD_LIBRARY_PATH && pip install --upgrade pip && pip install -r /packages/requirements.txt
Looking in indexes: https://pypi.tuna.tsinghua.edu.cn/simple
Collecting pip
Downloading https://pypi.tuna.tsinghua.edu.cn/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl (2.1 MB)
|████████████████████████████████| 2.1 MB 512 kB/s
Installing collected packages: pip
Attempting uninstall: pip
Found existing installation: pip 20.2.3
Uninstalling pip-20.2.3:
Successfully uninstalled pip-20.2.3
Successfully installed pip-23.3.2
Geekerstar
341 天前
@Alfons 好的,感谢,我晚上回家试试
ruanimal
341 天前
看了下代码,你这个不如直接用 miniconda 吧

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

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

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

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

© 2021 V2EX