【问题标题】:Default libraries in freshly created Python virtual environment新创建的 Python 虚拟环境中的默认库
【发布时间】:2015-01-21 23:30:52
【问题描述】:

我使用 python virtualenv 工具创建了一个新的虚拟环境。

virtualenv venv

然后我激活了虚拟环境

source venv/bin/activate

然后我做了一个pip freeze,这就是我得到的:

(venv)$ pip freeze
Flask==0.10.1
Werkzeug==0.9.6
itsdangerous==0.24
lxml==3.4.0
numpy==1.9.1
pdir==0.2.2
virtualenv==1.11.6
wsgiref==0.1.2

我想知道当我什至没有在虚拟环境中明确安装任何东西时,安装了多少库。

更新 1:当一些答案建议时,我在第 1 步中也使用了virtualenv --no-site-packages,以创建一个新的 venv,但同样的问题仍然存在。好像使用参数根本没有效果。

更新 2:我能够解决问题,并在下面发布了我的经验。正如在 cmets 中指出的那样;这是一个相关的问题; link,帮我解决了问题。

【问题讨论】:

  • 我在 Mac OS X 10.10 上使用自制的 python。早些时候我在 Ubuntu 上使用 Python 并没有遇到过这个问题。
  • ^ 谢谢。这很有用。

标签: python virtualenv python-venv


【解决方案1】:

这些是已在您的系统上全局安装的库。

最佳做法是在创建 virtualenv 时使用 --no-site-packages 选项以避免这个确切的问题。

【讨论】:

  • 出于某种原因,我认为 --no-site-packages 已成为 virtualenv 中的默认值
  • 即使使用了 --no-site-packages,我仍然面临这个问题。我之前在 ubuntu 上使用过 python,但从未遇到过这个问题。即使我没有使用 --no-site-packages,新鲜的 venv 也不包含系统库。这是我想的默认值。现在,即使我使用 --no-site-packages,也没有任何反应。 (在 OS X 10.10 上使用 python)
【解决方案2】:

我能够解决问题。在我的 ~/.bash_profile 文件中;我有以下造成问题的行:

export PYTHONPATH=/usr/local/lib/python2.7/site-packages:$PYTHONPATH

正如 Martin Lewis 在对 related question 的回答中指出的那样,--no-site-packages 将从 sys.path 中删除标准站点包目录。但是任何其他存在于标准 Python 路径中的东西仍然会保留。

P.S:我仍然不确定为什么 virtualenv 会这样工作。为什么要包含 PYTHONPATH 上的软件包。但至少知道这可以解决我的问题。

【讨论】:

    【解决方案3】:

    documentation - The --system-site-packages Option

    如果您使用virtualenv --system-site-packages ENV 构建,您的虚拟 环境将继承包 /usr/lib/python2.7/site-packages (或任何你的全球 site-packages 目录是)。

    如果您可以控制全局站点包,则可以使用此选项 目录,你想依赖那里的包。如果你想 与全局系统隔离,请勿使用此标志。

    这些库已经安装在您的系统中。除非您指定 --no-site-packages,否则它们将被继承。

    【讨论】:

      【解决方案4】:

      “hackish”解决方案是激活虚拟环境并运行

      pip freeze | xargs pip uninstall -y
      

      这将卸载所有不需要的软件包。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-09-03
        • 2014-01-24
        • 2016-03-29
        • 2021-12-30
        • 2021-07-30
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多