【问题标题】:Virtualenv ". venv/bin/activate" vs "source venv/bin/activate"Virtualenv ".venv/bin/activate" 与 "source venv/bin/activate"
【发布时间】:2017-09-06 23:55:07
【问题描述】:

假设我创建了一个名为 venv (virtualenv venv) 的 virtualenv

从阅读教程中,我了解到激活虚拟环境有两种方法:

  1. . venv/bin/activate

  2. source venv/bin/activate

我认为他们都完成了同样的事情,但我不明白发生了什么。

对于数字 1,不是“。”只是指当前文件夹?但如果我只输入“venv/bin/activate”而不输入“.”,它就不起作用

任何帮助都会很棒!

【问题讨论】:

    标签: python virtualenv


    【解决方案1】:

    .source 做同样的事情,唯一的区别是虽然source 更具可读性,但它可能并非在所有 shell 中都可用。

    该命令在当前 shell 中运行脚本的内容,这对于 activate 的情况很重要,因为脚本所做的一件事就是导出和修改当前 shell 中的环境变量。

    如果您使用./path/to/activate 运行它,脚本将在子shell 中运行,一旦脚本完成并且子shell 终止,所有设置的环境变量都将丢失。

    对于数字 1,“。”不是吗?只是指当前文件夹?

    . 根据上下文有不同的含义。它仅在用作路径(或路径的一部分)时表示“当前文件夹”。

    来自http://en.wikipedia.org/wiki/Dot_%28Unix%29

    不要将点命令与dot file, which is a dot-prefixed hidden file or hidden directory 混淆。


    顺便说一句,我建议您看看virtualenvwrapper,它提供了额外的包装命令,使virtualenv 更易于使用。

    使用virtualenvwrapper,只需调用以下命令即可切换到环境:

    workon YOUR_ENV
    

    【讨论】:

    • @JohnP 哎呀。我可能不小心把它删掉了。让我把它放回去。
    • 如果您使用的是 Ubuntu,则必须注意它使用 Dash 并且在早期版本中 /bin/bash 指向 dash(不确定它是否仍然如此),因此 source 没有工作,但是 .工作正常。
    • 我用source venv/bin/activate
    【解决方案2】:

    . 命令本质上是source 的别名。它们都在当前 shell 中执行给定的脚本,而无需派生新的 shell。

    Here 是一些很好的例子。

    【讨论】:

    • 其他方式:. 是在任何地方都可以使用的 POSIX-specified commandsource 是别名(在 shell 子集上可用)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-16
    • 2021-03-22
    • 2020-10-09
    • 2020-10-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多