Python的使用环境配置
公司更换新Mac,i7的cpu跑起来还是挺爽的,电脑还是买顶配的划算,无论从使用时间、使用期限和使用体验上,都是物有所值。
为了维护我们客户端自己的Web版工具,新电脑上得重新配置一次开发环境,但无奈以前配置环境时没有总结,导致又多踩一遍坑。这次总结会包括
- 安装Python3.x
- 配置项目的Python虚拟环境
- 配置PyCharm的编译环境
- 更新Django版本
顺带记录一下其它使用Python的工具或者管理器的问题,像Qgis、Anaconda。
安装Python
最简单不过的就是通过Homebrew安装了
$ brew search python
也可以下载安装包手动安装。
更新python
brew upgrade python
更新pip
python -m pip install --upgrade pip
升级python后提示找不到python3,这时需软连接到 /usr/local/bin 目录就能解决
ln -s /usr/local/Cellar/python/3.6.5_1/bin/python3 /usr/local/bin/python3
pip3 的软连接
ln -s /usr/local/Cellar/python/3.6.5_1/bin/pip3.6 /usr/local/bin/pip3
配置PyCharm的编译环境
字符编码问题
安装python3后,在pycharm的preference里设置解析器,
若要新建环境而又提示venv环境已存在则要先移除venv文件夹。选择要使用的python版本,python3.x的版本位于/usr/local/bin/python3.x(系统默认的位于/usr/bin/python2.7)。
当点击OK保存时提示了以下错误
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position XX
这是字符编码的问题,可尝试在/usr/local/lib/python3.x/site-packages/sitecustomize.py
中加入以下代码
import sys
sys.setdefaultencoding('UTF-8')
如果还是不行,那要考虑将环境创建在没有中文的路径下。
找不到Django模块问题
上面的问题搞定后,又出现新的报错,提示
no module named django.core.management
先查询Django版本
$ django-admin --version
查询无果则应先安装Django,若有版本信息则可能是venv使用的Python版本不对,这里找不到是因为Django(从1.9)更新到最新的2.x了
$ pip3 install django
然后,再重新设置interpreter
,venv必须选用site-packages包含Django的Python版本,否则仍然无法import django
一开始选择了错误的版本路径 /usr/local/lib/python3.6
后来选择正确的版本路径为 /Library/Frameworks/Python.framework/Versions/3.6/lib/python3.6
然后运行起项目
python manage.py runserver
在项目设置中,Parameters填的就是此命令中的runserver,Script path
填的是manager.py的文件路径,Working directory
是manager.py所在的目录路径,Python interpreter
选择刚创建好的venv的python版本
Django版本兼容问题
1.CASCADE
若运行失败,出现报错
TypeError: init() missing 1 required positional argument: ‘on_delete’
是因为django升级到2.x后的一个变动导致的,官方说明如下
Deprecated since version 1.9:
on_delete will become a required argument in Django 2.0. In older versions it defaults to CASCADE
即是以前不用指定默认的on_delete参数,现在需要显式指定,如以往没有指定on_delete,则代码可以更新为以下样子
categorie = models.ForeignKey(
'Categorie',
on_delete=models.CASCADE,
)
CASCADE 代表串联删除,官方更新说明地址。
2.reverse
其次2.x的django还将reverse存放的包变更了,可以用下面方式向下兼容
try:
from django.core.urlresolvers import reverse
except BaseException:
from django.urls import reverse
3.urllib
然后python3.6也有一个更新,使用urllib库访问https连接,会返回错误
ssl.SSLError: [SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed (_ssl.c:645)
解决方法是在终端直接运行以下命令安装certifi模块
/Applications/Python\ 3.6/Install\ Certificates.command
然后在用到ssl的地方import ssl。参考地址。
4.MIDDLEWARE_CLASSES
普通业务模块正常运作,但使用host:8000/admin去访问中间件Django管理时,页面显示404,提示找不到该url路径。“The current path, admin, didn’t match any of the URLconf defined in web_server.urls”这篇stackoverflow有提出相关的解决办法,但检查后没发现错误。
有说在python3.6下要将settings.py中的老式MIDDLEWARE_CLASSES替换为新式的MIDDLEWARE,有说将新式替换为老式的,但试过均无法解决。
在python3下替换为新式的会提示:
ImportError: Module “django.contrib.auth.middleware” does not define a “SessionAuthenticationMiddleware” attribute/class
django.core.exceptions.ImproperlyConfigured: WSGI application ‘web_server.wsgi.application’ could not be loaded; Error importing module.
若是提示WSGIRequest类的user属性找不到可以参考这篇,
‘WSGIRequest’ object has no attribute ‘user’ Django admin。
最后还是还原回代码最初使用的环境,将django还原回1.10.3的版本
如果是使用2.7的python,先使用easy_install安装pip
$ sudo easy_install pip
然后使用2.7的pip安装1.10.3的django
$ pip2.7 install django==1.10.3
5.虚拟环境
也顺带了解一下Python的虚拟环境。
我们可以同时安装多个Python版本在系统上,通过在python指令后加版本数字来区分使用的python版本。但在开发应用时,也可能会存在不同应用需要不同的python版本,甚至不同的python工具包的版本,这时就需要用到venv这个基于一个或多个项目“独立”的Python运行环境,来解决不同应用间多版本的冲突问题。
有一个叫virtualenv
的工具,可通过pip(管理Python库的工具)安装得到
$ pip3 install virtualenv
通过这个工具,使用命令virtualenv
可以创建一个独立的Python运行环境,我们还可以加上参数--no-site-packages
使系统Python环境中的所有第三方包都不会复制过来,这样,我们就得到了一个不带任何第三方包的“干净”的Python运行环境。新建的Python环境被放到当前目录下的venv
目录。可以用source
命令进入该环境:
$ source venv/bin/activate
退出当前的venv环境,使用deactivate
命令:
$ deactivate
其与其它env工具的区别可以参考这里
Qgis的环境问题
安装Qgis后提示找不到python3.6,软连接到这里即可解决
sudo ln -s /usr/local/Cellar/python/3.6.5_1/Frameworks/Python.framework /Library/Frameworks/Python.framework
Qgis需要的库
pip3 install owslib PyYaml psycopg2 jinja2 pygments plotly
其中osgeo需要安装gdal
sudo python3 -m pip install gdal
如果报错提示
Command “python setup.py egg_info” failed with error code 1 in /private/var/folders/xxx/
可以换用brew安装
brew install gdal
如果还报错提示
Error: gdal contains conflicting version recursive dependencies:
python@2, python
View these withbrew deps --tree gdal
.
最后在这里找到解决方法,要使用qgis3.0版本,就需要安装gdal2.0版本
$ brew unlink gdal
$ brew tap osgeo/osgeo4mac && brew tap --repair
$ brew install jasper netcdf
$ brew install gdal2 --with-armadillo --with-complete --with-libkml --with-unsupported
$ brew link --force gdal2
安装完毕后到.bash_profile
添加下面的一句后保存及激活
$ vi ~/.bash_profile
export PATH="/usr/local/opt/gdal2/bin:$PATH"
$ source ~/.bash_profile
Anaconda
1.Anaconda安装的Python库目录
root环境下安装的Python库文件目录为:
/Users/userName/anaconda/lib/python2.7/site-packages
python27环境下安装的Python库文件目录为:
/Users/userName/anaconda/envs/python27/lib/python2.7/site-packages
python3环境下安装的Python库文件目录为:
/Users/zj_macbook/anaconda/envs/python3/lib/python3.6/site-packages
2.pip安装的Python库目录
pip安装的Python库文件目录:
/usr/local/lib/python2.7/site-packages
pip3安装的Python库文件目录:
/usr/local/lib/python3.6/site-packages
3.另外
当Anaconda图形交换界面上选择的第三方库下载很慢的时候,可以直接找出Anaconda下的pip去终端执行命令行来下载,速度会有显著的提升。
brew会为可执行程序创建链接,位于:
/usr/local/bin
实际安装的位置在
/usr/local/Cellar
转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 mingfungliu@gmail.com
文章标题:Python的使用环境配置
文章字数:1.9k
本文作者:Mingfung
发布时间:2018-05-24, 19:30:00
最后更新:2018-08-08, 00:17:21
原始链接:http://blog.ifungfay.com/后端/Python的使用环境配置/版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。