virtualenv 如何创建不同的 python 环境?

How can virtualenv create different python environments?

我的服务器有 3 个 virtualenv 脚本:

$ ls -lt virtual*
lrwxrwxrwx 1 root root  4 Nov 22 06:19 virtualbox -> VBox
-rwxr-xr-x 2 root root 55 Aug 14 19:34 virtualenv
-rwxr-xr-x 1 root root 55 Aug 14 19:34 virtualenv2
-rwxr-xr-x 2 root root 55 Aug 14 19:34 virtualenv3
$ cat virtualenv
#!/usr/bin/python3
import virtualenv
virtualenv.main()
$ cat virtualenv2
#!/usr/bin/python2
import virtualenv
virtualenv.main()
$ cat virtualenv3
#!/usr/bin/python3
import virtualenv
virtualenv.main()

我知道 virtualenv2 用于创建 Python 2 环境,而 virtualenv3 用于 Python 3。但令我疑惑的是,为什么只要将shebang行中的/usr/bin/python2修改为/usr/bin/python3就可以达到营造不同环境的效果呢?它背后的魔力是什么?

有两张"magic".

1) shebang 行通知内核使用正确的解释器。当您调用 virtualenv2 时,内核将其扩展为 /usr/bin/python2 virtualenv2。同样,当您调用 vitualenv3 时,内核将其扩展为 /usr/bin/python3 virtualenv3.

2) virtualenv.main() 基于当前 运行 解释器创建了一个虚拟环境。例如,如果 virtualenv.main()/usr/bin/python3 调用,那么它会创建一个基于 /usr/bin/python3.

的虚拟环境

希望您能看到这两个 "magic" 项目一起执行了预期的操作。