我的服务器有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
可以达到创造不同环境的效果?它背后的魔力是什么?
答案 0 :(得分:1)
有两个"魔法"。
1)shebang行通知内核使用正确的解释器。当您调用virtualenv2
时,内核会将其扩展为/usr/bin/python2 virtualenv2
。同样,当您调用vitualenv3
时,内核会将其扩展为/usr/bin/python3 virtualenv3
。
2)virtualenv.main()
基于当前运行的解释器创建虚拟环境。例如,如果virtualenv.main()
调用/usr/bin/python3
,则会根据/usr/bin/python3
创建虚拟环境。
希望你能看到这两个"魔法"项目,一起进行,执行预期的行动。