python virtualenv activate文件分析
来源:互联网 发布:three.js 全景图切换 编辑:程序博客网 时间:2024/06/09 21:14
使用virtualenv创建了一个虚拟环境后,需要先执行source activate才能够激活此虚拟环境,其实activate是一个shell脚本文件,本文将对此文件进行分析,以让读者明白此脚本的功能。
本文将以我的一个activate文件为例,进行解析。
我的activate文件如下:
# This file must be used with "source bin/activate" *from bash* # you cannot run it directly deactivate () { unset -f pydoc >/dev/null 2>&1 # reset old environment variables # ! [ -z ${VAR+_} ] returns true if VAR is declared at all if ! [ -z "${_OLD_VIRTUAL_PATH+_}" ] ; then PATH="$_OLD_VIRTUAL_PATH" export PATH unset _OLD_VIRTUAL_PATH fi if ! [ -z "${_OLD_VIRTUAL_PYTHONHOME+_}" ] ; then PYTHONHOME="$_OLD_VIRTUAL_PYTHONHOME" export PYTHONHOME unset _OLD_VIRTUAL_PYTHONHOME fi # This should detect bash and zsh, which have a hash command that must # be called to get it to forget past commands. Without forgetting # past commands the $PATH changes we made may not be respected if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then hash -r 2>/dev/null fi if ! [ -z "${_OLD_VIRTUAL_PS1+_}" ] ; then PS1="$_OLD_VIRTUAL_PS1" export PS1 unset _OLD_VIRTUAL_PS1 fi unset VIRTUAL_ENV if [ ! "${1-}" = "nondestructive" ] ; then # Self destruct! unset -f deactivate fi } # unset irrelevant variables deactivate nondestructive VIRTUAL_ENV="/home/dk/test/venv" export VIRTUAL_ENV _OLD_VIRTUAL_PATH="$PATH" PATH="$VIRTUAL_ENV/bin:$PATH" export PATH # unset PYTHONHOME if set if ! [ -z "${PYTHONHOME+_}" ] ; then _OLD_VIRTUAL_PYTHONHOME="$PYTHONHOME" unset PYTHONHOME fi if [ -z "${VIRTUAL_ENV_DISABLE_PROMPT-}" ] ; then _OLD_VIRTUAL_PS1="$PS1" if [ "x" != x ] ; then PS1="$PS1" else PS1="(`basename \"$VIRTUAL_ENV\"`) $PS1" fi export PS1 fi # Make sure to unalias pydoc if it's already there alias pydoc 2>/dev/null >/dev/null && unalias pydoc pydoc () { python -m pydoc "$@" } # This should detect bash and zsh, which have a hash command that must # be called to get it to forget past commands. Without forgetting # past commands the $PATH changes we made may not be respected if [ -n "${BASH-}" ] || [ -n "${ZSH_VERSION-}" ] ; then hash -r 2>/dev/null fi
关键点:
1. 创建VIRTUAL_ENV环境变量,此环境变量执行虚拟环境,然后将此环境变量插入到PATH环境变量之前,这就保证每次优先到此处来执行python。
2. 此处仅仅调整了PATH环境变量,然后我使用sys.path查看了一些激化了虚拟环境后的path环境变量,发现了一些我比较疑惑的地方:
显然,它自动将venv目录下的lib目录添加到sys.path中,对比,env目录输出的激活python虚拟环境后的环境变量path:
则会发现,其实python的sys.path 和系统的path环境变量的值是不相同的。
这就引出了一个问题,python是如何根据系统环境变量path来构建自己的sys.path变量的呢??
阅读全文
0 0
- python virtualenv activate文件分析
- Python虚拟环境virtualenv保存库文件
- Python virtualenv
- python virtualenv
- python virtualenv
- python virtualenv
- python virtualenv
- python virtualenv
- python virtualenv
- python virtualenv
- [Python] Python 虚拟机 - virtualenv
- python虚拟环境-virtualenv
- python虚拟环境-virtualenv
- virtualenv工具--python
- Python 虚拟环境:Virtualenv
- Python 虚拟环境:Virtualenv
- python 虚拟环境 Virtualenv
- Python 虚拟环境:Virtualenv
- 使用jQuery实现Ajax
- 5.依赖倒转原则
- 快速排序的三种实现方式以及非递归版本
- 个人学习总结的部分java小知识与面试题(三)
- Develop Universal Robot (UR) in ROS: From Install to Demo
- python virtualenv activate文件分析
- 6.装饰模式
- Java中递归实现复制文件夹和文件
- PHP解决网页乱码问题
- Java注解自定义注解
- 马农???(穷举+哈希)
- Android应用开发的基本流程
- log4j学习demo
- 安装django + Apach + mod_wsgi