mac下Python关于venv 的使用

Python011

mac下Python关于venv 的使用,第1张

廖雪峰 virtualenv

Python 项目管理的利器:虚拟环境 venv 的使用

virtualenv 用于解决环境依赖而存在,通过 virtualenv 命令可以生成项目的独立依赖环境。

如果本地有多个版本的 Python ,需要对不同版本的 Python 单独安装 virtualenv 。

不清楚管理多个版本 Python 的,可以参考我的另一篇 Mac管理多版本Python

不久之前,重装了系统,发现 system 下的 Python (系统自带的版本)默认没有安装 pip

先安装下 pip ,终端下执行:

安装完毕如下:

安装virtualenv

出现这样的警告:

说是 Python 2.7 将于2020年1月1日结束它的生命。。。

看来 Python3 大势已定。

如果出现这样的错误:

应该是权限问题,根据提示加上 --user 试试。

安装成功:

查看当前 Python 版本: system ,已经安装的库:

新建一个文件夹test,test作为工程文件夹,在该文件夹中创建 venv 环境。

使用virtualenv命令,可以自动创建 venv 环境。

可以发现 virtualenv 已经安装,但是会提示无此命令:

可以再执行一次安装命令,终端会提示 virtualenv 的安装路径

顺着这条路径

/Users/wuxiaoxin/Library/Python/2.7/lib/python/site-packages

可以找到 virtualenv 命令文件所在路径

/Users/wuxiaoxin/Library/Python/2.7/bin/virtualenv

这个命令 virtualenv 可以成功执行。至于为什么安装后不会自动设置环境变量,原因不详。

这时候有两种方式可以尝试下

重启终端,查看 PATH ,发现路径已经成功加到 PATH

测试成功:

这里其实不需要考虑 Python 版本问题, virtualenv 命令已经限定了 Python 版本。

如果你将 .bash_profile 中关于 virtualenv 的路径设置注释掉,重启终端,再执行 virtualenv ,会发现:

现在可以正常使用了:

加上了参数 --no-site-packages ,这样,已经安装到系统 Python 环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的 Python 运行环境。

实测不加这么个参数,直接执行 virtualenv venv 也是一样的效果呢。

如何知道?启动该虚拟环境,在该环境下 pip list 即可一目了然。

比如我的一个虚拟环境安装在这个路径下:

/Users/vampire/Desktop/test3/venv

那么可以这样启动虚拟环境:

如图,已经启动虚拟环境:

如下,test3中使用参数 --no-site-packages ,test4中不使用参数 --no-site-packages ,实测可以看出, --no-site-packages 参数加上和不加上,效果一样:

只有一种可能, --no-site-packages 是默认参数。

终端下执行virtualenv可以看到:

那么 --system-site-packages 就是它的对立参数了,测试下:

可以看到,安装在系统的 Python 环境中的库,也复制到这个虚拟环境中来了。

还需要注意的是这个参数:

可以看出,执行 virtualenv 命令生成的虚拟环境,默认是依据

/usr/bin/python 目录下的 Python 环境。其实也就是当前安装 virtualenv 所属的 Python 的版本。

当前电脑下有两个 Python 环境:

如果这样执行命令,会怎样?

如果是这样限制的话,需要创建源自 python3.7.4 版本的依赖环境,直接使用 pyenv 进行切换即可, virtualenv 不需要带这个参数 --python 了。

假设一个新的 venv 虚拟环境所在的目录如下:

/Users/vampire/Desktop/test/venv

venv 目录中包含如下文件夹:

退出虚拟环境的命令:

终端下先进入该venv环境,再执行 pip install 安装。

一般我们使用 virtualenv 的目的是为了让一个工程拥有独立的依赖环境。

我们会把 virtualenv 生成的环境 venv 放置在工程路径下。

如果我们移动了这个工程的路径, venv 路径也会随之改变,因此注意修改这个命令文件

activate ,打开这个文件,你会发现其实就是 bash shell 脚本,该命令的路径也固定写在其中:

各位渴望看我笑话的老铁们,恭喜,你们又有乐子看了。

在昨天顺利攻克了文本编辑器难题后,我很愉快继续学习后面的两个小节《Python代码运行助手》《输入和输出》。

前者没啥可说的,感觉跟我没啥太大关系、意义不大,简单看看就过去了。

《输入和输出》一节,按照教程操作,还是蛮愉快的。

这节主要讲了print和input命令的使用方法,以及变量的概念。

前面的学习过程可谓一马平川,结果最后的练习稍微出现了点小问题。

练习:请利用print()输出1024 * 768 = xxx。

我本来觉得是个很简单的问题,没想到输入了4遍才搞定。

我估计应该是中间错加了空格的问题。

好吧,对比例子,应该还得加逗号。

嗯,这他么其实是个手误,逗号输错了位置。(残念)

这小玩意都用了四遍才搞定,40岁的老男人真的太难了。

继续进入后面的学习。

下一章《Python基础》中第一节《数据类型和变量》。

然后,我就蒙圈了。

这一节的内容知识量明显增多,前面的内容还好,按部就班的按照教程进行操作就好。

后面开始出现转义符的概念,什么\n、\t、\之类的东东,总之确实需要动些脑子了。

这里我觉得,是不是可以简单理解为:两个“\”表示显示“\”,一个“\”表示转义呢?

相比之下,后面讲“用r''表示''内部的字符串默认不转义”我感觉更好理解一些。

还有,“\t 表示制表符”是什么意思?

我真的好傻,悲伤的泪水不争气的流了下来。

上面的问题,哪位知道的仁兄,望在评论区赐教,在此谢过了。

再往后讲变量,我就有点进行不下去了。

给a赋值为1,这个我明白,但是后面t_007=T007,这是为啥?咋蹦出来的?

或者t_007跟a是一个概念,也是在进行赋值操作?

我这么猜测不知道对不对。

他后面举的那个例子,我就彻底晕菜了。

其实说起来,可能也不能怪人家教程,周末这两天在家,确实也很难静下来学习。

但是另一方面,就像很多网友评论区、微信上跟我探讨的,廖雪峰这个教程确实还是存在一些问题的,甚至有人说他有些误导的成分在里面,这个我学的还少,就不敢妄言了。

所以,我决定,结合自己的实际情况(岁数大、脑子慢!),以后以b站600集视频为主不香吗?

毕竟,那个看的很欢乐,最关键的是,学习至今还没遇到槛。

所以,下一期的心得,我就说说在b站上,我都学了些啥吧。。。