• Linux下安装virtualenv与virtualenvwrapper


    一、Linux下安装、配置virtualenv

    在使用 Python 开发的过程中,工程一多,难免会碰到不同的工程依赖不同版本的库的问题;
    亦或者是在开发过程中不想让物理环境里充斥各种各样的库,引发未来的依赖灾难。
    此时,我们需要对于不同的工程使用不同的虚拟环境来保持开发环境以及宿主环境的清洁。
    这里,就要隆重介绍 virtualenv,一个可以帮助我们管理不同 Python 环境的绝好工具。
    virtualenv 可以在系统中建立多个不同并且相互不干扰的虚拟环境。

    #指定清华源下载pip的包
    pip3 install -i https://pypi.tuna.tsinghua.edu.cn/simple virtualenv
    #升级pip工具
    pip3 install --upgrade pip
    1.安装virtualenv
    pip3 install virtualenv 

    2.创建目录 mkdir Myproject cd Myproject 3.创建独立运行环境-命名 virtualenv --no-site-packages --python=python3 venv#得到独立第三方包的环境,并且指定解释器是python3 4.进入虚拟环境 source venv/bin/activate#此时进入虚拟环境(venv)Myproject 5.安装第三方包 (venv)Myproject: pip3 install django==1.9.8 #此时pip的包都会安装到venv环境下,venv是针对Myproject创建的 6.退出venv环境 deactivate命令 7. virtualenv是如何创建“独立”的Python运行环境的呢?原理很简单,就是把系统Python复制一份到virtualenv的环境,用命令source venv/bin/activate进入一个virtualenv环境时,virtualenv会修改相关环境变量,让命令python和pip均指向当前的virtualenv环境。

    二、确保开发环境的一致性

    1.假设我们在本地开发环境,准备好了项目+依赖包环境
    2.现在需要将项目上传至服务器,上线发布
    3.那么就要保证服务器的python环境一致性
    解决方案:
    1.通过命令保证环境的一致性,导出当前python环境的包
    pip3 freeze > requirements.txt   
    
    这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。
    可以使用 “pip list”在不产生requirements文件的情况下, 查看已安装包的列表。
    2.上传至服务器后,在服务器下创建virtualenv,在venv中导入项目所需的模块依赖 pip3 install -r requirements.txt

    三、虚拟环境之virtualenvwrapper

    virtualenv 的一个最大的缺点就是: 每次开启虚拟环境之前要去虚拟环境所在目录下的 bin 目录下 source 一下 activate,这就需要我们记住每个虚拟环境所在的目录。 并且还有可能你忘记了虚拟环境放在哪。。。

    • 一种可行的解决方案是,将所有的虚拟环境目录全都集中起来,例如/opt/all_venv/,并且针对不同的目录做不同的事。
    • 使用virtualenvwrapper管理你的虚拟环境(virtualenv),其实他就是统一管理虚拟环境的目录,并且省去了source的步骤。

    步骤1:安装virtualenvwrapper

    pip3 install virtualenvwrapper

    步骤2:设置Linux的环境变量,每次启动就加载virtualenvwrapper

    把下面两行代码添加到 ~/.bashrc文件中
    打开文件
    vim ~/.bashrc
    写入以下几行代码
    export WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录
    export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
    export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3     #指定python解释器
    source /opt/python36/bin/virtualenvwrapper.sh #执行virtualenvwrapper安装脚本
    读取文件,使得生效,此时已经可以使用virtalenvwrapper
    source ~/.bashrc

    步骤3:基本使用virtualenvwrapper

    创建一个虚拟环境:
    $ mkvirtualenv my_django115
    这会在 ~/Envs 中创建 my_django115 文件夹。
    
    在虚拟环境上工作:激活虚拟环境my_django115
    $ workon my_django115
    
    
    再创建一个新的虚拟环境
    $ mkvirtualenv my_django2
    
    virtualenvwrapper 提供环境名字的tab补全功能。
    当有很多环境, 并且很难记住它们的名字时,这就显得很有用。
    
    workon还可以任意停止你当前的环境,可以在多个虚拟环境中来回切换
    workon django1.15
    
    workon django2.0
    
    也可以手动停止虚拟环境
    deactivate
    
    删除虚拟环境,需要先退出虚拟环境
    rmvirtualenv my_django115

    步骤四:常用其他命令

    lsvirtualenv
    列举所有的环境。
    cdvirtualenv
    导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages 。
    cdsitepackages
    和上面的类似,但是是直接进入到 site-packages 目录中。
    lssitepackages
    显示 site-packages 目录中的内容。

    完整官网介绍:https://virtualenvwrapper.readthedocs.io/en/latest/command_ref.html

    
    
    学习运维架构技术乃王道
    1.Nginx高可用负载均衡/缓存、限流/提升集群处理并发能力
    2.mysql主从复制,读写分离
    3.redis缓存加速与主从复制,哨兵,集群
    4.异步消息/服务解耦之rabbitMQ消息队列
    5.代码层优化/改进算法/多线程与内存优化
    6.使用golang,Erlang等csp并发编程语言
    7.docker容器时代
    
    
    服务器介绍:
    1.路飞的7台阿里云,腾讯云,亚马逊云,华为云
        数据都放在其他人的电脑上,安全性由别人掌控
    
    2.公司有钱,有26台Dell实体服务器,vmware  esxi虚拟化的300+Linux
        公司有钱,自建机房(盖了一个厂房,里面专业托管服务器)
        有专业的公司,建造机房(世纪互联)
        机房都是有严格的标准,保护机器不断电,不损坏
        1.无静电
        2.无尘
        3.无湿度
        4.低温
    
    Linux发行部:
    Linux是一个名词,是系统的代表
    1.红帽子公司  redhat Linux 收费
        -2045之前,外企
        -红帽Linux 资格认证证书
        rhcsa 红帽系统管理员
        rhce 红帽工程师
        rhca 红帽构架师
    2.centos 免费版,社区版 centos7
    3.Ubuntu 乌班图系统
    4.suse 德国    Linux 收费
    
    
    保证开发环境的一致性
    1.手动解决
    2.自动化解决
    3.通过docker镜像
    4.通过vmware系统模板镜像
    
    
    Linux网络连接方式
    桥接:
    在一个局域网内,添加了一个新的机器
    
    vmware就像是虚拟化的一个机房的服务器
    
    远程连接
    1.使用ssh命令
    2.获取服务器的ip地址
    3.window的xshell中输入:ssh root@192.168.0.101 远程连接Linux机器
    
    Linux重要的目录
    bin目录 有关bin的文件夹都是存放可执行文件的
    etc目录存放配置文件的  /etc/my.conf   /etc/nginx.conf   /etc/redis.conf
        配置文件就是定制一堆参数,自己控制的参数
    opt目录 存放第三方软件的安装路径的   /opt/redis   /opt/nginx   /opt/python36
    root目录 存放超级用户的家目录
    var目录 存放系统日志相关
    
    Linux目录结构的操作
    cd - 上一次的工作目录
    cd ~ 当前登录用户的家目录
    cd . 当前目录
    cd .. 上一级目录
    
    绝对路径:一切从根目录开始,就是一个绝对路径
    相对路径:以当前位置为相对,找到路径
    
    PATH变量是用于,当用户直接输入命令的时候,去查找的一个路径寻找点
    当我们输入ls的时候,Linux回去PATH中寻找,哪里有ls
    
    
    Linux命令学习:
    ssh root@192.168.0.101
    1.查看ip地址
    ip a
    ifconfig
    2.linux目录分割是正斜杠/
    3.w 那些用户在登录
    4.whoami 我是谁
    5.pwd 我在哪
    6.更改目录
    cd /
    7.用于输出文件夹的内容
    ls 
    ll
    ls -a 查看隐藏文件
    ls -la
    ls -lh 带文件大小
    8.linux文件的颜色
    浅蓝是软链接目录
    蓝色是文件夹
    白色是普通文件
    绿色是可执行文件
    9.创建目录
    mkdir
    mkdir -p ./a/b/c/d
    mkdir -p ./bubu/{linux,python}
    10.创建文件
    touch
    11.vi/vim写入内容
        a.此时进入了命令模式,输入键盘的i,进入编辑模式
        b.编辑模式下可以写入代码
        c.退出编辑模式按下Esc,此时就进入了底线命令模式
        d.输入:wq!
            :进入底线模式
            w 写入
            q 退出
            !强制的
        底线命令模式 :set nu 显示行号    
    12.cat查看写入cat >>ceshi.txt <<EOF
    [root@localhost /tmp/bubu 00:19:28]#cat >>ceshi.txt <<EOF
    > ceshi
    > 123
    > EOF
    [root@localhost /tmp/bubu 00:20:02]#cat ceshi.txt
    ceshi
    [root@localhost /tmp/bubu 00:20:09]#
    
    cat /etc/passwd > ./passwd.txt 将/etc/passwd的内容写入到当前passwd.txt文件中
    
    13.创建新用户
    useradd bubu
    passwd bubu
    14.切换用户
    su bubu
    15.删除
    rmdir 删除空文件夹
    rm -rf * == rm -rf ./*  强制删除当前目录的所有内容
    rm -rf /*  删除根(作死)
        -f递归删除文件夹
        -r强制性删除
        -i提示性操作,是否删除
    
    16.ctrl+c 中断当前操作
    17.which ls 
    18.echo $PATH
    19.hostname 查看主机名
    20.hostnamectl set-hostname localhost
    21.logout 退出重新登录查看
    22.Linux命令提示符
    [root@localhost ~]#
    23.修改命令提示符
    PS1变量控制
    
    [root@localhost ~]# echo $PS1
    [u@h W]$
    
    修改命令提示符:
    PS1='[u@h w 	]$'
    
    
    24.软件时间date,硬件时间hwclock
    ntpdate -u ntp.aliyun.com
    25.clear
    26.history
    
    27.yum install tree -y 安装树状图命令
    28.tree mysite/
    29.echo 写入文件内容
    echo 'hello' > ./test.txt
    > 重定向覆盖写入符
    >> 追加
    
    30.拷贝 cp 目标文件 拷贝后的文件
    cp my.py my.py.bak 
    
    31.重命名命令,以及移动命令
    mv 旧文件名 新文件名
    mv 目标文件 移动后的路径
    mv ../tmp/ceshi/txt ./
    
    32.find 查找文件
    find / -name test.txt  从根目录开始找,一个叫做test.txt的文件
    find /opt -name '*.py'  从/opt目录下查找所有的.py文件
    linux 管道符“|” 语法就是将第一条命令的结果传给第二条
    
    33.过滤出python有关的进程
    ps -ef | grep python
    34.过滤出22端口的信息
    netstat -tunlp| grep 22
    
    35.过滤命令grep
    grep nobody ./passwd.txt  从当前的passwd.txt文件中过滤出nobody的信息
    grep all settings.py  过滤出django中settings.py 中allow_hosts的信息
    grep all settings.py -n 过滤出allow_hosts的信息且输出行号
    grep -v all settings.py  过滤出除allow_hosts之外的信息
    grep -v all settings.py -n  过滤出除allow_hosts之外的信息且输出行号
    cat settings.py | grep allow
    
    36.head 
    head -5 test.txt 
    37.tail
    tail -5 test.txt
    tail -f test.txt 实时监控
    
    37.alias别名
    alias rm="rm -i"
    alias rm="echo 求求你了,你可别坑我了!!!"
    
    38.unalias rm 取消别名
    
    39.远程传输文件,在两台Linux上
    scp  想要操作的文件地址  存放的目标文件地址
    scp  test.txt root@192.168.0.109:/tmp/
    scp -r a root@192.168.0.109:/tmp/     -r递归传输文件夹
    
    40.查看文件夹大小
    方式1:ls -lh
    方式2:du -h
    du -sh /var/log/
        -s 合计文件夹大小
        -h 显示友好的单位换算
    
    41.top命令(任务管理器)用于动态地监视进程活动和系统负载等信息 q退出
    42.wget 下载
    wget -r -p http://www.luffycity.com
    43.Linux和window互相传递文件
        1.lrzsz
            sz test.txt(下载 从Linux传给window)
            rz test.txt(上传)
        2.xftp
        
    44.reboot 重启
    45.poweroff 关闭系统
    46.free -m 查看内存
    47.man grep 查看grep的帮助手册
    48.防火墙
    iptables -L #查看规则
    iptables -F #清空防火墙规则
    永久关闭防火墙,可能防火墙会阻挡你的Linux环境配置实验,为了方便,关闭它。
    systemctl stop firewalld  #关闭防火墙服务
    systemctl disable firewalld #永久关闭,开机自启
    
    49.tar -xf Python-3.6.2.tgz 解压
    50.logout 退出账号
    
    
    #######################################################################
    用户权限相关
    [root@localhost ~]# id       #返回用户的身份信息,当uid为0的时候,这个用户就是超级用户 
    uid=0(root) gid=0(root) groups=0(root) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
    [root@localhost ~]# id root
    uid=0(root) gid=0(root) groups=0(root)
    
    用户的存放文件:
    /etc/passwd
    /etc/shadow  存放用户密码的文件
    
    用户的管理命令:
    添加普通用户(只有root用户有这个权利)
    [root@localhost ~]# useradd tom     #创建用户,这个用户的信息会存放到/etc/passwd
    [root@localhost ~]# grep tom /etc/passwd  #查看用户信息,普通用户的id默认是从1000开始的
    tom:x:1001:1001::/home/tom:/bin/bash
    [root@localhost ~]# 
    
    修改普通用户的密码
    passwd 用户名
    
    切换用户(必须加上中横线- 代表完全用户切换)
    [root@localhost ~]# su - tom   
    [tom@localhost root]$ 
    
    添加用户组
    groupadd it_dep
    
    删除用户
    userdel -rf tom
    -f     强制删除用户
    -r    同事删除用户以及家目录
    
    sudo命令用来以其他身份来执行命令,预设的身份为root
    1.编辑sudoers配置文件,添加tom用户信息  
    vim /etc/sudoers    (/查找root   n查找下一个)
    2.定位权限设置到
    root    ALL=(ALL)       ALL
    添加
    root    ALL=(ALL)       ALL
    tom     ALL=(ALL)       ALL
    3.使用sudo命令,去执行Linux命令,解决权限不足
    [tom@localhost ~]$ ls /root
    ls: cannot open directory /root: Permission denied
    [tom@localhost ~]$ sudo ls /root
    [sudo] password for tom: 
    anaconda-ks.cfg
    4.sudo还提供了一个语法检测的命令 visudo
     
    
    文件权限:
    读取(vim)  查看(cat)   执行(xx.py   xx.sh)
    通过解释器执行  ./xx.sh    或者  source  xx.sh    或者   . xx.sh  
    文件夹的权限:
    新增  修改  删除   进入目录
    
    Linux软链接创建注意用绝对路径
    ln -s 目标文件绝对路径  软链接绝对路径
    
    
    
    tar命令,参数
    -x 解压
    -v 显示压缩解压过程
    -f 指定压缩文件
    -z 指定调用gzip命令
    -c 压缩当前目录的所有内容:
    -r 添加文件到已有的压缩文件中
    tar -rf alltmp.tgz 新加的文件名
    
    压缩当前目录的所有内容:
    tar -cf alltmp.tgz ./*
    tar -cf alltmp.tgz *
    tar -cf alltmp.tar *
    
    tar -zcf alltmp.tar.gz *
    
    
    解压到当前目录
    tar -xf alltmp.tgz 
    
    查看命令帮助:
    tar --help
    man tar
    linum 中文手册
    
    
    进程查看
    ps -ef 查看所有进程的状态
    ps -ef | grep python
    
    网络端口管理命令
    netstat -tunlp | grep 8000
    
    kill命令 杀死进程
    kill pid    (pid通过ps -ef 查看)
    
    一次性杀死多个匹配的进程,一个是pkill,一个是killall, 
    如果没有killall就安装一下 yum install psmisc -y
    killall python
    
    查看磁盘空间
    df -h
    
    Linux的dns服务相关
    1.dns服务指定配置文件,这个文件,告诉Linux去那解析dns域名,
    有主备两个dns服务器ip地址
    [root@localhost ~]# cat /etc/resolv.conf
    # Generated by NetworkManager
    domain www.tendawifi.com
    search www.tendawifi.com
    nameserver 192.168.0.1
    [root@localhost ~]# 
    
    2.Linux解析dns的命令
    nslookup www.baidu.com #解析到这个域名对应的ip地址
    
    3.Linux强制dns,或者本地dns域名解析
    vim /etc/hosts
    ip 自定义的域名
    
    4.域名解析的流程,(一个域名从浏览器访问,解析过程是如何的)
        1.浏览器输入域名,浏览器首先会去当前机器的本地dns缓存中查找记录
        2.去hosts文件中查找是否写死了对应的记录
        3.去指定的dns服务器中寻找dns记录,如果找到了域名解析记录后
        4.将这个dns记录缓存到本机的缓存记录中
        5.下一次寻找域名,就去缓存中找
    
    Linux的计划任务,也叫做定时任务,名字是crond
    1.查看Linux本机的定时任务
    crontab -l  #查看计划任务
    2.编写自己的计划任务
    crontab -e #编辑计划任务
    分时日月周  命令绝对路径
    * * * * * /user/bin/echo "666" >> /tmp/ceshi.txt
    
    Linux系统服务管理命令
    系统服务(Linux安装的软件名)
    只有通过yum安装的软件才可以使用这个命令
    systemctl 这是centos7系列的命令
    service 这是centos6系统的服务管理命令
    
    查看网络状态
    systemctl status network
    
    查看发行版
    cat /etc/os-release 
    Linux常用命令
    pip3是管理python模块的工具,自动解决模块依赖
    pip3 list
    pip3 install flask 默认是去python官方下载,网速很慢
    更改pip下载的源,加速下载,使用离咱们近的豆瓣源,163源或者清华源
    pip3 install -i https://pypi.douban.com/simple flask
    
    
    Linux安装软件包
    rpm手动安装
    yum工具自动化安装    效果等同于 pip3
    
    1.理解yum源(阿里云的yum源  epel额外仓库)
    yum源仓库的位置:cd /etc/yum.repos.d/,并且只能读出第一层的repo文件
    yum仓库的文件都是以.repo结尾的
    
    2.下载阿里云的.repo仓库文件,放到/etc/yum.repos.d/
        第一步:备份原本的仓库文件
        cd /etc/yum.repos.d/
        mkdir allbak
        mv * allbak
        
        1.下载第一个阿里云仓库文件
        wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
             -O 参数,指定一个下载地址,且改名
        2.配置第二个仓库文件 epel 额外仓库(redis,nginx,mongo,ipython)
        wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
        
        3.清空原本yum缓存
        yum clean all
        4.生成新的阿里云的yum缓存,加速下载预热数据(此步骤非必须)
        yum makecache
    
    
    代码:    
    1.cd /etc/yum.repos.d/
    2.mkdir allbak
    3.mv * allbak
    4.wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
    5.wget -O /etc/yum.repos.d/epel.repo http://mirrors.aliyun.com/repo/epel-7.repo
    6.yum clean all
    7.yum makecache
    
    
    yum安装nginx:
    1.yum install nginx -y
    2.systemctl start/restart/stop nginx
    3.netstat -tunlp | grep 80 查看端口,过滤80端口的信息
    4.iptables -F (清空防火墙规则) 
    5.客户端:192.168.0.101:80 访问
    
    /usr/share/nginx/html/index.html
    yum remove nginx
    配置yum源安装软件
    编译安装python3
    1.切换opt目录(这是一个约定)
    cd /opt 
    2.下载python3的源代码
    wget https://www.python.org/ftp/python/3.6.2/Python-3.6.2.tgz
    3.安装python前的库环境,非常重要
    yum install gcc patch libffi-devel python-devel  zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel db4-devel libpcap-devel xz-devel -y
    
    4.解压缩python3的源代码压缩文件
    cd /opt/ 进入存在这个文件的目录
    tar -xf Python-3.6.2.tgz 解压
    5.cd Python-3.6.2/  进入源代码目录下,准备开始编译安装 
    6.编译安装三部曲
    第一曲:
    cd Python-3.6.2/
    #configure 这个脚本文件,只是为了释放makefile,用于指定python3安装到哪里
    ./configure    --prefix=/opt/python36  --with-ssl
            --prefix 这个参数用于指定python安装的路径
    第二曲:
    执行make开始编译python3.6的源代码
    make
    
    第三曲:
    make install  生成/opt/python36
    
    (第二曲和第三曲可以写成    make && make install)
    
    7.配置环境变量
    echo $PATH             #$PATH是有优先级顺序的
    将/opt/python36/bin/放入环境变量,注意要添加到path的最前面
    #变量的赋值只是临时有效
    PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"
    #将这个参数,写入到Linux的全局变量配置文件中
    vim /etc/profile     #打开这个全局变量文件,写入PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin"到文件最后
    
    8.退出(logout),重新加载全局变量.
    9.which python3 确认是否正确安装
    10.不要将系统默认的python 改成python3  这是一个大坑。
    (因为Linux有很多工具,默认是用的python2,例如yum)
    
    
    11.在Linux下安装django程序
    pip3 install -i https://pypi.douban.com/simple django==1.11.16
    pip3 install django==1.11.16
    pip3 list
    
    12.使用django命令创建项目
    [root@localhost ~]# cd /opt
    [root@localhost opt]# django-admin startproject mysite
    
    13.修改mysite的settings.py中的ALLOWED_HOSTS
    vim /opt/mysite/mysite/settings.py     #/查找
    ALLOWED_HOSTS = ["*"]
    
    14.启动项目
    [root@localhost opt]# cd mysite/
    [root@localhost mysite]# python3 manage.py runserver 0.0.0.0:9999
    
    补充:
    python3的管理工具是pip3 install flask
    python2的是easy_install flask
    
    
    [root@localhost ~]# python -V
    Python 2.7.5
    [root@localhost ~]# python --version
    Python 2.7.5
    [root@localhost ~]# python3 --version
    Python 3.6.2
    [root@localhost ~]# pip3 list
    DEPRECATION: The default format will switch to columns in the future. You can use --format=(legacy|columns) (or define a format=(legacy|columns) in your pip.conf under the [list] section) to disable this warning.
    Django (1.11.16)
    pip (9.0.1)
    pytz (2019.2)
    setuptools (28.8.0)
    You are using pip version 9.0.1, however version 19.2.3 is available.
    You should consider upgrading via the 'pip install --upgrade pip' command.
    [root@localhost ~]# 
    编译安装python3
    virtualenv 是python解释器的分身
    它是基于物理解释器,进行一个解释器分身,这个分身,可以用于运行各种python开发环境,
    并且创建简单,删除销毁也简单,解决环境依赖灾难。
    1.安装虚拟环境
    pip3 install -i https://pypi.douban.com/simple virtualenv
    2.通过virtualenv创建虚拟环境
    mkdir /opt/allenv   #建立统一管理目录
    cd /opt/allenv  #进入统一管理目录
    virtualenv --no-site-packages --python=python3  venv1 #建立虚拟环境venv1
    --no-site-packages 创建一个干净隔离的python环境
    --python=python3 基于python3创建虚拟环境
    venv1 虚拟环境文件夹的名字,自己定义
    3.激活虚拟环境
    cd /opt/allenv
    通过source命令,读取激活脚本,激活虚拟环境
    source /opt/allenv/venv1/bin/activate
    4.激活虚拟环境后,检查以下几个步骤,是否正确激活
    which pip3
    which python3
    5.检查虚拟环境是否干净隔离
    pip3 list
    6.退出虚拟环境的命令
    deactivate
    
    
    
    [root@localhost ~]# pip3 install -i https://pypi.douban.com/simple virtualenv
    [root@localhost ~]# cd /opt
    [root@localhost opt]# mkdir allenv
    [root@localhost opt]# cd allenv
    [root@localhost allenv]# virtualenv --no-site-packages --python=python3  venv1
    Running virtualenv with interpreter /opt/python36/bin/python3
    Already using interpreter /opt/python36/bin/python3
    Using base prefix '/opt/python36'
    New python executable in /opt/allenv/venv1/bin/python3  # 这个就是虚拟环境venv1的python3解释器
    Also creating executable in /opt/allenv/venv1/bin/python
    Installing setuptools, pip, wheel...
    done.
    [root@localhost allenv]# 
    [root@localhost allenv]# ls
    venv1
    [root@localhost allenv]# cd venv1
    [root@localhost venv1]# ls
    bin  include  lib
    [root@localhost venv1]# cd bin
    [root@localhost bin]# ls
    activate      activate.fish  activate_this.py  easy_install      pip   pip3.6  python3    python-config
    activate.csh  activate.ps1   activate.xsh      easy_install-3.6  pip3  python  python3.6  wheel
    [root@localhost bin]# source activate
    (venv1) [root@localhost bin]# 
    (venv1) [root@localhost bin]# which pip3
    /opt/allenv/venv1/bin/pip3
    (venv1) [root@localhost bin]# 
    (venv1) [root@localhost bin]# pip3 list
    Package    Version
    ---------- -------
    pip        19.2.3 
    setuptools 41.2.0 
    wheel      0.33.6 
    (venv1) [root@localhost bin]# which python3
    /opt/allenv/venv1/bin/python3
    (venv1) [root@localhost bin]# 
    (venv1) [root@localhost bin]# echo $PATH
    /opt/allenv/venv1/bin:/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/root/bin
    (venv1) [root@localhost bin]# pip3 install -i https://pypi.douban.com/simple django==2.0
    
    
    确保开发环境的一致性:
    
    解决方案:
    1.通过命令保证环境的一致性,导出当前python环境的包
    pip3 freeze > requirements.txt   
    
    这将会创建一个 requirements.txt 文件,其中包含了当前环境中所有包及 各自的版本的简单列表。
    可以使用 “pip list”在不产生requirements文件的情况下, 查看已安装包的列表。
    
    2.上传至服务器后,在服务器下创建virtualenv,在venv中导入项目所需的模块依赖
    pip3 install -r requirements.txt
    virtualenv
    虚拟环境之virtualenvwrapper:
    1.因为virtualenv工具使用并不方便
    2.安装virtualenvwrapper
    pip3 install virtualenvwrapper
    3.设置Linux的环境变量,每次启动就加载virtualenvwrapper
        1.打开文件
        vim ~/.bashrc  (这个文件是用户个人配置文件)
        2.写入以下几行代码 (export和source一样都是读取Linux shell 变量的命令)
        export WORKON_HOME=~/Envs   #设置virtualenv的统一管理目录
        export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'   #添加virtualenvwrapper的参数,生成干净隔绝的环境
        export VIRTUALENVWRAPPER_PYTHON=/opt/python36/bin/python3     #指定python解释器
        source /opt/python36/bin/virtualenvwrapper.sh #这一步才是真正使用工具的步骤,执行virtualenvwrapper安装脚本
        3.退出当前会话,重新登录Linux
        logout
        4.重新登录,查看是否可以使用virtalenvwrapper
        5.确保可以使用后,学习这个工具的命令
            1.创建新的虚拟环境 
            mkvirtualenv django201
            mkvirtualenv django115
            2.切换不同的虚拟环境
            workon django201
            workon django115
            3.退出虚拟环境
            deactivate
            4.删除虚拟环境
            rmvirtualenv django116
            5.进入虚拟环境的家目录(直接进入到 site-packages 目录中)
            cdsitepackages
            6.列举所有的环境。
            lsvirtualenv
            7.显示 site-packages 目录中的内容。
            lssitepackages
    virtualenvwrapper
    运行crm
    1.准备代码
    2.上传代码到Linux中
        方式1:lrzsz(只能传单个的文件,必须是压缩包)
            yum install lrzsz -y # 安装传输工具
            sz test.txt(下载 从Linux传给window)
            rz test.txt(上传)
        方式2:xftp
    3.解压
    unzip crm.zip
    4.用之前建好的虚拟环境去运行 :
    workon django201        
    5.启动
    python3 /opt/crm/manage.py runserver 0.0.0.0:9000
    
    
    
    上面第四步也可以新建虚拟环境去运行 :
    1.mkvirtualenv myblog
    2.解决环境依赖,少什么装什么
      pip3 install -i https://pypi.douban.com/simple django==2.0
      pip3 install -i https://pypi.douban.com/simple pymysql
      pip3 install -i https://pypi.douban.com/simple django-multiselectfield   [multiselectfield模块]
    3.安装Linux的mysql数据库
    在centos7中,mysql叫mariadb  安装mariadb的服务端和客户端
    yum install mariadb-server  mysql -y 
    4.启动mariadb数据库
    [root@localhost ~]# systemctl start mariadb
    5.检查数据库是否正常(下面几种方式都可以)
    ps -ef|grep mariadb
    netstat -tunlp |grep 3306
    systemctl status mariadb
    6.看settings的配置,DATABASES,ALLOWED_HOSTS
    7.建数据库,导入数据
    [root@localhost ~]# systemctl start mariadb
    [root@localhost ~]# mysql -uroot -p
    MariaDB [(none)]> create database myblog;
    MariaDB [(none)]> use myblog;
    MariaDB [myblog]> source /opt/myblog.sql;
    MariaDB [myblog]> show databases;
    
    8.运行
    python3 /opt/myblog/manage.py runserver 0.0.0.0:9000
    运行crm
    运行路飞学城
    1.下载代码
    路飞学城django代码
    wget https://files.cnblogs.com/files/pyyu/luffy_boy.zip
    vue代码
    wget https://files.cnblogs.com/files/pyyu/07-luffy_project_01.zip
    2.解压
    unzip 07-luffy_project_01.zip  
    unzip luffy_boy.zip
    3.先从后端代码开始,进入后端代码文件夹
    4.新建虚拟环境
    mkvirtualenv luffy
    5.解决所需的依赖模块,准备一个模块版本文件:requirements.txt 这个文件可以手动创建写入如下依赖
    (luffy) [root@localhost opt]# cd /opt/luffy/luffy_boy
    (luffy) [root@localhost luffy_boy]# touch requirements.txt
    (luffy) [root@localhost luffy_boy]# vim requirements.txt 
    ##############################
    certifi==2018.11.29
    chardet==3.0.4
    crypto==1.4.1
    Django==2.1.4
    django-redis==4.10.0
    django-rest-framework==0.1.0
    djangorestframework==3.9.0
    idna==2.8
    Naked==0.1.31
    pycrypto==2.6.1
    pytz==2018.7
    PyYAML==3.13
    redis==3.0.1
    requests==2.21.0
    shellescape==3.4.1
    urllib3==1.24.1
    uWSGI==2.0.17.1
    ##############################
    (luffy) [root@localhost luffy_boy]# ls
    api  db.sqlite3  keys  luffy_boy  manage.py  requirements.txt  static  templates
    6.安装所需的依赖模块
    (luffy) [root@localhost luffy_boy]# pip3 install -i https://pypi.douban.com/simple -r requirements.txt 
    7.看一看
    pip3 list
    8.运行
    python3 manage.py runserver 0.0.0.0:8000  (注意端口得是8000,因为前端的vue发的就是8000)
    
    
    9.新开一个终端开始前端(要在服务器上,编译打包vue项目,必须得有node环境)
    1.准备node环境
    下载node二进制包,此包已经包含node,不需要再编译
    [root@localhost ~]# cd /opt
    [root@localhost opt]# wget https://nodejs.org/download/release/v8.6.0/node-v8.6.0-linux-x64.tar.gz
    2.解压缩
    [root@localhost opt]# tar -zxvf node-v8.6.0-linux-x64.tar.gz
    3.进入node文件夹
    [root@localhost opt]# cd node-v8.6.0-linux-x64/
    [root@localhost node-v8.6.0-linux-x64]# ls
    bin  CHANGELOG.md  etc  include  lib  LICENSE  README.md  share
    [root@localhost node-v8.6.0-linux-x64]# cd bin
    [root@localhost bin]# ls
    node  npm  npx
    [root@localhost bin]# pwd
    
    /opt/node-v8.6.0-linux-x64/bin
    4.配置环境变量
    [root@localhost bin]# vim /etc/profile
    PATH="/opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/node-v8.6.0-linux-x64/bin"
    5.读取全局配置文件,加载node的环境变量
    [root@localhost bin]# source /etc/profile   #就不需要退出重新加载了
    [root@localhost bin]# echo $PATH
    /opt/python36/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/opt/node-v8.6.0-linux-x64/bin
    [root@localhost bin]# which node
    /opt/node-v8.6.0-linux-x64/bin/node
    6.检测node环境
    [root@localhost bin]# node -v
    v8.6.0
    [root@localhost bin]# npm -v
    5.3.0
    [root@localhost bin]# 
    【注意】进入vue代码包中,开始进行打包,注意修改vue的api请求接口地址!!
    【注意】进入vue代码包中,开始进行打包,注意修改vue的api请求接口地址!!
    【注意】进入vue代码包中,开始进行打包,注意修改vue的api请求接口地址!!
    7.修改src/restful/api.js中Axios的请求地址 ##里面的127.0.0.1都换成你后端服务器的id地址 192.168.0.101
    [root@localhost ~]# sed -i "s/127.0.0.1/192.168.0.101/g" /opt/luffy/07-luffy_project_01/src/restful/api.js  ##全局替换命令
    8.进入vue目录(安装vue模块,默认去装package.json的模块内容,如果出现模块安装失败,手动再装)
    [root@localhost bin]# cd /opt/luffy/07-luffy_project_01/
    [root@localhost 07-luffy_project_01]# ls
    build  config  index.html  package.json  package-lock.json  README.md  src  static
    [root@localhost 07-luffy_project_01]# npm install
    [root@localhost 07-luffy_project_01]# ls     #增加了node_modules
    build  config  index.html  node_modules  package.json  package-lock.json  README.md  src  static  
    9.打包vue项目,生成一个dist静态文件夹
    [root@localhost 07-luffy_project_01]# npm run build
    10.检查dist文件夹
    [root@localhost 07-luffy_project_01]# ls
    build  config  dist  index.html  node_modules  package.json  package-lock.json  README.md  src  static  #增加了dist
    [root@localhost 07-luffy_project_01]# ls dist
    index.html  static
    11.只需要将vue的静态文件,发布到web我放弃,访问web服务器即可。
    12.安装配置nginx web服务器,访问到vue的静态文件
    [root@localhost ~]# yum install nginx -y
    [root@localhost ~]# systemctl start nginx
    [root@localhost ~]# netstat -tunlp|grep nginx
    [root@localhost ~]# find / -name index.html   # 192.168.0.101  看到的就是这个页面/usr/share/nginx/html/index.html
    [root@localhost ~]# vim /etc/nginx/nginx.conf
    ###################
    server {
            listen       80 default_server;
            listen       [::]:80 default_server;
            server_name  _;
            root         /opt/luffy/07-luffy_project_01/dist;   ##更改这的路径
            #root这个参数代表定义网页根目录,只要访问Nginx,Nginx就去这个根目录下寻找一个index.html的文件
            # Load configuration files for the default server block.
            include /etc/nginx/default.d/*.conf;
    
            location / {
            }
    
            error_page 404 /404.html;
                location = /40x.html {
            }
    
            error_page 500 502 503 504 /50x.html;
                location = /50x.html {
            }
        }
    ###################
    12.重启nginx服务才能生效
    [root@localhost ~]# systemctl restart nginx
    13.添加课程数据是存放到redis中的,需要安装redis
    yum install redis -y
    14.启动redis
    [root@localhost ~]# systemctl start redis
    [root@localhost ~]# netstat -tunlp |grep 6379
    [root@localhost ~]# redis-cli
    127.0.0.1:6379> ping
    PONG
    127.0.0.1:6379> FLUSHDB  #手动清除数据
    OK
    127.0.0.1:6379> keys *
    15.测试
    http://192.168.0.101
    运行路飞学城
  • 相关阅读:
    232. Implement Queue using Stacks
    231. Power of Two
    n&(n-1)位运算的妙用
    230. Kth Smallest Element in a BST
    关于UNIX的exec函数
    Go语言的各种Print函数
    Go语言的接口interface、struct和组合、继承
    Go语言知识点笔记
    Ubuntu自定义终端窗口位置
    Python的类变量和成员变量、类静态方法和类成员方法
  • 原文地址:https://www.cnblogs.com/bubu99/p/11565793.html
Copyright © 2020-2023  润新知