【问题标题】:why did virtualenv not include all of the system paths?为什么 virtualenv 不包含所有系统路径?
【发布时间】:2010-11-04 22:18:36
【问题描述】:

我创建了一个 virtualenv,虽然它有很多系统路径,但没有其他路径。具体来说,似乎不包括 pyshared 和 dist-packages。结果,我的系统范围的 MySQLdb 和 psycopg2 不可用。任何想法为什么?

【问题讨论】:

  • 详细信息:您是如何创建 virtualenv 的。命令是什么。

标签: python path virtualenv


【解决方案1】:

【讨论】:

    【解决方案2】:

    我知道的唯一可能的方法是,如果您使用参数 --no-site-packages 创建了您的 virtualenv:

    来自Here

    如果你使用 virtualenv 构建 --no-site-packages ENV 它不会继承任何包 /usr/lib/python2.5/site-packages(或 无论您的全球站点包在哪里 目录是)。如果你可以使用这个 无法控制站点包 并且不想依赖 包在那里,或者你只是想要更多 与全球系统隔离。

    所以这里有一个例子来了解更多:

    首先,我将正常创建一个 virtualenv(没有 --no-site-package),你会看到 我总是可以访问安装在我的系统站点包(或 dist-packages)中的 django:

    $ virtualenv A
    New python executable in A/bin/python
    Installing setuptools............done
    $ source A/bin/activate
    (A)$ python
    Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import django  
    >>> django.__file__
    '/usr/local/lib/python2.6/dist-packages/django/__init__.pyc'
    

    但现在我将使用 --no-site-package 创建虚拟环境:

    $ virtualenv B --no-site-package
    New python executable in B/bin/python
    Installing setuptools............done.
    $ source B/bin/activate
    (B)$ python
    Python 2.6.5 (r265:79063, Apr 16 2010, 13:57:41) 
    [GCC 4.4.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>> import django
    Traceback (most recent call last):
      File "<stdin>", line 1, in <module>
    ImportError: No module named django
    

    现在您看到 virtaulenv 能够从我机器中的系统 dist-packages (ubuntu) 访问 django。

    希望这会有所帮助:)

    【讨论】:

    • 这将是一个很好的答案,除了“唯一可能的方式”部分,这是完全错误的。 Ubuntu 处理 dist-packages(由它组成)与 site-packages(由 Debian 组成)不同,因此如果您使用从 python 的 easy_install 或 python 安装的 pip 安装的 virtualenv 创建一个 virtualenv,它将无法识别dist-packages,在 Ubuntu 上会显示这些症状。
    • @freyley:对不起,但我不同意,因为当您使用 no-site-packages 运行 virtualenv 时,这意味着 virtualenv 中的 python 解释器将无法识别任何虚拟环境之外的包,无论安装在哪里(站点包,dist-packages ...)或您使用的是什么操作系统,当我导入django时,请特别查看我的编辑部分,看看您认为什么是错误的,因为在我的第一个 virtualenv 我从 dist-packages 导入 django,只是为了说明我只是想帮助你,所以我不想争论什么的,也许你的情况很特殊。
    • “不像我想争论”很有趣,因为你在争论我错了,而我遇到的问题可能发生的“唯一方法”是通过不-网站包。
    • 说清楚,奇异点,我觉得你的回答很好,除了那几句话。对于找到另一种方式的人(你承认这是可能的——“也许你的情况很特殊”——这些话感觉像是一种攻击。它们没有帮助。“最有可能的方式”会更有用.
    • @freyley:对不起,如果我冒犯了你,但有一种说法是我的业务教会了我很多:80% 的错误来自用户,而不是应用程序,你看我只是想在这里提供帮助,但我想你没有看到,但请原谅我这么说,但你可以说:“我没有使用 no-site-package从一开始就创建我的virtualenv”而不是我会闭嘴:),但如果我冒犯了你,请接受我的道歉,祝你好运:)
    猜你喜欢
    • 2014-12-13
    • 2011-02-19
    • 1970-01-01
    • 2023-03-26
    • 1970-01-01
    • 2011-01-27
    • 1970-01-01
    • 2022-10-23
    • 1970-01-01
    相关资源
    最近更新 更多