为什么我的basemap不能运行呢?

2021-03-09 13:52发布

>>>from mpl_toolkits.basemap import BasemapTraceback (most recent call last):  File , line 1, in    ...

>>>from mpl_toolkits.basemap import Basemap
Traceback (most recent call last):
  File "", line 1, in
    from mpl_toolkits.basemap import Basemap
  File "D:\Python\lib\site-packages\mpl_toolkits\basemap\__init__.py", line 42, in
    from .proj import Proj
  File "D:\Python\lib\site-packages\mpl_toolkits\basemap\proj.py", line 6, in
    from matplotlib.cbook import dedent
ImportError: cannot import name 'dedent' from 'matplotlib.cbook' (D:\Python\lib\site-packages\matplotlib\cbook\__init__.py)

请求大佬帮帮我,十分感谢!


1条回答
卡卡
2楼 · 2021-03-10 16:53







文章目录

  1. 前言2.明确学习目标,不急于求成,不好高骛远3.在开始学习Python之前,你需要做一些准备2.1Python的各种发行版2.2安装Python2.3选择一款趁手的开发工具

  2. 3.习惯使用IDLE,这是学习python最好的方式4.严格遵从编码规范5.代码的运行、调试5.模块管理5.1同时安装了py2/py35.2使用Anaconda,或者通过IDE来安装模块5.3仅安装了py2或py35.4pip应用演示5.5模块仓库5.4发布自己的模块安装包



  1. 前言

  2. 欢迎来到“Python进阶”专栏!来到这里的每一位同学,应该大致上学习了很多Python的基础知识,正在努力成长的过程中。在此期间,一定遇到了很多的困惑,对未来的学习方向感到迷茫。我非常理解你们所面临的处境。我从2007年开始接触python这门编程语言,从2009年开始单一使用python应对所有的开发工作,直至今天。回顾自己的学习过程,也曾经遇到过无数的困难,也曾经迷茫过、困惑过。开办这个专栏,正是为了帮助像我当年一样困惑的Python初学者走出困境、快速成长。希望我的经验能真正帮到你们。

  3. 2.明确学习目标,不急于求成,不好高骛远

  4. 当下是一个喧嚣、浮躁的时代。我们总是被生活中大量涌现的热点所吸引,几乎没有深度阅读和思考的时间和机会。我始终认为,学习是需要沉下心来慢慢钻研的,是长期的;同时,学习不应该被赋予太多的功利色彩。一个Python程序员的成长路线图应该是这样子的:基础语法–>语感训练–>课题练习–>分方向继续学习–>中级程序员–>拓展深度和广度–>高级程序员。然而,很多新手的学习路线图却是这样子的:学完基础语法之后,不了解http协议和Ajax异步请求,就兴冲冲研究爬虫去了;或者,学完基础语法,就去搞视觉识别,连OpenCV的数据结构都看不懂;甚至,学完基础语法就直接研究神经网络,结果是重演了一遍从入门到放弃。我给初学者的建议就是,不急于求成,不好高骛远,一步一步,稳扎稳打,功到自然成。不急于求成,可以避免走弯路,非但不会延缓你成长的速度,反倒会节省你的时间。不好高骛远,达成一个目标,再制定下一个目标,在连续的成功和进步中,建立起自信心,激发出更强的学习兴趣。

  5. 3.在开始学习Python之前,你需要做一些准备

Nowisbetterthannever,Althoughneverisoftenbetterthan*right*now.


这是Python之禅中的一句,翻译过来的意思是,做也许好过不做,但不假思索就动手还不如不做。的确,在开始学习Python之前,你需要了解的一些背景,做出一些选择,并在你的计算机上做好准备工作。

2.1Python的各种发行版

Python是龟叔的独生子,但他有很多堂兄弟,比较有名的也有好几位。如果你不确定哪个对你更友好,我建议你选择嫡传的Python——即便你将来需要和他的其他堂兄弟打交道,那也是熟门熟路。不建议初学者选择AnacondaPython和ActivePython,在我看来他们提供的便利不如给用户学习带来的麻烦多。

Cpython


CPython属于Python参考实现方案,可算是所有其他Python衍生发行版的一套标准化版本。CPython利用C语言编写而成,而其编写者包含多位Python语言顶级决策层中的核心人员。CPython在优化方面表现得最为保守。当然,这并不是缺点,而是设计取向。Python的维护者们希望将CPython打造为Python最具广泛兼容性与标准化的实现方案。CPython最适合对Python标准的兼容性与一致性要求较高的用户。此外,CPython同样适用于希望以最基本方式使用Python并愿意为此放弃某些便捷性的专业人士。


AnacondaPython


Anaconda源自Anaconda公司之手(原名为ContinuumAnalytics),其设计目标在于服务那些需要由商业供应商提供支持且具备企业支持服务的Python开发者。AnacondaPython的主要用例包括数学、统计学、工程、数据分析、机器学习以及其他相关应用。Anaconda捆绑有Python商业与科学使用场景当中的各类常用库——包括SciPy、NumPy以及Numba等等,同时通过一套定制化软件包管理系统提供更多库访问能力。


ActivePython


与Anaconda类似,ActivePython同样由营利性企业创建及维护——ActiveState公司。该公司还在销售多种语言运行时以及多语言KomodoIDE。ActivePython主要面向企业用户与数据科学家——即希望使用Python语言,但又不愿把大量精力浪费在Python的组装与管理方面。ActivePython使用Python中的常规pip软件包管理器,但同时亦以认证压缩包的形式提供数百套通用库,外加英特尔数学核心库等其他一些具有第三方依赖关系的公共库。


PyPy


PyPy属于CPython解释器的替代品,其利用即时(JIT)编译以加速Python程序的执行。根据实际执行的任务情况,其性能提升可能非常显著。人们对于Python——特别是CPython的抱怨之声,主要围绕其速度表现展开。在默认情况下,Python的运行速度远不及C语言——差距甚至可能达到数百倍。PyPyJIT将Python代码编译为机器语言,从而带来平均7.7倍于CPython的运行速度。在某些特定任务中,其提速效果能够达到50倍。


Jython


JVM(Java虚拟机)能够作为除Java之外的多种语言的运行时选项。这份长的名单包括Groovy、Scala、Clojure、Kotlin、Python以及——没错,当然还有Jython。Jython最大的弊端在于其仅支持Python的2.x版本。目前对Python3.x版本的支持能力尚在开发当中,但仍需要相当一段时间。当下,还没有任何相关版本放出。


IronPython


类似于Jython的JVM上Python实现方案定位,IronPython属于一套立足.Net运行时——或者CLR(公共语言运行时)——的Python实现方案。IronPython利用CLR的DLR(动态语言运行时)以允许Python程序以等同于CPython的动态水平实现运行。与Jython类似,IronPython目前只支持Python2.x版本。不过IronPython3.x实现方案已经处于紧锣密鼓的开发当中。


2.2安装Python

从Python官网下载时,请注意选择正确的版本。如果是用于学习,下载最新版没有问题,如果是用于生产,则要考虑你开发需要的第三方模块是否支持最新版的Python。安装时不要忘记勾选最下面的两个复选框,否则会给后续的模块安装带来一些麻烦。推荐使用默认方式安装。

2.3选择一款趁手的开发工具

学习一种编程语言,首先要找一款合用的集成开发工具,似乎是自然而然的想法。为什么不呢?IDE可以自动补齐,可以一键运行,还可以断点调试。使用IDE开发项目,就像驾驶一辆内饰豪华的汽车,尽情享受驾驶的乐趣就好了,谁还去关心引擎盖里面发动机是如何工作的呢?我的年轻同事们也都是IDE的拥趸,最初使用pycharm,后来是时下大热的vscode。

可是,我始终认为,编程就像是驾驶,程序员就是司机,而且是职业司机,不是把驾驶当成通勤技能的各色白领金领。既然是职业司机,就不能满足于打着领结、戴着白手套驾驶内饰豪华、配置高端的汽车,而是必须具备打开引擎盖子维修和保养的能力。

基于这个观点,我不建议初学者一开始就使用集成开发工具——至少,在开始第一个星期不要使用IDE。对于python这样一种解释型的脚本语言,一款趁手的编辑器就足够了。linux平台上,vim或者emacs都足够好(如果你通晓二者或者其中之一的话,请接受我的敬意);windows平台上,我推荐使用notepad++。python初学者使用编辑器而非IDE的好处是:

专注于python本身,而不是被工具使用问题所困扰。君不见,知乎上关于pycharm和vscode的使用说明、常见问题的解决方案,多得几乎超过了讨论python本身手工运行代码,可以更直观、更深刻地了解脚本的解释执行过程手工调试代码,有助于代码优化,提高代码把控能力可以更好地使用pip安装和管理第三方模块

3.习惯使用IDLE,这是学习python最好的方式

解释型语言的优势,就是可以写一句执行一句,想到哪儿写到哪儿,不必像编译型语言那样得把程序全部写完,编译成功后才能运行。我特别喜欢使用python的IDLE,甚至拿它当计算器用。很多时候,我用IDLE验证代码的写法是否正确,查看模块是否安装成功以及版本号。IDLE支持tab键自动补齐,我经常用这个功能查看某个对象的方法和属性。

>>>importnumpyasnp

>>>np.__version__

'1.17.0'

>>>np.hypot(3,4)

5.0

>>>deffactorial(n):#计算n的阶乘

    ifn==0:#递归出口

        return1

    returnn*factorial(n-1)#向递归出口方向靠近的自身调用


>>>factorial(5)

120

>>>_*2-100

140



小技巧

tab键自动补齐光标移动到执行过的语句上敲击回车,可以重复这个命令下划线(_)可以获取最后一次执行结果


实际上,IDLE就是一个IDE,你可以用它来创建或打开.py脚本文件,可以编辑、运行和调试。


4.严格遵从编码规范

Linux平台上,一个python源码文件应该以下部分组成。Windows平台上,可以省略第一项。

解释器声明编码格式声明模块注释或文档字符串模块导入常量和全局变量声明顶级定义(函数或类定义)执行代码

附上一个demo,仅供参考。更详细的编码规范,请参考拙作《我的Python编码规范》。

#!/usr/bin/envpython

#-*-coding:utf-8-*-



"""通常这里是关于本文档的说明(docstring),须以半角的句号、问号或惊叹号结尾!


本行之前应当空一行,继续完成关于本文档的说明

如果文档说明可以在一行内结束,结尾的三个双引号不需要换行;否则,就要像下面这样

"""



importos,time

importdatetime

importmath


importnumpyasnp

importxlrd,xlwt,xlutils


importyouth_mongodb

importyouth_curl



BASE_PATH=r"d:\YouthGit"

LOG_FILE=u"运行日志.txt"



classGameRoom(object):

"""对局室"""


def__init__(self,name,limit=100,**kwds):

"""构造函数!


name对局室名字

limit人数上限

kwds参数字典

"""


pass



defcraete_and_start():

"""创建并启动对局室"""


pass



if__name__=='__main__':

#开启游戏服务

start()


5.代码的运行、调试

如果你使用的集成开发工具,那么代码的运行和调试,就完全依赖于工具了。如果你使用编辑器开写代码,那就需要手工运行和调试代码。运行代码分成两步:

第1步,打开一个命令行窗口,路径切换到脚本所在的文件夹。我习惯在脚本所在窗口的空白位置(确保没有选中任何对象),按下shift键点击鼠标右键,在弹出的菜单中选择打开Powershell窗口。如下图所示。第2步,输入python+空格+脚本文件名,回车即可运行。输入脚本文件名时,按tab可以自动补齐。脚本的运行信息、错误信息、运行结果等,都可以显示在这个窗口中。这是最原始的信息。你在其他开发工具中看到信息,都是对这些信息的再加工。

当然,很多编辑器也支持自定义运行命令,可以实现一键运行python脚本。以Notdpan++为例,点击“运行”->“运行”菜单,在弹出的窗口中输入:


cmd/kcd/d“$(CURRENT_DIRECTORY)”&python“$(FULL_CURRENT_PATH)”&echo.&pause&exit


因为转义缘故,复制该命令的话,请检查$符号前面是否有\符号,如有,请删除。接下来,点击“保存”按钮,在弹出的窗口中输入新增命令的名称,比如PyRun,定义快捷键,最后点击“确定”按钮。完成以上设置后,就可以在Notepad++中使用菜单命令或者快捷键运行Python代码了。

手工调试代码的手段不多,除了print信息,几乎只有把调试信息写成调试文件了。听起来,好像问题很严重,其实只是理念和取向不同而已。反过来想,手段单一,不恰好意味着简单、简明吗?十几年来,我一直使用print调试,坚信没有比它更好的了。

5.模块管理

在python语言的发展过程中,安装和管理第三方模块的方法也历经变化。现在,我们终于等来了pip这个近乎完美的工具。pip除了安装(install)和删除(uninstall)这两大功能,还可以指定模块的安装版本(无需预先删除当前已安装版本),可以显示所有已安装的模块,还可以通过upgrade自主升级。

很多同学在使用pip时会遇到各种各样稀奇古怪的问题,我在这里解释一下:

5.1同时安装了py2/py3

同时安装了py2/py3,将会存在多个版本的pip.exe,你如果直接运行:


pipinstall<模块名>


则有可能因为pip.exe版本不对而出错。正确的做法是指定python版本,-m是python解释器的参数,意思是把pip模块做为脚本运行,完整命令如下:


py-3-mpipinstall<模块名>


5.2使用Anaconda,或者通过IDE来安装模块

如果你使用的是AnacondaPython,或者你是通过IDE来安装模块,则需要检查它们的配置和设置,情况各有不同,没有统一的解决方案。

5.3仅安装了py2或py3

如果你的计算机只安装了py2或者py3,那么上面两种安装方法应该都没有问题。如果你的电脑找不到pip.exe文件,则可以使用这个命令生成:


python-mensurepip


5.4pip应用演示

下面,就以同时安装了py2/py3的计算机为例(如果只安装了py2或py3,需要将下面演示中的py-3替换成python),演示pip模块的用法。不管任何情况,我都建议使用-m参数调用pip模块,而不是直接使用pip.exe安装模块。

#虽然可以这样使用pip安装模块(以numpy为例)

PSD:\XufiveGit\wxgl>pipinstallnumpy


#但我建议这样使用pip

PSD:\XufiveGit\wxgl>py-3-mpipinstallnumpy


#删除模块

PSD:\XufiveGit\wxgl>py-3-mpipuninstallnumpy


#安装模块,指定版本

PSD:\XufiveGit\wxgl>py-3-mpipinstallnumpy=1.15.0


#自主升级

PSD:\XufiveGit\wxgl>py-3-mpipinstall--upgradepip


#显示已安装的模块

PSD:\XufiveGit\wxgl>py-3-mpiplist

PackageVersion

----------------------------

-pencv-python4.1.1

argh0.26.2

attrs19.1.0

Automat0.7.0

basemap1.2.0

beautifulsoup44.6.3

bleach3.1.0

cefpython366.0

......


pip也用来安装本地whl文件:

PSD:\PyPackage\py3>py-3-mpipinstall.\basemap-1.2.0-cp37-cp37m-win_amd64.whl


5.5模块仓库

如果你需要下载python模块,这里是我见过的最全、最稳定的python模块仓库,由加州大学欧文分校荧光动力学实验室创建并维护。

5.4发布自己的模块安装包

如果你的很多个项目中,都会用到你自己的某些模块,那么,把这些模块做成安装包,安装到你的开发环境里,可能是最佳选择。拙作《学习笔记:发布自己的python模块安装包》对此有详细说明。


后记

本文发表后,读者反响强烈,访问量很快超过10万人次。出版社的朋友建议我,不妨将十多年来的Python使用经验整理一下,结集出版,分享给更多需要的人。这是一个很不错的想法,我立即付诸行动。现在,这本《Python高手修炼之道》终于正式出版,并在京东网和当当网发售。读者可通过以下任一渠道购买(扫描或长按识别二维码)。


渠道一:京东自营图书

渠道二:当当自营图书

渠道三:作者签名

关注公众号“Python作业辅导员”回复“Python高手修炼之道”,即可收到如何购买签名版的说明



相关问题推荐

  • 回答 3

    换行。比如,print hello\nworld效果就是helloworld\n就是一个换行符。\是转义的意思,&#39;\n&#39;是换行,&#39;\t&#39;是tab,&#39;\\&#39;是,\ 是在编写程序中句子太长百,人为换行后加上\但print出来是一整行。...

  • 回答 42

    十种常见排序算法一般分为以下几种:(1)非线性时间比较类排序:a. 交换类排序(快速排序、冒泡排序)b. 插入类排序(简单插入排序、希尔排序)c. 选择类排序(简单选择排序、堆排序)d. 归并排序(二路归并排序、多路归并排序)(2)线性时间非比较类排序:...

  • 回答 70
    已采纳

    前景很好,中国正在产业升级,工业机器人和人工智能方面都会是强烈的热点,而且正好是在3~5年以后的时间。难度,肯定高,要求你有创新的思维能力,高数中的微积分、数列等等必须得非常好,软件编程(基础的应用最广泛的语言:C/C++)必须得很好,微电子(数字电...

  • 回答 28

    迭代器与生成器的区别:(1)生成器:生成器本质上就是一个函数,它记住了上一次返回时在函数体中的位置。对生成器函数的第二次(或第n次)调用,跳转到函数上一次挂起的位置。而且记录了程序执行的上下文。生成器不仅记住了它的数据状态,生成器还记住了程序...

  • 回答 9

    python中title( )属于python中字符串函数,返回’标题化‘的字符串,就是单词的开头为大写,其余为小写

  • 回答 6

    第一种解释:代码中的cnt是count的简称,一种电脑计算机内部的数学函数的名字,在Excel办公软件中计算参数列表中的数字项的个数;在数据库( sq| server或者access )中可以用来统计符合条件的数据条数。函数COUNT在计数时,将把数值型的数字计算进去;但是...

  • 回答 1

    head是方法,所以需要取小括号,即dataset.head()显示的则是前5行。data[:, :-1]和data[:, -1]。另外,如果想通过位置取数据,请使用iloc,即dataset.iloc[:, :-1]和dataset.iloc[:, -1],前者表示的是取所有行,但不包括最后一列的数据,结果是个DataFrame。...

  • Python入门简单吗2021-09-23 13:21
    回答 45

    挺简单的,其实课程内容没有我们想象的那么难、像我之前同学,完全零基础,培训了半年,直接出来就工作了,人家还在北京大公司上班,一个月15k,实力老厉害了

  • 回答 4

    Python针对众多的类型,提供了众多的内建函数来处理(内建是相对于导入import来说的,后面学习到包package时,将会介绍),这些内建函数功用在于其往往可对多种类型对象进行类似的操作,即多种类型对象的共有的操作;如果某种操作只对特殊的某一类对象可行,Pyt...

  • 回答 8

     相当于 ... 这里不是注释

  • 回答 4

    还有FIXME

  • 回答 3

    python的两个库:xlrd和xlutils。 xlrd打开excel,但是打开的excel并不能直接写入数据,需要用xlutils主要是复制一份出来,实现后续的写入功能。

  • 回答 8

    单行注释:Python中的单行注释一般是以#开头的,#右边的文字都会被当做解释说明的内容,不会被当做执行的程序。为了保证代码的可读性,一般会在#后面加一两个空格然后在编写解释内容。示例:#  单行注释print(hello world)注释可以放在代码上面也可以放在代...

  • 回答 2

    主要是按行读取,然后就是写出判断逻辑来勘测行是否为注视行,空行,编码行其他的:import linecachefile=open(&#39;3_2.txt&#39;,&#39;r&#39;)linecount=len(file.readlines())linecache.getline(&#39;3_2.txt&#39;,linecount)这样做的过程中发现一个问题,...

  • 回答 4

    或许是里面有没被注释的代码

  • 回答 26

    自学的话要看个人情况,可以先在B站找一下视频看一下

没有解决我的问题,去提问