激活脚本

刚创建的隔离环境下会有一个 bin/activate 命令行脚本。在Windows下,激活脚本要在CMD.exe或Powershell.exe中使用。

在Posix系统(*nix/BSD)中,用法如下:

  1. $ source bin/activate

该操作会将当前 $PATH 指向隔离环境下的 bin/ 目录。之所以要用source是因为它要改变当前shell环境。仅仅就是一行命令,就这么简单。如果直接运行隔离环境下的脚本或是python解释器(比如 path/to/env/bin/pip or/path/to/env/bin/python script.py ),那都没必要使用激活脚本。

输入 deactivate 就能退出已激活的隔离环境,也就是取消对当前 $PATH 所做的修改。

activate 脚本会修改当前shell命令行提示符,以提示当前激活的是哪个隔离环境。这是挺有用的,不过要是想自定义的提示符,只要在运行 activate 前将 VIRTUAL_ENV_DISABLE_PROMPT 设为你想要的提示(不能为空字符串)。

在Windows下只须如此(*nix用户此处就不用看了,包括下面的注意也不用看了):

  1. > \path\to\env\Scripts\activate

输入 deactivate 就能退出隔离环境。

视你用的shell不同(CMD.exe或Powershell.exe),Windows会使用activate.bat或activate.ps1来激活隔离环境。如果使用的是Powershell,那么以下几点值得注意。

注意(说真的,开发python还是在*nix下好,真的真的真的!):

使用Powershell时,运行 activate 脚本取决于执行策略_ 。但在Windows7下,默认情况下执行策略被设为严格,
这就意味着象 activate 这样的脚本是不能直接运行的。但稍微设置一下即可。

降低执行策略,改为 AllSigned, 这就意味着本机所有已通过数字签名的脚本都获许运行。
由于virtualenv作者之一Jannis Leidel的数字签名已被核准,允许运行。那么只要以管理员权限运行::

  1. PS C:\> Set-ExecutionPolicy AllSigned
接下来运行脚本时会提示是否信任该签名::
  1. PS C:\> virtualenv .\foo
  2. New python executable in C:\foo\Scripts\python.exe
  3. Installing setuptools................done.
  4. Installing pip...................done.
  5. PS C:\> .\foo\scripts\activate
  6.  
  7. Do you want to run software from this untrusted publisher?
  8. File C:\foo\scripts\activate.ps1 is published by E=jannis@leidel.info,
  9. CN=Jannis Leidel, L=Berlin, S=Berlin, C=DE, Description=581796-Gh7xfJxkxQSIO4E0
  10. and is not trusted on your system. Only run scripts from trusted publishers.
  11. [V] Never run [D] Do not run [R] Run once [A] Always run [?] Help
  12. (default is "D"):A
  13. (foo) PS C:\>

如果选择了 [A] Always Run, 该证书就会添加到当前帐户下的受信任发布者名单中,而且此后一直被该用户所信任。
如果选择了 [R] Run Once, 该脚本会立即运行,但之后每次使用都会重新出现信任提示并选择。
高级用户可以将该证书添加到当前计算机的受信任发布者名单中,这样所有用户都可以使用该脚本了(不过这部分内容已经超过了本文档范畴了)。

此外,还可以进一步降低执行策略,允行未验证的本地脚本运行::

  1. PS C:\> Set-ExecutionPolicy RemoteSigned

因为对任何一个virtualenv环境而言, activate.ps1 都是一个本地脚本而非远程脚本,因为可以获准运行。