斑马斑马-06-白云之上-python + django 在 linux的安装、运行

一、Python安装(Linux)

1:下载

  wget  https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz


2:准备

  yum install gcc-* glibc-* -y

3:解包

  tar xvf Python-3.7.0.tgz

4:运行configure脚本,添加编译参数 

  ./configure --prefix=/usr/local/python3.7

 

   ps:遇到的问题

可以看到最后有一行很醒目的提示,这行提示可以忽略,它的意义是是否想要编译一个允许各种优化(例如PGO——Profile-guided optimization,这是GCC支持的一个优化选项,可以提升程序性能,有兴趣的同学可以自行谷歌)的版本,如果想要,可以运行 ./configure --enable-optimizations。

5:编译

  make

6:安装

  make install

 

 ps:遇到的问题

 

 因为3.7版本用到外部模块_ctypes,需要一个新的包libffi-devel,安装此包之后再次进行安装步骤即可。

yum install libffi-devel -y

 

 查看bin目录下的安装

 

7:配置环境变量

  查看环境变量

 

  永久修改 etc/profile(结合自己的实际情况而定)

  vim /etc/profile

       在文件末尾(快捷键:G)添加两行

  PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:usr/local/bin/python3.7/bin

  export PATH 

 

二、升级pip包与虚拟环境

pip是python包管理工具,该工具提供对python包的查找、下载、安装、卸载功能。由于我们下载了最新的python,因此需要更新pip。

pip3 install --upgrade pip

1:什么是虚拟环境

  Python虚拟环境的主要目的是为了给不同的工程创建互相独立的运行环境。

  在虚拟环境下,每一个工程都有自己的依赖包,而与其它的工程无关。不同的虚拟环境中同一个包可以有不同的版本。

  并且,虚拟环境的数量没有限制,我们可以轻松地用virtualenv或者pyenv等工具来创建多个虚拟环境。

2:虚拟环境的使用

  2.1 安装虚拟环境 

   pip3 install virtualenv

  2.2 创建一个名字叫“env”的虚拟环境

   virtualenv env

    系统会自动创建一个env的虚拟环境

 

 

  2.3 验证虚拟环境

  验证虚拟环境的隔离作用,我们以bcrypt模块为例。

     首先:我们要在全局系统环境中安装这个模块。

    pip -q install bcrypt

  执行    

    import bcrypt;
    print(bcrypt.hashpw('password'.encode('utf-8'), bcrypt.gensalt()))

 

 

   然后:我们要进入虚拟环境中: source env/bin/activate

   可以看到,在运行完这行命令后,shell的提示符前会出现虚拟环境的名字,表示我们已经进入了这个环境中。

   

  执行    

    import bcrypt; 
    print(bcrypt.hashpw('password'.encode('utf-8'), bcrypt.gensalt()))

  

   至此,说明虚拟环境的隔离作用已经完成

   最后:我们要退出虚拟环境: deactivate

3:用virtualenvwrapper管理虚拟环境

  虚拟环境的引入解决了我们关于环境冲突的问题,但是它同时也带来了一个问题,就是虚拟环境过多所带来的管理问题。

  virtualenvwrapper就是专门用来解决虚拟环境管理问题的一个工具。

  我们可以很方便地用它来实现对虚拟环境的创建,删除,拷贝,并且可以轻松地在不同环境间进行切换。 

   3.1 virtualenvwrapper的安装非常简单
    pip3 install virtualenvwrapper

    ps:如果报错    

ERROR: Command errored out with exit status 1:
     command: /usr/local/bin/python3.7 -c 'import sys, setuptools, tokenize; sys.argv[0] = '"'"'/tmp/pip-install-iixfhrbe/virtualenvwrapper/setup.py'"'"'; __file__='"'"'/tmp/pip-install-iixfhrbe/virtualenvwrapper/setup.py'"'"';f=getattr(tokenize, '"'"'open'"'"', open)(__file__);code=f.read().replace('"'"'\r\n'"'"', '"'"'\n'"'"');f.close();exec(compile(code, __file__, '"'"'exec'"'"'))' egg_info --egg-base /tmp/pip-install-iixfhrbe/virtualenvwrapper/pip-egg-info
         cwd: /tmp/pip-install-iixfhrbe/virtualenvwrapper/
    Complete output (34 lines):
    WARNING: The wheel package is not available.
    WARNING: The repository located at mirrors.cloud.aliyuncs.com is not a trusted or secure host and is being ignored. If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '--trusted-host mirrors.cloud.aliyuncs.com'.
    ERROR: Could not find a version that satisfies the requirement pbr (from versions: none)
    ERROR: No matching distribution found for pbr
    Traceback (most recent call last):
      File "/usr/local/lib/python3.7/site-packages/setuptools/installer.py", line 128, in fetch_build_egg
        subprocess.check_call(cmd)
      File "/usr/local/lib/python3.7/subprocess.py", line 328, in check_call
        raise CalledProcessError(retcode, cmd)
    subprocess.CalledProcessError: Command '['/usr/local/bin/python3.7', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmppkfclsqp', '--quiet', '--index-url', 'http://mirrors.cloud.aliyuncs.com/pypi/simple/', 'pbr']' returned non-zero exit status 1.
    
    During handling of the above exception, another exception occurred:
    
    Traceback (most recent call last):
      File "<string>", line 1, in <module>
      File "/tmp/pip-install-iixfhrbe/virtualenvwrapper/setup.py", line 7, in <module>
        pbr=True,
      File "/usr/local/lib/python3.7/site-packages/setuptools/__init__.py", line 143, in setup
        _install_setup_requires(attrs)
      File "/usr/local/lib/python3.7/site-packages/setuptools/__init__.py", line 138, in _install_setup_requires
        dist.fetch_build_eggs(dist.setup_requires)
      File "/usr/local/lib/python3.7/site-packages/setuptools/dist.py", line 698, in fetch_build_eggs
        replace_conflicting=True,
      File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 783, in resolve
        replace_conflicting=replace_conflicting
      File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1066, in best_match
        return self.obtain(req, installer)
      File "/usr/local/lib/python3.7/site-packages/pkg_resources/__init__.py", line 1078, in obtain
        return installer(requirement)
      File "/usr/local/lib/python3.7/site-packages/setuptools/dist.py", line 754, in fetch_build_egg
        return fetch_build_egg(self, req)
      File "/usr/local/lib/python3.7/site-packages/setuptools/installer.py", line 130, in fetch_build_egg
        raise DistutilsError(str(e))
    distutils.errors.DistutilsError: Command '['/usr/local/bin/python3.7', '-m', 'pip', '--disable-pip-version-check', 'wheel', '--no-deps', '-w', '/tmp/tmppkfclsqp', '--quiet', '--index-url', 'http://mirrors.cloud.aliyuncs.com/pypi/simple/', 'pbr']' returned non-zero exit status 1.
    ----------------------------------------
ERROR: Command errored out with exit status 1: python setup.py egg_info Check the logs for full command output.
错误信息

  WARNING: The repository located at mirrors.cloud.aliyuncs.com is not a trusted or secure host and is being ignored.

  If this repository is available via HTTPS we recommend you use HTTPS instead, otherwise you may silence this warning and allow it anyway with '--trusted-host mirrors.cloud.aliyuncs.com'.

  ERROR: Could not find a version that satisfies the requirement pbr (from versions: none)

  ps:警告原因已经说的比较清晰了,大意说这个数据源 不是受信任或安全的主机,被忽略了。如果你想要允许,请在后面添加'--trusted-host mirrors.cloud.aliyuncs.com'.

   其实真是的报错是pbr,我们先安装这个: pip3 install pbr -i http://pypi.douban.com/simple --trusted-host pypi.douban.com

   再安装这个就可以了:pip3 install virtualenvwrapper

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

    打开文件
    vim ~/.bashrc
    写入以下几行代码(切记,不要存在空格)      

      export WORKON_HOME=$HOME/.virtualenvs
      export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'#添加virtualenvwrapper的参数,生成干净隔绝的环境
      export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3#指定python解释器
      export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
      source /usr/local/bin/virtualenvwrapper.sh#执行virtualenvwrapper安装脚本

# .bashrc

# User specific aliases and functions

alias rm='rm -i'
alias cp='cp -i'
alias mv='mv -i'

# Source global definitions
if [ -f /etc/bashrc ]; then
        . /etc/bashrc
fi


# source /usr/local/bin/virtualenvwrapper.sh
# export WORKON_HOME=~/Envs
export WORKON_HOME=$HOME/.virtualenvs
export VIRTUALENVWRAPPER_VIRTUALENV_ARGS='--no-site-packages'
export VIRTUALENVWRAPPER_PYTHON=/usr/local/bin/python3
export VIRTUALENVWRAPPER_VIRTUALENV=/usr/local/bin/virtualenv
source /usr/local/bin/virtualenvwrapper.sh
.bashrc

        读取文件,使得生效,此时已经可以使用virtalenvwrapper

      source ~/.bashrc

  3.3:基本使用virtualenvwrapper

    3.3.1:创建一个虚拟环境:

    mkvirtualenv test1

    如果报错:virtualenv: error: unrecognized arguments: --no-site-packages

    

 

 

     升级版本:pip3 install --upgrade virtualenv==16.7.9    

    3.3.2:在虚拟环境上工作:激活虚拟环境my_django115
    workon test1

    3.3.3 离开、停止虚拟环境
    deactivate

    3.3.4 再创建一个新的虚拟环境

    mkvirtualenv test2

    3.3.5 列举所有的环境。 

    lsvirtualenv

    3.3.6 导航到当前激活的虚拟环境的目录中,比如说这样您就能够浏览它的 site-packages 
    cdvirtualenv

    3.3.7 和上面的类似,但是是直接进入到 site-packages 目录中
    cdsitepackages

    3.3.8 显示 site-packages 目录中的内容
    lssitepackages

    3.3.9 删除虚拟环境,需要先退出虚拟环境
    rmvirtualenv my_django115

三、使用虚拟环境安装django

 

# 创建环境
virtualenv web01
# 环境生效

source web01/bin/activate

# 前面带有(web01)说明在环境中
(web01) [root@web01 ~]# pip3 install django
# 用django新建一个项目
(web01) [root@web01 ~]#django-admin.py startproject myweb
# django启动

(web01) [root@web01 ~]# cd myweb

(web01) [root@web01 ~]# python3 manage.py migrate

(web01) [root@web01 ~]#python3 manage.py runserver 39.99.213.203:8000

# 修改ALLOWED_HOSTS
(web01) [root@web01 ~]# vim myweb/settings.py
ALLOWED_HOSTS = ['*']

 问题1:运行时报错

#python3 manage.py runserver 39.99.213.203:8000  报错

  ps:运行服务器时报错: No module named '_sqlite3'

  

 

   1:确定是否安装了,进入python3目录查看是否存在_sqlite3.so。首先进入python3命令行,然后导入sys,最后打印path

  

   由上图可知,并没有找到该模块,所以需要安装sqlite3 

(1)下载:wget https://www.sqlite.org/2018/sqlite-autoconf-3240000.tar.gz
(2)解压:tar -xvzf sqlite-autoconf-3240000.tar.gz
(3)进入解压后的目录:cd sqlite-autoconf-3240000/
(4)编译:./configure --prefix=/usr/local/sqlite
(5)安装:make -j4&&make install(我是用root用户安装的,否则没有权限,也可以加sudo,但最好用root)等待安装完成。。。
开始重新安装python3,否则python3不能识别sqlite3。
(1)首先进入python3的安装目录,如果不知道可以用:find / -name setup.py。如下,

   (2)然后需要修改setup.py文件。 进入编辑模式,找到sqlite_inc_paths这一列,快捷键 / 关键字

'/usr/local/sqlite/include',
'/usr/local/sqlite/include/sqlite3',

    

   (3)保存并退出,然后执行如下两行(最好在root用户下执行)    

./configure --enable-loadable-sqlite-extensions
make && sudo make install    

(4)查看——sqlite3.so,执行:
         find / -name _sqlite*.so
(5)将_sqlite3拷贝到python3的安装目录。并改名为_sqlite3.so。
        cp /usr/local/lib/python3.7/lib-dynload/_sqlite3.cpython-37m-x86_64-linux-gnu.so /usr/local/lib/python3.7/_sqlite3.so

(6)进入python3命令行,再导入sqlite3,发现没有问题。

  

问题二:运行时仍然报错

Error: That IP address can't be assigned to.

 

 解决方案,有以下三种

一、查看settings.py文件的ALLOWED_HOSTS是否配置了该ip地址,如果没有的话就加上。开发时,我建议把0.0.0.0 、127.0.0.1 、localhost这些都添加上去。甚至是  '*'

二、如果使用的是服务器的话,请在服务器控制台的防火墙设置里,查看是否添加了8000这个端口(或者是您自己指定的启动端口)。
如果上述两种方法均不可以,那么就:
三、python manage.py runserver 0:8000
没错,直接把启动的ip设置为0,然后问题就解决了,配置好防火墙之后,就可以直接用域名或者是服务器ip访问了

四、其他虚拟环境管理工具

一、简介

 

        在学习虚拟环境的时候遇到了virtualenv、venv、pipenv等名词,这些都与Python的虚拟环境有关,那么这些到底是什么及相互之间又有什么联系呢?

 

        virtualenv 是目前最流行的 Python 虚拟环境配置工具。它不仅同时支持 Python2 和 Python3,而且可以为每个虚拟环境指定 Python 解释器,并选择不继承基础版本的包。

 

        virtualenv 的优点

 

        使得不同Python应用的开发环境相互独立,开发环境升级不影响其他应用的开发环境,也不会影响全局的环境(默认开发环境是全局开发环境),因为虚拟环境是将全局环境进行私有的复制,当我在虚拟环境进行 pip install 时,只会安装到选择的虚拟环境中。它可以防止系统中出现包管理混乱和版本的冲突 。

 

         其他详细介绍,请参考 virtutalenv 官网:https://virtualenv.pypa.io/en/latest/reference/

 

 

 

        venv    Python 从3.3 版本开始,自带了一个虚拟环境 venv,在 PEP-405 中可以看到它的详细介绍。它的很多操作都和 virtualenv 类似,但是两者运行机制不同。因为是从 3.3 版本开始自带的,这个工具也仅仅支持 python 3.3 和以后版本。所以,要在 python2 上使用虚拟环境,依然要利用 virtualenv 。

 

 

 

        pipenv 是 Pipfile 主要倡导者、requests 作者 Kenneth Reitz 写的一个命令行工具,主要包含了Pipfile、pip、click、requests和virtualenv,能够有效管理Python多个环境,各种第三方包及模块。

 

        pipenv 的优点

 

        pipenv集成了pip,virtualenv两者的功能,且完善了两者的一些缺陷。

 

        过去用virtualenv管理requirements.txt文件可能会有问题,Pipenv使用Pipfile和Pipfile.lock,后者存放将包的依赖关系,查看依赖关系是十分方便。

 

        各个地方使用了哈希校验,无论安装还是卸载包都十分安全,且会自动公开安全漏洞。

 

        通过加载.env文件简化开发工作流程。

 

        支持Python2 和 Python3,在各个平台的命令都是一样的。

 

 

二、Pipenv简单介绍

 

   由于pipenv功能强大,创源使用的正是这种工具

 

     1:安装    
# pip 安装 pip3 install pipenv # 全局安装,如果只想在当前用户模式下安装,可添加参数:--user
# 如需更新可使用 pip3 install --user --upgrade pipenv
View Code

     2:常用命令

创建虚拟环境
pipenv --two  # 使用当前系统中的Python2 创建环境
pipenv --three  # 使用当前系统中的Python3 创建环境
 
 
pipenv --python 3  # 指定使用Python3创建环境
pipenv --python 3.6  # 指定使用Python3.6创建环境
pipenv --python 2.7.14  # 指定使用Python2.7.14创建环境
 

注意:

a)创建环境时应使用系统中已经安装的、能够在环境变量中搜索到的Python版本

b)每次创建环境都会在当前目录下生成Pipfile文件,用来记录刚创建的环境信息,如果当前目录下包含该文件,则会覆盖

c)使用命令 创建环境时,版本号与参数之间有个空格。eg:--python (空格) 3.6

 

pipenv shell #激活虚拟环境
pipenv --where # 显示目录信息 
pipenv --venv # 显示虚拟环境信息 
pipenv --py # 显示Python解释器信息
pipenv graph #查看目前安装的库及其以来
pipenv check # 检查安全漏洞
pipenv update --outdated # 查看所有需要更新的依赖项 
pipenv update # 更新所有包的依赖项 
pipenv update <包名> # 更新指定的包的依赖项
pipenv uninstall XXX # 卸载XXX模块并从Pipfile中移除 
pipenv uninstall --all # 卸载全部包并从Pipfile中移除 
pipenv uninstall --all-dev # 卸载全部开发包并从Pipfile中移除
exit # 退出当前虚拟环境
pipenv --rm # 删除虚拟环境
View Code

    3:requirements.txt 文件的兼容              

pipenv可以像virtualenv一样用命令生成requirements.txt 文件:
pipenv lock -r > requirements.txt  # 将Pipfile和Pipfile.lock文件里面的包导出为requirements.txt文件
pipenv lock -r --dev > requirements.txt  # 将Pipfile和Pipfile.lock文件里面的开发包导出为requirements.txt文件

pipenv 通过requirements.txt安装包:
pipenv install -r requirements.txt
pipenv install -r --dev requirements.txt  # 只安装开发包
View Code

    4:Python 文件的运行    

    方式一: pipenv run python xxx.py
    pipenv run python xxx.py
    方式二:在激活环境中运行
    # 进入激活环境
    pipenv shell
    # 运行文件
    python xxx.py
View Code

三、Pipenv简单使用 

 

使用虚拟环境拢共分三步

 

1:创建虚拟环境

 

2:激活虚拟环境、安装相应的requirement

 

3:pycharm中配置:指定到刚刚创建的虚拟环境 

 

一:创建虚拟环境

 

pipenv --python 3.6

 

二:激活虚拟环境

 

pipenv shell

 

pip install -r requirements.txt

 

三:pycharm中配置使用

 

 

 

 

 

 

posted @ 2020-04-06 14:37  逍遥小天狼  阅读(302)  评论(0编辑  收藏  举报