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
hhylx1950
V2EX  ›  Python

请问 pip 虚拟环境与--user 比有什么优势吗?

  •  
  •   hhylx1950 · 82 天前 · 2032 次点击
    这是一个创建于 82 天前的主题,其中的信息可能已经有所发展或是发生改变。

    如题,最近发现 debian 系统自带的 pip 已经不让自行安装 packages 了,提示“This environment is externally managed”。我查了一下,发现大概是 PEP 668 要求的,为了防止把系统环境搞乱,保护系统工具可用。

    可是我不理解这样做和传递--user 比有什么优势,用户安装在自己目录下的包也不会干扰系统工具啊。我之前一直用--user ,主要写一点脚本啥的自用。--user 下不会重复装 package ,也不需要切换虚拟环境,感觉还挺方便的。

    第 1 条附言  ·  81 天前
    怪我表达不清楚,我同意 venv 在项目开发的时候很有用。但是自己写脚本自己用应该也是合理的需求,这时候感觉强制 venv 比较烦人
    19 条回复    2024-10-11 21:40:23 +08:00
    momocraft
        1
    momocraft  
       82 天前
    venv 可以有任意多個 同一個包可以有多份(在不同 venv )

    全局 pip 的--user 一般就裝在 HOME 下一個位置
    NoOneNoBody
        2
    NoOneNoBody  
       82 天前
    A 包装在系统,那 --user 装 B 包,而 B 包指定了一个低版的 A 包作为依赖,怎么办?
    hhylx1950
        3
    hhylx1950  
    OP
       81 天前
    @NoOneNoBody 这个很好解决吧,user 把低版本的 A 包和 B 包放在自己目录下。系统用其它账户运行 python ,看不到 b 包和低版本的 A 包。
    NoOneNoBody
        4
    NoOneNoBody  
       81 天前
    @hhylx1950 #3
    你安装时会逐个依赖先检查一遍再安装么?
    ho121
        5
    ho121  
       81 天前 via Android
    比如要开发两个应用,一个比较旧,一个比较新,两个应用都依赖 A 但版本不一样。这种情况下用虚拟环境最适合了
    JKOR
        6
    JKOR  
       81 天前
    @hhylx1950 那么问题来了,此时另外一个项目中 C 包又需要一个更低版本的 A 包,怎么办?当你想到一个项目一个用户的时候 pip 虚拟环境的设计思想就来了,一个项目一个环境。
    hhylx1950
        7
    hhylx1950  
    OP
       81 天前 via Android
    @NoOneNoBody 不需要用户检查,pip 完全可以自己做到
    deplives
        8
    deplives  
       81 天前
    虚拟环境可以针对不同项目设置,user 只有一个环境
    比如你现在有 N 个项目,分别依赖某一个 package 的 N 个版本,用 user 怎么做
    hhylx1950
        9
    hhylx1950  
    OP
       81 天前 via Android
    @JKOR 我同意开发项目的时候这样是很有用的,我也这么用。但是不理解的是 user 安装有方便的地方,也不会造成问题,但是感觉被强制了
    kaedeair
        10
    kaedeair  
       81 天前
    系统工具依赖特定 python 版本和特定版本的包,所以才禁止全局安装,此外全局安装也会影响其他用户。
    当你的不同项目对同一个包有依赖但版本不同或使用的 python 版本不同时,虚拟环境才有用
    vituralfuture
        11
    vituralfuture  
       81 天前
    环境被外部管理的意思不只是说包被系统包管理器管理了,python 版本也被包管理器管理了。如果用--user ,然后发行版更新了 python 版本,就可能出现用--user 安装的包没法在更高版本的 python 解释器上运行的情况
    clemente
        12
    clemente  
       81 天前
    系统如果依赖 系统路径下的包路径 你升级了 系统软件崩了
    clemente
        13
    clemente  
       81 天前
    无脑 condamini 完事
    julyclyde
        14
    julyclyde  
       81 天前
    感觉这个功能开启之后--user 基本相当于不存在了
    需要开启 break system 然后才能开启 user
    COW
        15
    COW  
       81 天前
    一个项目一个 venv ,我一直是这么做的。因为同一个库,在不同项目下,版本可能会不同。当然,你也可以一个项目,一个 user 。。。
    beginor
        16
    beginor  
       81 天前 via Android
    参考 node_modules 目录
    hhylx1950
        17
    hhylx1950  
    OP
       81 天前
    @vituralfuture 感谢,这确实是个隐忧,不过概率很小罢了
    uni
        18
    uni  
       80 天前
    因为 pep 对单文件脚本的依赖和环境也是有规定的,哈哈
    还是用 uv 吧,全部解决了,省心
    iorilu
        19
    iorilu  
       80 天前
    啥意思, 你一次只搞一个项目吗

    任何 python 开发都知道区别把
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1114 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 18:42 · PVG 02:42 · LAX 10:42 · JFK 13:42
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.