原文来自: https://blog.csdn.net/lovefengruoqing/article/details/79284573

新装的CentOS 7安装python3

centos7自带有python,但是确实python2版本的python,如果你想安装个python3怎么办呢?难道要从github上把源码clone下来进行编译安装么?这么做对于我们个人用户来说,完全没必要嘛。

  1. 首先,你要知道系统现在的python的位置在哪儿:
    [root@root ~]# whereis python
    python: /usr/bin/python2.7 /usr/bin/python /usr/lib/python2.7 /usr/lib64/python2.7 /etc/python /usr/include/python2.7 /usr/share/man/man1/python.1.gz
    

    可以知道我们的python在 /usr/bin目录中

    [root@root ~]# cd /usr/bin/
    [root@root bin]# ll python*
    lrwxrwxrwx. 1 root root    7 2月   7 09:30 python -> python2
    lrwxrwxrwx. 1 root root    9 2月   7 09:30 python2 -> python2.7
    -rwxr-xr-x. 1 root root 7136 8月   4 2017 python2.7
    

    可以看到,python指向的是python2,python2指向的是python2.7,因此我们可以装个python3,然后将python指向python3,然后python2指向python2.7,那么两个版本的python就能共存了。

  2. 因为我们要安装python3,所以要先安装相关包,用于下载编译python3:
    yum install zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gcc make
    

    运行了以上命令以后,就安装了编译python3所用到的相关依赖

    如果在centos 7 下安装python3.7,还需要多安装一个依赖,否则报找不到_ctype错误:

    #yum install libffi-devel -y
  3. 默认的,centos7也没有安装pip,不知道是不是因为我安装软件的时候选择的是最小安装的模式。
    #运行这个命令添加epel扩展源

    yum -y install epel-release

    #安装pip

    yum install python-pip
  4. 用pip装wget
    pip install wget
  5. 用wget下载python3的源码包
    python -m wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tar.xz
  6. 编译python3源码包
    #解压

    xz -d Python-3.7.0.tar.xz
    tar -xf Python-3.7.0.tar

    #进入解压后的目录,依次执行下面命令进行手动编译

    ./configure prefix=/usr/local/python3
    make && make install

    如果最后没提示出错,就代表正确安装了,在/usr/local/目录下就会有python3目录

  7. 添加软链接
    #将原来的链接备份

    mv /usr/bin/python /usr/bin/python.bak

    #添加python3的软链接

    ln -s /usr/local/python3/bin/python3.7 /usr/bin/python3

    #测试是否安装成功了

    python -V
  8. 更改yum配置,因为其要用到python2才能执行,否则会导致yum不能正常使用
    vi /usr/bin/yum

    把第一行#! /usr/bin/python修改为#! /usr/bin/python2

    vi /usr/libexec/urlgrabber-ext-down

    把第一行#! /usr/bin/python修改为#! /usr/bin/python2

  9. 注意系统默认pip是python2里的PIP,需要安装python3.7的包,就需要更换链接:
    mv /usr/bin/pip /usr/bin/pip.bak
    ln -s /usr/local/python3/bin/pip3 /usr/bin/pip
    pip -V
  10. 之后如果出现firewall-cmd无法工作,修改:
    vi /usr/bin/firewall-cmd

    将第一行也按照上边修改成python2

    vi /usr/sbin/firewalld

    做同样修改即可。

因为是开发服务器,关闭firewall

# 停止防火墙
systemctl stop firewalld.service
# 禁止防火墙开机启动
systemctl disable firewalld.service
# 允许防火墙开机启动
systemctl enable firewalld.service
# 查看防火墙状态
firewall-cmd --state

PIP的使用

pip --upgrade

批量更新过期的python库
今天看了下系统环境,不少python库都有了更新,再用旧版本库可能已经不适合了,就想把所有的库都更新到最新版本。

查看系统里过期的python库,可以用pip命令

pip list

#列出所有安装的库

pip list --outdated

#列出所有过期的库
对于列出的过期库,pip也提供了更新的命令

pip install --upgrade

库名
但此命令不支持全局全部库升级。

在stackoverflow上有人提供了批量更新的办法,一个循环就搞定(注意–upgrade后面的空格)

import pip
from subprocess import call

for dist in pip.get_installed_distributions():
call("pip install --upgrade " + dist.project_name, shell=True)

另外的也有人提到用 pip-review ,不想安装就没用

pip install pip-review
pip-review --local --interactive

 

 

安装PostgreSQL 10

要编辑

vi /var/lib/pgsql/10/data/postgresql.conf
修改#listen_addresses = ‘localhost’ 为 listen_addresses=’*’
当然,此处‘*’也可以改为任何你想开放的服务器IP,注意这一行原来是注释的,必须要去掉注释才能生效。

vi /var/lib/pgsql/10/data/pg_hba.conf
修改如下内容,信任指定服务器连接
在第一行之后增加

host all all 0.0.0.0/0 md5
之后把每一行最后的ident 或者其他单词,都改成truest或者md5,就可以了,这里又是一个坑。

即可让postgres接受远程连接,然后需要为postgres用户指定一个密码。

如果启动服务的地方提示初始化服务错误,已经存在data目录,就到 /var/lib/pgsql/10/data 把这个data目录删掉,再

/usr/pgsql-10/bin/postgresql10-setup init db 即可

由于重新初始化了,先确定服务是否正常,正常的话把上边的两个配置重新做一下,然后:

su - postgres
psql
postgres=# \password postgres

即先切换到系统用户postgres(安装时生成),然后进入PostgreSQL,之后为postgres设置密码,用alter没有用,必须如此设置。
之后即可用pgAdmin 4 来 远程连接该数据库了。

也可以试验一下django 是否可以正常工作。

virtualenv的使用:

virtualenv env/mysite
source env/educa/bin/activate

这个目录代表一个环境的名称,和实际项目文件放在哪里没有关系。

修改PATH

在/etc/profile文件中添加变量【对所有用户生效(永久的)】
用VI在文件/etc/profile文件中增加变量,该变量将会对Linux下所有用户有效,并且是“永久的”。

[root@CentOS ~]# vi /etc/profile
在文件末尾加上如下两行代码
PATH=/usr/local/python3/bin:$PATH
export PATH

然后执行
source /etc/profile

天虹服务器的部署方法

简单一点采用 uwsgi, 不使用nginx

nohup uwsgi --http=0.0.0.0:80 --file=cms/wsgi.py --static-map=/static=static &

这个前提条件是静态文件的地址以及collectstatic都执行完毕, 然后要在cms目录下执行, 因为cms/wsgi.py 以及/static = static 都是相对路径, 执行完之后就可以不用管了
备份的话:

pg_dump -U contract -d contract -f 20200427.sql