离线部署, pip.exe 和 uvicorn.exe 内含路径,离谱

2023-01-06 17:32:20 +08:00
 loading

内网服务器部署环境。 在互联网 pip 下好了环境,整个 python 文件夹打包替换。 最后发现 uvicorn 提示里面有互联网的路径信息,用 vscode 整个 pyhton 文件夹搜索了用户名,发现只有在 script/jp.py 里面第一行注释里面有,改了没有。

最后用 vscode 直接打开 pip.exe 和 uvicorn.exe 发现里面有直接有路径信息。。。

经过搜索确实是这样修改。。。我服了,用一个 conf.py 装一下路径不行吗?

2217 次点击
所在节点    Python
10 条回复
loading
2023-01-06 17:50:40 +08:00
用 notepad++ 修改,用 vscode 和记事本修改都会损坏 exe 文件。

用 untraledit 应该也行,改完图标不变即可。
ClericPy
2023-01-06 18:03:27 +08:00
没太听懂路径信息 /互联网的路径信息... 能举个例子么

是说 pip install -t ./xxx 的方式安装的东西无法用吗
loading
2023-01-06 18:29:17 +08:00
@ClericPy 在 exe 文件里面有
c:\user\123\ 的信息
而我内网机器的用户名不是 123 ,所以复制到内网后用不了。需要我用 notepad++打开 exe 文件
查找 c:\user\123\
改成 c:\user\admin\


https://blog.csdn.net/delcomp/article/details/104742134
ClericPy
2023-01-06 18:43:20 +08:00
啊 你说的 exe 文件... 这些编译的东西确实经常封装运行时一些东西进去

部署的话有必要吗, 只打包依赖和代码可以不, 我之前写了一个叫 zipapps 的可以试试, 说白了就是把代码和依赖封到 zip 文件里, 运行的时候用解释器直接执行它(所以如果封装时候不用 .pyz 扩展名用 .py 扩展名, 可以直接双击)
loading
2023-01-06 19:50:22 +08:00
@ClericPy pip.exe 是类似 npm 一样的包安装工具而已,uvicorn 是个类似 cgi 的 ASGI ,后面 py 都要它去跑,你觉得这两个 exe 编译了绝对路径信息进去没毛病吗?这两个不是我的编译结果,是环境而已啊。
LindsayZhou
2023-01-06 21:29:07 +08:00
@ClericPy 冒昧离题问一下。
Linux 下面的 pip 命令就是一个脚本,调用 site-packages/pip 下面的一个函数。
pip 没有 C 的代码,是不是给 windows 打包 exe 的工具做了“优化”?想知道给 windows 打包 exe 的代码在哪里,setuptools 吗?

PS:
随手翻了一下 pip 和 os.path 的代码,windows 拿路径找到有 环境变量,windll ,注册表三种方式,这会被编译优化掉确实有点离谱。
ClericPy
2023-01-06 21:50:02 +08:00
@LindsayZhou 呃, 那些 .exe 我只知道是因为很多人为了省事好调用放到 Scripts 目录直接调用, 平时我用的都是 python -m pip install xxx 的方式... 打包 exe 随手搜了下似乎是 entry_points console_scripts, https://zhuanlan.zhihu.com/p/360502932 . 具体没研究过


@loading pip uvicorn 平时经常用, 我就是好奇你这部署是把解释器也带过去了么, 尽量别用 .exe 吧, 用 python -m 的方式, 那些 .exe 一般就是 -m 启动方式的一个 entry point 没什么特殊功能
LindsayZhou
2023-01-06 22:08:09 +08:00
@ClericPy #7
那看起来是 distlib 的原因了。
找到了相关的 issue ,说是有意这么设计的,应该能回答楼主的问题吧。

https://github.com/pypa/pip/issues/10442#issuecomment-985327075
ClericPy
2023-01-06 22:27:54 +08:00
@LindsayZhou 如果说 exe 绑定 Python 解释器路径这个事的话... 那肯定的吧

以前用 shiv/zipapps 打包填 shebang 的时候也是把解释器路径写死的, 这是运行可执行文件常用套路, Windows 上 pylauncher 读 shebang 也让我双击 .py 文件时候自动选择对应 Python 版本挺好使的

阳了, 现在脑子里有病毒, 一动脑子就头疼~~
LindsayZhou
2023-01-06 22:28:31 +08:00
另外我再多嘴一条。
如果我离线部署,不会把整个装好的环境拷贝过去,而是用离线的 installer 装好 python 后,把依赖包的 whl 下载传到机器上安装。
找到有相关的博客文章: https://imshuai.com/python-pip-install-package-offline-tensorflow

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

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

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

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

© 2021 V2EX