1
loading OP 用 notepad++ 修改,用 vscode 和记事本修改都会损坏 exe 文件。
用 untraledit 应该也行,改完图标不变即可。 |
2
ClericPy 2023-01-06 18:03:27 +08:00
没太听懂路径信息 /互联网的路径信息... 能举个例子么
是说 pip install -t ./xxx 的方式安装的东西无法用吗 |
3
loading OP @ClericPy 在 exe 文件里面有
c:\user\123\ 的信息 而我内网机器的用户名不是 123 ,所以复制到内网后用不了。需要我用 notepad++打开 exe 文件 查找 c:\user\123\ 改成 c:\user\admin\ https://blog.csdn.net/delcomp/article/details/104742134 |
4
ClericPy 2023-01-06 18:43:20 +08:00
啊 你说的 exe 文件... 这些编译的东西确实经常封装运行时一些东西进去
部署的话有必要吗, 只打包依赖和代码可以不, 我之前写了一个叫 zipapps 的可以试试, 说白了就是把代码和依赖封到 zip 文件里, 运行的时候用解释器直接执行它(所以如果封装时候不用 .pyz 扩展名用 .py 扩展名, 可以直接双击) |
5
loading OP @ClericPy pip.exe 是类似 npm 一样的包安装工具而已,uvicorn 是个类似 cgi 的 ASGI ,后面 py 都要它去跑,你觉得这两个 exe 编译了绝对路径信息进去没毛病吗?这两个不是我的编译结果,是环境而已啊。
|
6
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 ,注册表三种方式,这会被编译优化掉确实有点离谱。 |
7
ClericPy 2023-01-06 21:50:02 +08:00 1
@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 没什么特殊功能 |
8
LindsayZhou 2023-01-06 22:08:09 +08:00
@ClericPy #7
那看起来是 distlib 的原因了。 找到了相关的 issue ,说是有意这么设计的,应该能回答楼主的问题吧。 https://github.com/pypa/pip/issues/10442#issuecomment-985327075 |
9
ClericPy 2023-01-06 22:27:54 +08:00
@LindsayZhou 如果说 exe 绑定 Python 解释器路径这个事的话... 那肯定的吧
以前用 shiv/zipapps 打包填 shebang 的时候也是把解释器路径写死的, 这是运行可执行文件常用套路, Windows 上 pylauncher 读 shebang 也让我双击 .py 文件时候自动选择对应 Python 版本挺好使的 阳了, 现在脑子里有病毒, 一动脑子就头疼~~ |
10
LindsayZhou 2023-01-06 22:28:31 +08:00
另外我再多嘴一条。
如果我离线部署,不会把整个装好的环境拷贝过去,而是用离线的 installer 装好 python 后,把依赖包的 whl 下载传到机器上安装。 找到有相关的博客文章: https://imshuai.com/python-pip-install-package-offline-tensorflow |