【问题标题】:Including global package into a virtualenv that has been created with --no-site-packages将全局包包含到使用 --no-site-packages 创建的 virtualenv 中
【发布时间】:2011-02-15 13:54:16
【问题描述】:

我通常更喜欢使用--no-site-packages 选项创建virtualenvs 以实现更多隔离,而且因为默认的python 全局包包含相当多的包,而且通常大多数不需要。 但是,我仍然希望在全球范围内保留一些精选包,例如 PILpsycopg2。有没有一种好方法可以将它们包含在virtualenv 中,也可以轻松实现自动化?

【问题讨论】:

标签: python virtualenv easy-install pip


【解决方案1】:

如果您使用virtualenvwrapper,则shell 命令add2virtualenv 应该存在于活动的virtualenv 中。使用:

add2virtualenv /path/to/package

向您的 virtualenv 站点包中的 PTH 文件 _virtualenv_path_extensions.pth 添加一个条目。

使用 add2virtualenv 而不是自己创建符号链接的好处是,您可以通过在 PTH 文件中注释掉它的行来删除包的可导入性。这样可以更轻松地针对代码所依赖的库的多个版本检查代码的有效性。

【讨论】:

  • 是的,我同意这是现在更好的方法。我很确定几年前它还没有。
  • 可能它不可用。我当然是 virtualenvwrapper 的忠实粉丝,因为我喜欢这样的小有用的东西。当然你也可以手动完成,通过编写你自己的 PTH 文件。
【解决方案2】:

如果您使用virtualenvwrapper,并且您可以使用postmkvirtualenv 脚本在新的virtualenv sitepackages 目录中自动创建符号链接。

#!/bin/sh
cdsitepackages
ln -s /path/to/system/site-packages/package-name
cdvirtualenv

【讨论】:

  • 忘记了这个问题,但我最终还是这样做了。
【解决方案3】:

我实际上并没有尝试过使用这些特定的包,但我猜想从全局站点包到 virtualenv 的站点包的简单符号链接可能会起作用,而且这很容易编写脚本。

【讨论】:

    猜你喜欢
    • 2010-11-25
    • 2011-10-01
    • 2011-03-23
    • 2012-02-11
    • 1970-01-01
    • 2019-08-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多