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" 项目一起执行了预期的操作。
我的服务器有 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" 项目一起执行了预期的操作。