pip 更新python版本 用pip更新python_pip更新失败


第三篇文章主要介绍的是如何将Django网站部署到阿里云服务器上,具体的流程如下图所示:


pip 更新python版本 用pip更新python_pip更新失败_02


我们会按照这张思维导图的顺序逐个展开讲解:

Section I, Ubuntu


pip 更新python版本 用pip更新python_pip 更新python版本_03


(1)我们需要在阿里云上租一台新的服务器,选择系统类型;或者将一台已经租好的服务器停止运行,之后再重装系统。这次我们的演示用的是公共镜像 + Ubuntu16.04 64位系统 + 自定义密码。

点击右下角阿里云的确定按钮,然后会弹出一个小窗口,提示你通过“点击获取”验证码。一旦你点击了按钮之后,验证码会在你发到你手机上,输入验证码之后,点击确定,就会提示你返回阿里云控制台。一般系统重装需要一点时间,控制台会显示“启动中”,过一会就切换成“运行中”,代表系统重装并处于运行状态。


pip 更新python版本 用pip更新python_pip更新失败_04


(2)如何用本地系统的终端的连接阿里云服务器?

如果你是ubuntu系统,尝试下面的操作:

我专门准备了一台Thinkpad,将系统重装为Ubuntu,目的就是为了方便本地连接服务器。大家也可以安装虚拟机来操作,参考B站小哥的视频:

Linux(Ubuntu)零基础体验教学_哔哩哔哩 (゜-゜)つロ 干杯~-bilibiliwww.bilibili.com

pip 更新python版本 用pip更新python_pip 更新python版本_05


我们把系统的终端Terminal打开,输入下面这行命令:

ssh root@47.95.144.251


pip 更新python版本 用pip更新python_pip无法更新_06


结果它提醒我,Host key verification failed,意思是说认证失败了。这是因为我之前连服务器的时候,是有认证过的;但是,因为我们更新了系统,老的认证就失效了(它会自动认证)。我们需要根据提醒,将就的认证先删除掉:

ssh-keygen -f "/home/psyjt/.ssh/known_hosts" -R "47.95.144.251"

然后再次输入:

ssh root@47.95.144.251

它会问你:小朋友,要不要更换认证啊?Are you sure?

答案当然是:yes


pip 更新python版本 用pip更新python_pip无法更新_07


然后,阿里云会要求你输入密码,你把刚刚安装系统的密码输进去,你就成功从客户端连接到了阿里云服务器。

如果你是windows系统,尝试下面这个视频中的操作:

Windows:使用 putty 远程控制服务器《 阿里云 ECS:Linux 服务器 》ninghao.net

(3)了解阿里云服务器的系统信息和已经安装的Python的版本情况。

当你来到一个陌生的环境的时候,通常要到处走走,探探周边的情况;同样的,来到阿里云服务器,你要知道这个系统是不是如你所愿,是Ubuntu16.04 64位系统,而且,里边的Python安装的版本情况又是怎样的?

如何获取系统信息?可以输入:lsb_release -a


pip 更新python版本 用pip更新python_pip 更新python版本_08


如何获取Python版本信息呢?

你可以直接输入Python,它就会进入到Python环境中,并且会有提示当前是哪个Python2.x版本。同样,你也可以输入Python3,会提示当前属于Python3.x版本。


pip 更新python版本 用pip更新python_pip 更新python版本_09


补充:退出python环境出了输入quit()之外,还可以用快捷键ctrl+D

这个时候,因为自己的Linux系统自带的是Python3.6,和阿里云服务器系统的版本有点不一样,所以我们可能会纠结,到底要不要把Python3.5升级Python3.6?

我这个人的特点一贯比较“怂”,不会轻易冒风险,在我不确定Python3.5和Python3.6之间的差异会必然导致某项功能无法实现之前,我选择不安装升级

Section II, 虚拟环境Virtualenv

在这个部分,我们需要了解pip的功能,pip和pip3的区别,安装pip3,并用pip3安装虚拟环境。本来这一步是单纯安装虚拟环境的,但是,为了强调pip和pip3的区别,很多小伙伴容易把两者搞混,我就故意把这个部分分解成四个问题。

·第一个问题,pip是用来干什么的?

pip是一个Python包管理工具,提供了对Python包的查找、下载、安装和卸载等功能。python安装包的工具有easy_install,setuptools,pip,以及distribute等。pip是easy_install的替代品。安装pip之前必须要先安装setuptools,而安装setuptools之前,必须要先安装python。

·第二个问题,pip和pip3的区别是什么?

如果系统同时装有python2和python3,那么pip默认给python2用,而pip3指定给python3用。

那是不是说,安装了python2的系统包含pip,安装了python3的系统就自带pip3?

我们可以用which查找某个命令是否存在,以及命令存在哪个位置。


pip 更新python版本 用pip更新python_pip无法更新_10


这说明安装python3并不会自带pip3。

从网上查到的资料显示:使用pip install XXX,新安装的库会放在这个目录下面:

python2.x/site-packages

如果使用pip3 install XXX,新安装的库会放在这个目录下面:

python3.x/site-packages

我们可以由第三个问题的解决来检验是不是这样?

·第三个问题,如何安装pip3?

先更新,apt-get update;再安装,apt-get install python3-pip。

第四个问题,如何借助pip3安装虚拟环境?

在终端中输入pip3 install virtualenv virtualenvwrapper

结果报错了,显示说:

locale.Error: unsupported locale setting

这是语言设置问题,只需要在命令窗口中输入:export LC_ALL=C

这时候在终端再次输入pip3 install virtualenv virtualenvwrapper就可以跑了。

虚拟环境安装成功!

Section III, uWSGI

pip3 install uwsgi

Section IV, Nginx

sudo apt-get install Nginx

安装Nginx之后,就可以通过外网对网站进行访问了。如果是阿里云服务器,需要注意的是,你需要配置安全组的策略(截图如下):


pip 更新python版本 用pip更新python_pip无法更新_11


点击安全组,然后右边有“修改”,“克隆”,“还原规则”,“管理实例”,“配置规则”,和“管理弹性网卡”六个选项,点击“配置规则”,就可以配置你的服务器的访问规则(分为入方向和出方向)。你要把80端口打开才能从外网对配置在阿里云服务器上对网站进行访问。具体可以参考下面这张图中的参数来设置:


pip 更新python版本 用pip更新python_pip无法更新_12


设置好之后点击确定保存,你在本地计算机的浏览器中输入服务器公网ip地址,就可以看到:


pip 更新python版本 用pip更新python_pip无法更新_13


这说明nginx安装成功了!当然,我们的目的不止于如此,肯定是要把在本地已经编写好的django项目上传到服务器,并让其他用户能够通过网址访问服务器,才是我们最终的目标。

SectionV, Django

(1)进入到nginx默认创立的www网站的文件夹位置,

cd /var/www/

(2)开启虚拟环境,然后安装django,

创建虚拟环境

virtualenv GoodProject01

激活虚拟环境

source GoodProject01/bin/activate

进入这个虚拟环境的文件夹

cd GoodProject01

·安装requirements.txt中的项目依赖包

重新打开一个端口Terminal,然后把本地的项目文件夹,生成好的requirements.txt,还有数据库文件db_psyBlog.sql都上传到服务器的这个虚拟环境文件夹GoodProject01中。

本地的requirements.txt如何生成?

输入下面这段代码:


pip freeze > requirements.txt


切记,这个一定要在虚拟环境中操作,有同学如果不是在虚拟环境中操作,有可能会引入项目之外的安装包。通常我们打开requirements.txt是这样的:


Django==1.11.7
pkg-resources==0.0.0
PyMySQL==0.9.3
pytz==2019.3


我们可以把第2项删掉,只保留3个项目即可。

利用scp命令,我们可以把本地机器上的requirements.txt上传到服务器上,比如像这样:


scp requirements.txt root@xx.xx.xx.xx:/var/www/GoodProject01/mBlog/requirements.txt


上传完毕之后,我们就可以安装django在python3虚拟环境下的一系列依赖工具包,执行pip3 install -r requirements.txt,读取文件requirements.txt中的扩展库信息并在服务器上的虚拟环境中进行安装。

·安装数据库

接下来是重点,就是要安装mysql数据库,并且把本地上传的这个数据库文件db_psyBlog想办法纳入到数据库里边。

一般我们都是要找一个安装数据库的教程作为参考,我通过百度找到了一个:

Django+Ubuntu WEB部署(超详细版)www.jianshu.com

pip 更新python版本 用pip更新python_pip 更新python版本_14


这里核心的安装的语句:


sudo apt-get install mysql-server


pip 更新python版本 用pip更新python_pip 更新python版本_15


这一步是要你输入mysql的密码的,设置成你记得住的密码。然后按回车继续...

可以利用


mysql -uroot -p


输入密码,登录进mysql数据库中。其他数据库方面的操作与本地数据库操作是类似的。但是,这个时候数据库中并没有本地数据库,需要将本地的数据库迁移到服务器上。

·迁移数据库

迁移数据库的教程也找了一个,而且亲测有效:

mysql-数据库备份与恢复(Ubuntu16.04)_数据库_student241的博客-CSDN博客blog.csdn.net

pip 更新python版本 用pip更新python_pip更新失败_16


所以,可以跑到django项目文件夹(就是那个带manage.py文件的目录)中,运行


mysqldump -uroot -p  db_mBlog > db_mBlog.sql


这样就可以把数据库中的db_mBlog数据库导出。利用scp命令,将 db_mBlog.sql 拷贝到服务器上的项目文件夹中。

这个时候,你先要在数据库中创建一个同名的数据库:


create database db_mBlog  charset=utf8;


然后借助下面的命令将.sql数据库文件导入到数据库中:


mysql -uroot  -p db_mBlog  < db_mBlog.sql


因为,我们已经安装了uwsgi和nginx,我们可以进入到配置nginx.conf文件和GoodProject01.ini文件的操作。

·配置nginx.conf文件

在所有这些工作做好之后,可以把本地的Django项目,上传到服务器上,需要先迁移一次数据库,运行django的项目看看能不能正常运行。如果可以,说明django项目连接服务器上的数据库并且启动项目是可以的。然后,我们开始考虑用uwsigi 启动nginx。这里就涉及到如何配置nginx和uwsgi的问题:

nginx的配置文件nginx.conf,我们把这个文件从本地上传服务器,打开看看配置文件里边是什么样子(需要修改):


user www-data;
worker_processes auto;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {
server {
       listen 80;
       server_name xx.xx.xxx.xxx;
       charset utf-8;

       location /static {
               alias  /var/www/GoodProject01/psyBlog/static;
       }

       location / {
             uwsgi_pass   127.0.0.1:8000;
             include   /etc/nginx/uwsgi_params;
       }
}
        ##
        # Basic Settings
        ##

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;
        # server_tokens off;

        # server_names_hash_bucket_size 64;
        # server_name_in_redirect off;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        ##
        # SSL Settings
        ##
        ssl_protocols TLSv1 TLSv1.1 TLSv1.2; # Dropping SSLv3, ref: POODLE
        ssl_prefer_server_ciphers on;

        ##
        # Logging Settings
        ##

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        ##
        # Gzip Settings
        ##

        gzip on;
        gzip_disable "msie6";
        # gzip_vary on;
        # gzip_proxied any;
        # gzip_comp_level 6;
        # gzip_buffers 16 8k;
        # gzip_http_version 1.1;
        # gzip_types text/plain text/css application/json application/javascript text/xml application/xml application/xml+rss text/javascript;

        ##
        # Virtual Host Configs
        ##

        #include /etc/nginx/conf.d/*.conf;
        #include /etc/nginx/sites-enabled/*;
}

#mail {
#       # See sample authentication script at:
#       # Using a PHP Script on an Apache Server as the IMAP Auth Backend
#
#       # auth_http localhost/auth.php;
#       # pop3_capabilities "TOP" "USER";
#       # imap_capabilities "IMAP4rev1" "UIDPLUS";
#
#       server {
#               listen     localhost:110;
#               protocol   pop3;
#               proxy      on;
#       }
#
#       server {
#               listen     localhost:143;
#               protocol   imap;
#               proxy      on;
#       }
#}


这里大部分内容是不需要修改的,需要调整的是两个地方,第一个是:

server_name xx.xx.xxx.xxx;

要把http://xx.xx.xxx.xxx修改成你自己的域名或者IP地址。

第二个是:

location /static {

alias /var/www/GoodProject01/psyBlog/static;

}

如果你有用到static文件夹的话,需要修改成项目的static路径。

·配置uwsgi.ini文件

我们需要自己新建一个uwsigi的启动文件,然后填入信息,这两部分的内容我都是从网络上收集好了的。新建一个文件我用的是touch命令,然后用vim打开,再将准备好的脚本拷贝进去(如下所示):


[uwsgi]
chdir    =/var/www/GoodProject01/psyBlog
module   =psyBlog.wsgi
home     =/var/www/GoodProject01
master   =true
processes   =4
socket   =127.0.0.1:8000
chmod-socket  = 666
vacuum   = true


启动的命令用


uwsgi --ini GoodProject01.ini


这一步需要进入nginx文件夹来执行,如果.ini文件是在nginx文件夹下面的话:

cd /etc/nginx/