搞了个 python 虚拟环境 打包的工具,解决 无公网环境安装 python 、不同 Linux 操作系统 Python 环境兼容的问题
github.com/Alfonsxh/py-all-in-one

我的问题是可以在 arm 设备上使用吗? x86 架构的 python 打包工具实际上很多?如果可以的话请给出最简单的 demo 打包实例

用 docker 不就好了么

我接触的很多企业用户,还是很保守的,接受不了 docker 这种方案

可以的,一会补充使用方案

太巧了,昨天正需要这个,今天就看到了

为什么不用 conda-pack ?有什么区别呢?

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.18docker 参数:- --platform linux/amd64 - 平台可以选 linux/amd64 、linux/arm64- pwd/test/Python - Python 安装包位置,打包前需要将 Python 源码下载保存在该目录。源码下载地址: 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 源码的方式

试过很多方案,没办法解决动态库 glibc 依赖的问题

安装三方依赖包的时候报错了,是因为这个地址 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: pypi.tuna.tsinghua.edu.cn/simpleCollecting pip ERROR: HTTP error 403 while getting pypi.tuna.tsinghua.edu.cn/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl#sha256=5052d7889c1f9d05224cd41741acb7c5d6fa735ab34e339624a614eaaa7e7d76 (from pypi.tuna.tsinghua.edu.cn/simple/pip/) (requires-python:>=3.7)ERROR: Could not install requirement pip from 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: pypi.tuna.tsinghua.edu.cn/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl for URL pypi.tuna.tsinghua.edu.cn/packages/15/aa/3f4c7bcee2057a76562a5b33ecbd199be08cdb4443a02e26bd2c3cf6fc39/pip-23.3.2-py3-none-any.whl#sha256=5052d7889c1f9d05224cd41741acb7c5d6fa735ab34e339624a614eaaa7e7d76 (from 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 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 raiseTypeError: exceptions must be old-style classes or derived from BaseException, not NoneType

是在本地 Docker desktop 里设置 了 容器 proxy 吗

好像没有哦,我是在服务器上运行的。我马上重新弄个干净的虚拟机再试试。感谢你的工具,很牛逼,希望能成功,我昨天搞了一天离线安装没搞好

嗯嗯,不客气。你应该是机器上的环境问题,刚在我自己环境上是可以打出来的[root@0d315fcc076b alfonstest]# source /usr/local/python3/3.9.0/alfonstest/bin/activate(alfonstest) [root@0d315fcc076b alfonstest]# python --versionPython 3.9.0

请教一下,不太理解这个项目使用场景,如果是项目打包,使用 pyinstaller 就好,如果是 python 环境的话,直接到服务器上编译安装指定版本,使用的时候用 virtualenv 指定解释器路径就行,请问有什么区别或者说优势嘛。

#8 虚拟环境最大的问题就是 glibc 难以通用兼容

#3 部署上就好啦,还要求技术细节嘛。我们也是离线内网环境,我搞了一键安装 docker+docker-compose ,自动导入镜像启动容器服务啥的,服务可用稳定靠谱,兼容各种 linux 发行版,amd 和 arm 架构,客户倒是不关心用的啥技术部署的。

我换了个虚拟机还是不行,是不是网络有问题呢?安装三方包报 403 ,三方包是下面这些:Flask==3.0.0scikit-learn==1.3.1flasgger==0.9.7.1pandas==2.1.4matplotlib==3.8.2statsmodels==0.14.1PyWavelets==1.5.0minio==7.2.2openpyxl==3.1.2

无外网访问,虚拟环境中的动态库依赖的 glibc ,不同操作系统难以通用

应该还是网络的问题,我这边是可以的+++++++++++++++++安装项目第三方依赖包+++++++++++++++++[ 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: pypi.tuna.tsinghua.edu.cn/simpleCollecting pip Downloading 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.3Successfully installed pip-23.3.2

好的,感谢,我晚上回家试试

看了下代码,你这个不如直接用 miniconda 吧