V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
loading
V2EX  ›  Python

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

  •  
  •   loading ·
    ycf · 2023-01-06 17:32:20 +08:00 · 2196 次点击
    这是一个创建于 686 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    loading
        1
    loading  
    OP
       2023-01-06 17:50:40 +08:00
    用 notepad++ 修改,用 vscode 和记事本修改都会损坏 exe 文件。

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

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


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

    部署的话有必要吗, 只打包依赖和代码可以不, 我之前写了一个叫 zipapps 的可以试试, 说白了就是把代码和依赖封到 zip 文件里, 运行的时候用解释器直接执行它(所以如果封装时候不用 .pyz 扩展名用 .py 扩展名, 可以直接双击)
    loading
        5
    loading  
    OP
       2023-01-06 19:50:22 +08:00 via Android
    @ClericPy pip.exe 是类似 npm 一样的包安装工具而已,uvicorn 是个类似 cgi 的 ASGI ,后面 py 都要它去跑,你觉得这两个 exe 编译了绝对路径信息进去没毛病吗?这两个不是我的编译结果,是环境而已啊。
    LindsayZhou
        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 ,注册表三种方式,这会被编译优化掉确实有点离谱。
    ClericPy
        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 没什么特殊功能
    LindsayZhou
        8
    LindsayZhou  
       2023-01-06 22:08:09 +08:00
    @ClericPy #7
    那看起来是 distlib 的原因了。
    找到了相关的 issue ,说是有意这么设计的,应该能回答楼主的问题吧。

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

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

    阳了, 现在脑子里有病毒, 一动脑子就头疼~~
    LindsayZhou
        10
    LindsayZhou  
       2023-01-06 22:28:31 +08:00
    另外我再多嘴一条。
    如果我离线部署,不会把整个装好的环境拷贝过去,而是用离线的 installer 装好 python 后,把依赖包的 whl 下载传到机器上安装。
    找到有相关的博客文章: https://imshuai.com/python-pip-install-package-offline-tensorflow
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2946 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 03:50 · PVG 11:50 · LAX 19:50 · JFK 22:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.