【问题标题】:Pip requirements outputting global packages输出全局包的pip需求
【发布时间】:2012-09-15 04:20:26
【问题描述】:

我的 django 项目有一个虚拟环境,但是当我点击 pip freeze 时,我得到了一个必须是全局站点包列表,其中包含太多的包,比如 ubuntu 包和很多不相关的东西。无论 virtualenv 是否处于活动状态,都会发生这种情况。我的站点包列表看起来也有点苗条,所以我想知道 venv 是否一直在工作。

(env)~/code/django/ssc/dev/env/lib/python2.7/site-packages> ls
django
Django-1.4-py2.7.egg-info
easy-install.pth
pip-1.0.2-py2.7.egg
setuptools-0.6c11-py2.7.egg
setuptools.pth

我的问题是什么?

【问题讨论】:

    标签: pip virtualenv requirements.txt


    【解决方案1】:

    如果您的虚拟环境可以访问系统的站点包目录(即您使用了virtualenv --system-site-packages),那么列表较长是正常的。

    比较以下:

    $ virtualenv --system-site-packages v1 && source v1/bin/activate
    $ (v1) pip freeze | wc -l  # 100
    
    $ virtualenv v2 && source v2/bin/activate
    $ (v2) pip freeze | wc -l  # 2
    

    您可以尝试重新创建 virtualenv 吗?

    或者,添加一个no-global-site-packages.txt 文件应该告诉 pip 忽略全局站点包:

    $ touch $VIRTUAL_ENV/lib/python${version}/no-global-site-packages.txt
    

    【讨论】:

    • 你的意思是重新设置 virtualenv,并重新安装我使用的所有包?我想我别无选择对吧?但我确定我没有使用 --system-site-packages。我跟着这个:jeffknupp.com/blog/2012/02/09/… 你能想到为什么会发生这种情况吗?我将通过删除 env 文件夹并重新启动它来重新创建虚拟 env。我可以检查它是否以某种方式使用系统站点包吗?我猜只是在第一次冻结时检查它是否包含它们?
    • 我已经更新了答案,但他们在文章中遵循的过程确实没有什么特别之处。检查no-global-site-packages.txt 应该会为您提供该信息。
    • 有一个no-global-site-packages.txt 文件。但是我的需求文件不应该包括节奏框-ubuntuone==3.0.0 sessioninstaller==0.0.0 simplejson==2.3.2 software-center-aptd-plugins==0.0.0 ssh==1.7.14 system -service==0.1.6 ubuntuone-couch==0.3.0 ubuntuone-installer==3.0.2 ubuntuone-storage-protocol==3.0.2 我不明白。我早就知道我被诅咒了,但这一次不加起来。
    • pip freeze --local 好运吗?甚至可能是sudo pip install --upgrade pip virtualenv?实在不行。
    • @gvalkov 非常感谢为pip freeze 提供--local 选项。请在您的答案中包含此内容,因为我一直在寻找它太久了。
    【解决方案2】:

    我不明白为什么最简洁的选项只留在 cmets 中。由于我几乎错过了它,因此我将其作为单独的答案放在这里,并进行了一些调整。 如果您正在运行启用了 system-site-packages 的虚拟环境,则可以在 pip freeze 添加 --local 标志。 所以,如果你有:

    py -m venv --system-site-packages env
    

    为确保您没有将所有系统部门都放入您的 requirements.txt,只需运行:

    python -m pip freeze --local > requirements.txt
    

    另一个更复杂但仍然可行的选项是进入虚拟环境库中的 pyvenv.cfg 文件并手动更改:

    include-system-site-packages = true/false
    

    【讨论】:

    • 谢谢,这是为我做的
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-05-30
    • 2014-01-23
    • 2013-01-15
    • 1970-01-01
    • 2018-05-21
    • 1970-01-01
    • 2015-09-06
    相关资源
    最近更新 更多