【问题标题】:Can a virtualenv inherit from another?virtualenv 可以从另一个继承吗?
【发布时间】:2012-05-19 07:14:10
【问题描述】:

我想以另一个为起点创建一个virtualenv,可以吗?

我必须牢记用例:

  1. 假设我有两个virtualenv,一个用于生产,一个用于开发。开发环境需要与生产环境相同的包,但它需要其他我在生产环境中不需要的包。我不想两次安装常用软件包。

  2. 我想试验一个包的开发版本,例如matplotlib。软件包的开发版本与稳定版本的要求相同。所以我创建了一个名为matplotib_stablevirtualenv 并安装了要求和稳定版本。然后我创建了第二个virtualenv,名为matplotlib_dev,并使用matplotlib_stable 作为起点(对于matplotlib 的要求),然后我安装了开发版本。

How do I install from a local cache with pip?似乎解决了下载包的问题,​​但我不认为它涉及修改sys.path

【问题讨论】:

    标签: python virtualenv


    【解决方案1】:

    一种解决方案是使用virtualenvwrapperadd2virtualenv 命令。这个

    将指定的目录添加到 Python 路径中 当前活动的虚拟环境。

    所以如果我有两个virtualenvENV1ENV2,并且我希望ENV2 访问ENV1 中的包,那么我需要:

    1. 激活ENV2

      workon ENV2

    2. 使用add2virtualenv添加ENV1的站点包目录:

      add2virtualenv $WORKON_HOME/ENV1/lib/python2.6/site-packages

    以上假设$WORKON_HOME 是您的virtualenv 目录的位置,并且您使用的是python2.6,因此显然要相应地调整它们。

    虽然这提供了对包的访问,但它不会调整 shell 路径。换句话说,使用此方法无法访问安装到bin 目录的脚本。

    【讨论】:

    • 当我在两个 virtualenvs 上安装了不同版本的同一个包时,我发现外部环境 (ENV1) 优先于内部环境 (ENV2)。看起来 add2virtualenv 将其路径更早地放在 sys.path 导入列表中。一个简单的解决方案是使用上面的命令:add2virtualenv $WORKON_HOME/ENV2/lib/python2.6/site-packages,然后它就像一个魅力。
    • @Yann 谢谢Yann!我在ENV1中安装了pylint,然后add2virtualenv $WORKON_HOME/ENV1/lib/python3.4/site-packages,但是pylint不起作用!
    • @HelloNewWorld 我已经有一段时间没用过virtualenvvertualenvwrapper了,为什么不发布一个关于这个问题的新问题呢?
    • @Yann 同意。可能是时候更新 Python 3 和venv 的答案了。
    猜你喜欢
    • 2013-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 1970-01-01
    • 1970-01-01
    • 2011-07-25
    相关资源
    最近更新 更多