Python的使用环境配置

  1. 安装Python
  2. 配置PyCharm的编译环境
    1. 字符编码问题
    2. 找不到Django模块问题
    3. Django版本兼容问题
  3. Qgis的环境问题
  4. Anaconda

公司更换新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里设置解析器,
image
image
若要新建环境而又提示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 with brew 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" 转载请保留原文链接及作者。

目录
×

喜欢就点赞,疼爱就打赏

宝贝回家