虚拟环境及创建项目
虚拟环境
当我们开发过程中,遇到了需要在一台机子上运行多个项目,这些项目的python解释器或者依赖包版本存在差异的时候,如果不借助虚拟环境,那么我们只能通过频繁的install以及uninstall不同版本的python解释器或者依赖包,这样做显然是不可取的,像这种情况下,我们可以通过虚拟环境来分配不同的Python解释器及依赖包
Virtualenvs
我们如果安装多个不同的版本的模块或者解析器,最好采用虚拟环境(Virtualenvs)来开发,使用下面的命令安装virtualenv:
# 虚拟环境的依赖库
pip install virtualenv
# 虚拟环境的外壳操作库,提供了一系列的全局命令
pip install virtualenvwrapper
# 兼容windows(如果不是windows系统则不需要)
pip install virtualenvwrapper-win
虚拟环境的外壳操作库的操作命令:
命令 | 参数选项 | 描述 |
---|---|---|
workon | 列出当前系统中所有的虚拟环境 | |
workon<虚拟环境名称> | 进入指定名称的虚拟环境中,路径左边就会出现虚拟环境名称,在有虚拟环境的名称时,终端下所有基于pip安装的python包和python环境都会保存在对应的虚拟环境目录下 | |
mkvirtualenv<虚拟环境名称> | -p 指定python解析器版本 | 创建一个指定名称的虚拟环境,一个虚拟环境就是一个目录 |
deactieve | 在虚拟环境内部退出环境 | |
pip freeze | 列出当前环境下开发者使用pip安装的包列表,作用类似于pip list,但是比pip list好用 | |
pip freeze > ./requirements.txt | requirements.txt 不是固定的,但是建议这么命名 | 备份虚拟环境中的所有依赖包列表并保存到执行名称的文件中,这个文件名一般叫做requirements.txt |
pip install -r ./requirements.txt | 还原备份的虚拟环境包列表,pip会逐行读取文件中的每一行内容并根据内容安装对应版本的python包 | |
rmvirtualenv<虚拟环境名称> | 删除指定名称的虚拟环境[慎重使用,删除前建议备份] |
创建Django项目并运行
创建项目
创建虚拟环境djdemo
C:\Users\Abo>mkvirtualenv djdemo
created virtual environment CPython3.9.11.final.0-64 in 701ms
creator CPython3Windows(dest=C:\Users\Abo\Envs\djdemo, clear=False, no_vcs_ignore=False, global=False)
seeder FromAppData(download=False, pip=bundle, setuptools=bundle, wheel=bundle, via=copy, app_data_dir=C:\Users\Abo\Ap
pData\Local\pypa\virtualenv)
added seed packages: pip==22.0.4, setuptools==61.0.0, wheel==0.37.1
activators BashActivator,BatchActivator,FishActivator,NushellActivator,PowerShellActivator,PythonActivator
由上述命令执行结果可以看到虚拟环境创建到了dest=C:\Users\Abo\Envs\djdemo
这个目录下
之后便可以查看当前有多少虚拟环境
(djdemo) C:\Users\Abo>workon
Pass a name to activate one of the following virtualenvs:
==============================================================================
djdemo
在此虚拟环境下安装django:
(djdemo) C:\Users\Abo>pip install django
Collecting django
Downloading Django-4.0.3-py3-none-any.whl (8.0 MB)
---------------------------------------- 8.0/8.0 MB 7.6 MB/s eta 0:00:00
Collecting tzdata
Downloading tzdata-2022.1-py2.py3-none-any.whl (339 kB)
------------------------------------- 339.5/339.5 KB 1.0 MB/s eta 0:00:00
Collecting sqlparse>=0.2.2
Using cached sqlparse-0.4.2-py3-none-any.whl (42 kB)
Collecting asgiref<4,>=3.4.1
Using cached asgiref-3.5.0-py3-none-any.whl (22 kB)
Installing collected packages: tzdata, sqlparse, asgiref, django
可以看到未指定版本时默认下载的就是最新版本的DjangoDownloading Django-4.0.3-py3-none-any.whl (8.0 MB)
,而下载过程中的其他依赖包都是周边依赖,其左右就是服务Django的依赖包
使用pip freeze
或者 pip list
查看当前虚拟环境下的依赖包:
(djdemo) D:\PythonDevelop\WorkSpace>pip freeze
asgiref==3.5.0
Django==4.0.3
sqlparse==0.4.2
tzdata==2022.1
之后便可以在虚拟环境的\Lib\site-packages
目录下看到这个环境下安装的依赖包
之后在虚拟环境中切换目录至创建Django项目的目录下执行创建Django项目的命令django-admin startproject 项目名称
(djdemo) D:\PythonDevelop\WorkSpace>django-admin startproject djdemo
之后就可以在D:\PythonDevelop\WorkSpace
目录下看到刚才创建的Django项目了
结构介绍
使用Pycharm打开刚才创建的Django项目,结构如下:
djdemo
├── djdemo
│ └── _init_.py
│ └── asgi.py
│ └── settings.py
│ └── urls.py
│ └── wsgi.py
├── manage.py
- djdemo:与项目同名的包,主应用开发目录,项目生成时就指定好的包
- init.py:包初始化文件
- asgi.py:django3.0以后新增的,用于让django运行在异步编程模式的一个web应用对象
- settings.py:保存项目所有的配置信息。所有和项目相关的配置都保存在里面。
- urls.py:用来做url与视图函数映射的。以后来了一个请求,就会从这个文件中找到匹配的视图函数。
- wsgi.py:项目和WSIG协议兼容的web服务器入口,部署的时候需要用到的,一般情况下也时不需要修改的。
- manage.py:终端工具文件,以后和项目的交互基本都是基于这个文件(脚手架)。一般都是在终端输入
python manage.py [子命令]
。可以输入python manage.py help
看下能做什么事情。除非你知道你自己在做什么,一般情况下不应该编辑这个文件。
切换虚拟环境
打开终端输入pip freeze
查看当前依赖:
PS D:\PythonDevelop\WorkSpace\djdemo> pip freeze
distlib==0.3.4
filelock==3.6.0
pbr==5.8.1
platformdirs==2.5.1
six==1.16.0
stevedore==3.5.0
virtualenv==20.14.0
virtualenv-clone==0.5.7
virtualenvwrapper==4.8.4
virtualenvwrapper-win==1.2.7
可以看到上述依赖包并不是我们刚才创建的djdemo这个虚拟环境下的依赖包,而是全局依赖包,接下来我们切换虚拟环境
- 打开设置,找到Python 解释器,我们可以看到这里默认选择的Python的解释器是全局解释器
-
点击解释器右侧小齿轮,点击ADD
-
由于使用的虚拟环境是Virtualenvs,所以选择Virtualenv Enviroment,之后选择已经存在的环境(Existing enviroment),然后找到刚才创建的虚拟环境目录下的
\Scripts\python.exe
-
然后点击OK,我们可以看到此时Python解释器已经切换到我们刚才选择的解释器了,解释器后面的括号里写的
djdemo
就是虚拟环境的名称,而这里的依赖包就是我们虚拟环境中的依赖包 -
最后还需要设置下终端方式:
Settings -> Tools -> Terminal
然后将 Shell path 修改成cmd.exe即可,之后再打开终端就能看到自动进入到了虚拟环境djdemo
, 之后项目中对依赖包的操作只会影响到djdemo
这个虚拟环境下的依赖包,而不会影响到全局的python解释器