斑马斑马-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
读取文件,使得生效,此时已经可以使用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访问了
四、其他虚拟环境管理工具
一、简介
二、Pipenv简单介绍
# pip 安装 pip3 install pipenv # 全局安装,如果只想在当前用户模式下安装,可添加参数:--user
# 如需更新可使用 pip3 install --user --upgrade pipenv
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 # 删除虚拟环境
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 # 只安装开发包
4:Python 文件的运行
方式一: pipenv run python xxx.py
pipenv run python xxx.py
方式二:在激活环境中运行
# 进入激活环境
pipenv shell
# 运行文件
python xxx.py
三、Pipenv简单使用
二:激活虚拟环境