网站首页 > 开源技术 正文
0x00 virtualenv使用
我们使用python的时候,通常会安装很多的第三方包,为了不污染系统自带的python环境,我们通常会使用virtualenv.
首先,使用如下的命令看下系统自带的python使用的包路径
python -m site
其中/usr/lib64/python2.7/site-packages就是我们直接使用pip install 安装的包所在的路径
使用如下的命令安装virtualenv包
pip install virtualenv
使用如下命令在testenv目录中新建一个virtualenv
virtualenv testenv
使用如下命令可以看到这个virtualenv里面的python使用的包路径是自己的.
bin/python -m site
使用如下的命令可以看到,这个virutalenv里面只有pip setuptools wheel这几个用于安装包的包
source bin/activate pip list
不过因为/usr/lib64/python2.7也在sys.path里面,所以系统自带的模块也可以被使用.
0x01 virtualenv是怎么实现的
首先,看下系统自带的python和virtualenv中的python可执行文件,发现是同一个文件.说明python可执行文件和系统中的是同一个.
#md5sum bin/python /usr/bin/python
我们先模拟一下virtualenv的实现逻辑,在~/toutiao/testenv下执行如下命令
#mkdir -p bin lib64/python2.7 #cp /usr/bin/python bin/ #bin/python -c 'import sys;print sys.path'
发现sys.path和/usr/bin/python的值还是一样的.说明单纯把python可执行文件复制过去没有用.
再添加一些文件和目录,发现现在sys.path都变成我们新建的myenv目录下的目录了.
#touch lib64/python2.7/os.py #touch lib64/python2.7/site.py #mkdir lib64/python2.7/lib-dynload #myenv/bin/python -c 'import sys; print sys.prefix;print sys.exec_prefix;print sys.path'
说明python这个可执行文件在确定sys.prefix,sys.exec_prefix,进而构建sys.path的时候,会通过自己所在的目录进行os.py文件搜索,搜索过程从当前目录一直回退到根目录,直到第一个lib64/pythonX.Y/os.py出现的地方.其中X.Y表示python的版本.
我们还发现,比起virtualenv得到的环境,我们模拟的这个里面没有系统的/usr/lib64/python2.7,也没有自定义的site-package目录. 因为我们的site.py文件中没有添加任何内容.
同理,当我们使用virtualenv的时候,如果加上--system-site-packages选项,那么在得到的virtualenv中pip list可以看到在系统site-package中安装的包,这个选项也是在生成的site.py中添加了系统的site-package目录.
0xff 参考文献
virtualenv的实现本身是cpython实现的时候自己带上的一个功能,后面被大家发现之后使用起来的.下面这篇文章详细介绍了相应的机制,本文只是介绍了其中最主要的部分.感兴趣的话可以看下.
http://carljm.github.io/pipvirtualenv-preso/#1
猜你喜欢
- 2024-09-12 python安装并使用虚拟环境virtualenv
- 2024-09-12 Python 开发工具链全解(python开发工具选择)
- 2024-09-12 送给Python初学者的几点建议(python初学者推荐书籍)
- 2024-09-12 JSShell:一个基于python的交互式Shell
- 2024-09-12 多人在用,一款实用的Python开发环境管理神器
- 2024-09-12 AI革新OCR:LLM-Aided OCR,让PDF文本提取飞起来!
- 2024-09-12 使用python的虚拟环境virtualenv(python虚拟环境作用)
- 2024-09-12 终极版Python学习教程:一篇文章讲清楚Python虚拟环境
- 2024-09-12 编程语言哪家强?谁是王者谁是青铜?
- 2024-09-12 删除系统 Python 引发的惨案(python3.8.5怎么删除)
你 发表评论:
欢迎- 最近发表
- 标签列表
-
- jdk (81)
- putty (66)
- rufus (78)
- 内网穿透 (89)
- okhttp (70)
- powertoys (74)
- windowsterminal (81)
- netcat (65)
- ghostscript (65)
- veracrypt (65)
- asp.netcore (70)
- wrk (67)
- aspose.words (80)
- itk (80)
- ajaxfileupload.js (66)
- sqlhelper (67)
- express.js (67)
- phpmailer (67)
- xjar (70)
- redisclient (78)
- wakeonlan (66)
- tinygo (85)
- startbbs (72)
- webftp (82)
- vsvim (79)
本文暂时没有评论,来添加一个吧(●'◡'●)