Django或者Flask创建Python虚拟环境启动第一个Hello

系统 1371 0

前言

刚开始开发Web的时候,没太在意隔离虚拟环境,用了系统的那一套,Python2.7版本是系统自带的,虽说明年就结束了,但是现在开发都会有一套3.x以上的环境,即使你开发不注意,你部署的时候总归是要隔离出来的。
1.方便隔离,不同环境编写测试
2.方便迁移, pip freeze 到出包文件依赖,随后提交管理和迁移都很方便

virtualenv

前提是你有两套Python

            
              mikejingdeMacBook-Pro:~ MKJ$ 
              
                which
              
               python
/usr/bin/python
mikejingdeMacBook-Pro:~ MKJ$ 
              
                which
              
               python3
/usr/local/bin/python3

            
          

Python将所有三方包托管到一个公共仓库,任何人都能从这个公共仓库下载并安装所有的三方包。Python将三方包公共仓库命名为PyPI以表示Python Package Index的缩写(被一些人戏称为"cheese shop")。从PyPI上安装三方包非常简单,Python专门提供了一个名为pip的工具来解决这个问题(Python2.7中不含pip工具,需要单独安装)

            
              mikejingdeMacBook-Pro:~ MKJ$ pip list
-bash: pip: 
              
                command
              
               not found
mikejingdeMacBook-Pro:~ MKJ$ pip3 list
Package    Version
---------- -------
pip        18.1   
setuptools 40.5.0 
wheel      0.32.2 

            
          

可以看到Python2.7不会自带pip,3的话就会自带上面三个包。
为了解决维护不同应用程序对应不同版本的问题,Python使用了虚拟环境的概念。 虚拟环境是Python解释器的完整副本。在虚拟环境中安装三方包时只会作用到虚拟环境,全局Python解释器不受影响。 那么,就为每个应用程序安装各自的虚拟环境吧。


首先我们看下是否在各自环境下有安装 virtualenv

            
              bogon:~ MKJ$ pip list
bogon:~ MKJ$ pip3 list   
Package    Version
---------- -------
pip        18.1   
setuptools 40.5.0 
virtualenv 16.6.1 
wheel      0.32.2 
bogon:~ MKJ$ 

            
          

没有的话

            
              pip 
              
                install
              
               virtualenv

            
          

安装虚拟环境方法一(Django演示 + virtualenv)

1.创建虚拟环境目录

            
              
                mkdir
              
               flask_project

              
                cd
              
               flask_project

            
          

2.到底是副本出Python2还是Python3虚拟环境
你想创建哪套虚拟环境可以根据 -p 指定,首先可以用 which python which python3 拿到执行文件目录

            
              virtualenv venv  
              
                # 该方法默认用系统2.7创建出虚拟环境
              
              
virtualenv -p /usr/local/bin/python3 venv 
              
                # 指定Python3创建出虚拟环境
              
            
          

3.激活/关闭

            
              
                # 激活
              
              
                source
              
               venv/bin/activate  

              
                # 或者  
              
              
                # . venv/bin/activate
              
              
                # 激活后此时你的终端前缀就变化了
              
              
                # deactivate 是关闭环境
              
            
          

4.以Django为例创建一个Hello world
退出后每次进去 venv 文件夹目录,然后 . /venv/bin/activate 后启动虚拟环境,随后安装
pip install django ,以下是虚拟环境下包,和全局的2.7或者3.x的不会有任何交叉,独立的

            
              
                (
              
              venv
              
                )
              
               mikejingdeMacBook-Pro:django-project MKJ$ pip list
Package    Version
---------- -------
Django     2.2.2  
pip        19.1.1 
pytz       2019.1 
setuptools 41.0.1 
sqlparse   0.3.0  
wheel      0.33.4

            
          

这里这是简单的写个Django的Hello World,具体细节和为什么就不在这里说了,以后有空再写博客出来介绍
5.启动项目

            
              django-admin startproject mysite

            
          

6 .创建app

            
              python manage.py startapp blogs

            
          

7 .进入app模块创建 urls.py

            
              
                from
              
               django
              
                .
              
              urls 
              
                import
              
               path

              
                from
              
              
                .
              
              
                import
              
               views

app_name 
              
                =
              
              
                "blogs"
              
              

urlpatterns 
              
                =
              
              
                [
              
              
    path
              
                (
              
              
                ''
              
              
                ,
              
               views
              
                .
              
              index
              
                ,
              
               name
              
                =
              
              
                'index'
              
              
                )
              
              
                ]
              
            
          

8 .编写 views.py

            
              from django.shortcuts 
              
                import
              
               render
from django.http 
              
                import
              
               HttpResponse


              
                # Create your views here.
              
              

def index
              
                (
              
              request
              
                )
              
              :
    
              
                return
              
               HttpResponse
              
                (
              
              
                'Hello World'
              
              
                )
              
            
          

9 .blogs同级目录下的mysite中编写urls路由

            
              from django.contrib 
              
                import
              
               admin
from django.urls 
              
                import
              
               path, include


urlpatterns 
              
                =
              
              
                [
              
              
    path
              
                (
              
              
                'admin/'
              
              , admin.site.urls
              
                )
              
              ,
    path
              
                (
              
              
                'blogs/'
              
              , include
              
                (
              
              
                'blogs.urls'
              
              
                ))
              
              
                ]
              
            
          

10 .回到 manage.py 目录下启动服务

            
              python manage.py runserver

            
          

11.打开 127.0.0.1:8000/blogs
就能看到我们上面写的第一个 Django编写的Hello world

安装虚拟环境二 (Flask演示 + Python3.4以上自带创建环境)

Python版本低于3.4,默认是不支持一下方式创建虚拟环境
1.创建目录

            
              
                mkdir
              
               flask-project

              
                cd
              
               flask-project

            
          

2.安装虚拟环境

            
              python3 -m venv venv

            
          

使用这个命令来让Python运行venv包,它会创建一个名为venv的虚拟环境。 命令中的第一个“venv”是Python虚拟环境包的名称 ,第二个是要用于这个特定环境的虚拟环境名称。 如果你觉得这样很混乱,可以用你自定义的虚拟环境名字替换第二个venv。我习惯在项目目录中创建了名为venv的虚拟环境,所以无论何时cd到一个项目中,都会找到相应的虚拟环境。

3.激活虚拟环境安装Flask

            
              
                .
              
               venv/bin/activate 
              
                # 启动
              
              
pip 
              
                install
              
               flask 
              
                # 安装flask
              
            
          

4.创建Flask应用
应用程序是存在于包中的。 在Python中,包含__init__.py文件的子目录被视为一个可导入的包。 当你导入一个包时, init .py会执行并定义这个包暴露给外界的属性。

            
              
                mkdir
              
               app 
              
                # 创建应用文件夹
              
              
                cd
              
               app

              
                # 创建 __init__.py
              
              
from flask 
              
                import
              
               Flask

app 
              
                =
              
               Flask
              
                (
              
              __name__
              
                )
              
              

from app 
              
                import
              
               routes


              
                # 创建 routes.py
              
              
from app 
              
                import
              
               app

@app.route
              
                (
              
              
                '/'
              
              
                )
              
              
@app.route
              
                (
              
              
                '/index'
              
              
                )
              
              
def index
              
                (
              
              
                )
              
              :
    
              
                return
              
              
                "Hello, World!"
              
            
          

其一,这里有两个实体名为app。 app包由app目录和__init__.py脚本来定义构成,并在from app import routes语句中被引用。 app变量被定义为__init__.py脚本中的Flask类的一个实例,以至于它成为app包的属性。

其二,routes模块是在底部导入的,而不是在脚本的顶部。 最下面的导入是解决循环导入的问题,这是Flask应用程序的常见问题。 你将会看到routes模块需要导入在这个脚本中定义的app变量, 因此将routes的导入放在底部可以避免由于这两个文件之间的相互引用而导致的错误。

那么在routes模块中有些什么? 路由是应用程序实现的不同URL。 在Flask中,应用程序路由的处理逻辑被编写为Python函数,称为视图函数。 视图函数被映射到一个或多个路由URL,以便Flask知道当客户端请求给定的URL时执行什么逻辑。
函数上面的两个奇怪的@app.route行是装饰器, 这是Python语言的一个独特功能。 装饰器会修改跟在其后的函数。 装饰器的常见模式是使用它们将函数注册为某些事件的回调函数。 在这种情况下,@app.route修饰器在作为参数给出的URL和函数之间创建一个关联。 在这个例子中,有两个装饰器,它们将URL /和/index索引关联到这个函数。 这意味着,当Web浏览器请求这两个URL中的任何一个时,Flask将调用该函数并将其返回值作为响应传递回浏览器。这样做是为了在运行这个应用程序的时候会稍微有一点点意义。

5 .创建脚本
回到 flask-project ,创建一个manage.py的文件,加入

            
              
                from
              
               app 
              
                import
              
               app

            
          

Flask应用程序实例被称为app,是app包的成员。from app import app语句从app包导入其成员app变量。

            
              flask-project/
 venv/
 app/
   __init__.py
   routes.py
 manage.py

            
          

6 .设置Flask环境变量

            
              
                export
              
               FLASK_APP
              
                =
              
              manage.py

            
          

7 .启动

            
              
                (
              
              venv
              
                )
              
               mikejingdeMacBook-Pro:flask_project MKJ$ flask run
* 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
              
                )
              
            
          

8 .环境变量设置
上面的环境变量是临时的,你如果喜欢可以每次设置,如果永久的话需要安装如下
从 1.0 版本开始,Flask 允许你设置只会在运行flask命令时自动注册生效的环境变量,要实现这点,你需要安装 python-dotenv:

            
              
                (
              
              venv
              
                )
              
               $ pip 
              
                install
              
               python-dotenv

            
          

此时,在项目的根目录下新建一个名为 .flaskenv 的文件,其内容是:

            
              FLASK_APP
              
                =
              
              manage.py

            
          

Pytharm 自动创建

Pytharm --- Preference --- Project.xxx --- Project Interpreter 就是我们工程虚拟环境的配置项

参考文档
Flask文档


更多文章、技术交流、商务合作、联系博主

微信扫码或搜索:z360901061

微信扫一扫加我为好友

QQ号联系: 360901061

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描下面二维码支持博主2元、5元、10元、20元等您想捐的金额吧,狠狠点击下面给点支持吧,站长非常感激您!手机微信长按不能支付解决办法:请将微信支付二维码保存到相册,切换到微信,然后点击微信右上角扫一扫功能,选择支付二维码完成支付。

【本文对您有帮助就好】

您的支持是博主写作最大的动力,如果您喜欢我的文章,感觉我的文章对您有帮助,请用微信扫描上面二维码支持博主2元、5元、10元、自定义金额等您想捐的金额吧,站长会非常 感谢您的哦!!!

发表我的评论
最新评论 总共0条评论