一:虚拟环境介绍
黄色部分重点注意
虚拟环境与全局环境:
我们通过pip安装了一个python库,可能在编辑器中不能使用(如:pycharm,vscode…)这是因为:
通过pip安装的库默认一般安装在全局环境中,而PyCharm一般会默认创建虚拟环境,所以两者的环境不一致,导致安装的包不能正常导入使用,解决办法有一般有2种:
•给PyCharm安装虚拟环境,使库安装虚拟环境中
•将PyCharm的环境设置为全局环境,即我们通常使用的Python,设置为Python的安装目录即可:
如图下 红框即为全局变量:
安装虚拟环境的原因:
•一般情况下,Python第三方库安装是直接通过pip install xxx的方式进行安装的,这样会使库安装在python全局环境中。
这样做面临的问题:如果用Flask 1.10写了个网站,但是同时有一个Flask 0.9开发的项目需要开发维护,并且有可能Flask 1.10不再兼容Flask 0.9的一些语法,这就需要同时拥有Flask 1.10和Flask 0.9两种不同环境,这时我们就需要通过虚拟环境来解决此类问题。
虚拟环境的安装:
•python中虚拟化管理工具很多,最常用的是pipenv
pipenv的安装:
•Windows下安装:
pip install pipenv
•Mac下安装
brew install pipenv
•Linux下安装
pip install pipenv
虚拟环境创建前的准备:
虚拟环境默认会安装到系统盘(C盘)下的当前用户目录下的== .virtualenvs 目录下,如果想指定安装到其他目录,可以设置系统环境变量==,在系统变量中添加变量,变量名为WORKON_HOME,值为需要指定安装的目录(文件夹)
名字可以自己取 自己可以找到的文件夹
如图所示:
虚拟环境的创建:
•WIN+R 输入cmd进入:
•进入需要创建虚拟环境的文件夹:
•安装pipenv之后即可创建虚拟环境。创建虚拟环境使用命令pipenv shell 如图所示:
•安装完成后使用pip list命令,即可看到此虚拟环境安装的库
•虚拟环境安装好之后,可在PyCharm中设置虚拟环境为当前创建的虚拟环境,即定位选择虚拟环境下的python.exe可执行文件,方法与前面相同。
pipfile与pipfile.lock
•在创建虚拟环境后,虚拟环境目录下会生成pipfile文件,内容如下:
[[source]]
name = "pypi"
url = "https://pypi.org/simple" # 在默认情况使用国外源下载库会非常慢,可以指定国内pip源,
verify_ssl = true
[dev-packages] # 开发环境
[packages] # 生产环境
[requires] # Python版本
python_version = "3.7"
•pipfile.lock详细记录环境依赖,并且使用了Hash算法以保证完整的对应关系。
•如果需要将安装的库记录到Pipfile中,可以使用pip install --dev 库名将库安装到开发环境。
•在虚拟环境中用run参数运行项目示例如下:
pipenv run python manage.py runserver
•pipenv有一个缺点:
•lock不稳定而且时间非常长,所以安装包的时候记得加上==–skip-lock==,如下:
pipenv install django --skip-lock
•最后开发完成要提交到仓库的时候再执行pipenv lock命令。
Flask的介绍
flask是一款非常流行的Python Web框架,诞生于2010年,作者是Armin Ronacher,这个项目最初只是作者在愚人节的一个玩笑,后来由于非常受欢迎,逐渐成为一个正式的项目。
flask自2010年发布第一个版本以来,大受欢迎,深得开发者的喜爱,并且在多个公司已经得到了应用,flask能如此流行的原因,可以分为以下几点:
•微框架、简洁,只做它需要做的,灵活度非常高,给开发者提供了很大的扩展性。
•Flask不会帮开发者做太多的决策,一切都可以按照自己的意愿进行更改。
•使用Flask开发数据库的时候,具体是使用SQLAlchemy还是MongoEngine,选择权完全掌握在开发者自己的手中。区别于Django,Django内置了非常完善和丰富的功能,并且如果想替换成开发者想要的,要么不支持,要么非常麻烦。
•把默认的Jinija2模板引擎替换成其他模板引擎都是非常容易的。
•Flask和相应的插件写得很好。
•开发效率非常高,比如使用SQLAlchemy的ORM操作数据库可以节省开发者书写大量sql的时间。
我爱Flask的第一个程序:
# 从flask框架中导入Flask类
from flask import Flask
# 传入__name__初始化一个Flask实例
app = Flask(__name__)
# 装饰器,将当前路由映射到指定函数
@app.route('/')
def hello_world():
return 'Hello World'
if __name__ == '__main__':
app.run()
•输出结果:
* Serving Flask app "first" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
•1. 此时只需点击图中蓝色网址即可看到输出‘Hello World’
•2. 也可在在浏览器中打开http://127.0.0.1:5000/
•当再次返回pycharm时,可以在开启的服务状态栏下看到请求的记录,如:
127.0.0.1 - - [13/Oct/2020 19:19:45] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [13/Oct/2020 19:19:45] "GET /favicon.ico HTTP/1.1" 404 -
•注意说明
•@app.route(’/’) :装饰器映射URL和执行的函数。这个设置将URL映射到指定的函数上,例中指定当前路由为根目录,如果为根目录时也可以不写 /,但是尽量写上以示区别。
•app.run():是让flask项目运行起来,可以指定主机号和端口号。
默认的host是127.0.0.1,port为5000,host=0.0.0.0可以让其他电脑也能访问到该网站,port可以指定访问的端口。