• 关于 在python 的搜索结果

回答

Linux默认是已经安装好了Python程序 目前来说,大多数的Linux发行版是安装了两个版本的Python程序 一个是Python 2.x 一个是Python 3.x 一些系统自带的程序文件需要Python 2的支持,另外Python 3又是大势所趋 所以,我们最好不要动系统的Python版本 需要使用哪个版本直接声明就可以了 工具/原料Python程序方法/步骤我们在Linux系统上打开终端输入python会弹出Python 2的版本和解释器输入python3会弹出Python 3的版本和解释器所以我们一般情况下,运行python 2的程序就输入命令python 程序文件运行python 3的程序输入命令python3 程序文件如何在Linux上使用Python这里我们默认使用版本为Python 3在终端输入命令Python3弹出Python的解释器以>>>开头我们可以在上面输入Python程序它会直接输出结果比如:我们这里输入32+46,输出结果为78输入print('hello python'),输出结果hello python注意:当我们运行.py文件时,文件里的32+46是不会直接打印出来的必须加打印命令print(32+46)如何在Linux上使用Python我们退出python3解释器的快捷键不是Ctrl+C而是Ctrl+Z如何在Linux上使用Python新建文本文件保存名为:hello.py内容: !/usr/bin/python3 print("Hello, World!");第一行是指定解释的位置使用哪一个python版本第二行使我们的Python程序如何在Linux上使用Python执行了这个程序之前我们需要给予他可执行权限没有可执行权限其实也是可以执行的但是必须得是完整路径如何在Linux上使用Python直接在终端./hello.py 就可以运行出正确的结果也可以加上python3命令python3 /home/linuxmint/下载/hello.py注意:第一个命令在没有加可执行权限之前是不可以直接运行的如何在Linux上使用Python最后推荐两个学Python3的网站第一个是廖雪峰的官方网站,里面的Python教程也写得比较好第二个是RUNOOB,里面有很多的学习资源如何在Linux上使用Python如何在Linux上使用Python

xuning715 2019-12-02 01:10:36 0 浏览量 回答数 0

问题

【精品问答】python五十问第一期

问问小秘 2019-12-01 21:51:26 977 浏览量 回答数 1

问题

【精品问答】python百大常见问题与答案详解

祖安文状元 2020-02-24 17:56:41 363 浏览量 回答数 1

新用户福利专场,云服务器ECS低至96.9元/年

新用户福利专场,云服务器ECS低至96.9元/年

问题

【精品问答】Python3 实例80问(附源码解析)

珍宝珠 2020-02-17 13:11:47 442 浏览量 回答数 2

回答

linux下 如果没有pip则需要安装pip python2安装pipsudo apt install python-pip如果是python3,则如下:sudo apt install python3-pip此时python2和python3同时有pip, 使用pip时如下: python2:python2 -m pip install XXXpython3:python3 -m pip install XXX同上,对于windows下,如果没有pip则要先安装,相对linux麻烦那么一小丢丢~ 到官网下载python2安装pippython2 setup.py install现在安装python3的pip 注意!!!一定不要直接在此目录下执行python3 setup.py install,否则你会哭的。唉,笔者为了写这篇文章查看一下是否可以如此操作,结果哭得稀里哗啦的,可谓尽职尽责了。 由于pip是兼容python2和python3的,当用python3安装的时候,一定要确定在终端输入python3出来的是python3,没有则要在python3安装目录下的script文件下将python.exe改为python3.exe(当然要设置此为环境变量,这个内容网上有) cmd进入python3的目录后python3 setup.py install此时安装完毕输入pip3 -V,结果就是python3的pip,直接输入pip则是python2的pip,当然这个可以不理会,总之以后安装其他东西,要分开,以camb为例 python2python2 -m pip install cambpython3 -m pip install camb当然由于pip,pip3分别已经是python2和python3的了,所以也可以pip install camb #python2pip3 install camb #python3

世事皆空 2019-12-02 01:09:33 0 浏览量 回答数 0

回答

方法一.使用python的解释器1安装python一般都会有一个交互式解释器Python如何运行一个python程序Python如何运行一个python程序2我们可以在这里直接写入运行Python如何运行一个python程序3但如果我们将其关闭,刚才写的代码就会丢失。此时,我们新建一个文本文档,写入print 'hello world',然后将文件名改写为:hello.py。注意,后缀名是py,你的电脑要显示后缀名才可以看见Python如何运行一个python程序Python如何运行一个python程序4然后,我们打开解释器,通过file->open打开刚才写的pyPython如何运行一个python程序5打开后会显示如下框框,就是我们刚才写的代码Python如何运行一个python程序6此时,可以点击Run->run module,或者直接按F5,运行代码,如下图所示,运行成功,并打印结果Python如何运行一个python程序END二.通过windows命令行运行1如下图所示,有一个hello.py的文件Python如何运行一个python程序2我们直接在上面的文件地址栏输入cmd,敲入回车Python如何运行一个python程序3可以看到,直接就定位到对应的目录下Python如何运行一个python程序4我们输入python hello.py,可以运行程序Python如何运行一个python程序5当然,也可以直接运行hello.pyPython如何运行一个python程序6如果你的电脑无法执行运行,可以在代码的第一行加入:#!usr/bin/python试试END三.双击运行可以直接双击运行,但是这样窗口会一闪而过,怎么办呢?加入如下代码:raw_input('press ')Python如何运行一个python程序3此时,我们再直接双击程序,发现cmd框并没有消失,此时你按下回车键,框框才会消失

xuning715 2019-12-02 01:10:17 0 浏览量 回答数 0

回答

因为Python是跨平台的,它可以运行在Windows、Mac和各种Linux/Unix系统上。在Windows上写Python程序,放到Linux上也是能够运行的。 要开始学习Python编程,首先就得把Python安装到你的电脑里。安装后,你会得到Python解释器(就是负责运行Python程序的),一个命令行交互环境,还有一个简单的集成开发环境。 2.x还是3.x 目前,Python有两个版本,一个是2.x版,一个是3.x版,这两个版本是不兼容的,因为现在Python正在朝着3.x版本进化,在进化过程中,大量的针对2.x版本的代码要修改后才能运行,所以,目前有许多第三方库还暂时无法在3.x上使用。 为了保证你的程序能用到大量的第三方库,我们的教程仍以2.x版本为基础,确切地说,是2.7版本。请确保你的电脑上安装的Python版本是2.7.x,这样,你才能无痛学习这个教程。 在Mac上安装Python 如果你正在使用Mac,系统是OS X 10.8或者最新的10.9 Mavericks,恭喜你,系统自带了Python 2.7。如果你的系统版本低于10.8,请自行备份系统并免费升级到最新的10.9,就可以获得Python 2.7。 查看系统版本的办法是点击左上角的苹果图标,选择“关于本机”: osx-10.9 在Linux上安装Python 如果你正在使用Linux,那我可以假定你有Linux系统管理经验,自行安装Python 2.7应该没有问题,否则,请换回Windows系统。 对于大量的目前仍在使用Windows的同学,如果短期内没有打算换Mac,就可以继续阅读以下内容。 在Windows上安装Python 首先,从Python的官方网站python.org下载最新的2.7版本,网速慢的同学请移步国内镜像。 然后,运行下载的MSI安装包,在选择安装组件的一步时,勾上所有的组件: install-python-windows 特别要注意选上pip和Add python.exe to Path,然后一路点“Next”即可完成安装。 默认会安装到C:Python27目录下,然后打开命令提示符窗口,敲入python后,会出现两种情况: 情况一: python-command 看到上面的画面,就说明Python安装成功! 你看到提示符>>>就表示我们已经在Python交互式环境中了,可以输入任何Python代码,回车后会立刻得到执行结果。现在,输入exit()并回车,就可以退出Python交互式环境(直接关掉命令行窗口也可以!)。 情况二:得到一个错误: ‘python’不是内部或外部命令,也不是可运行的程序或批处理文件。这是因为Windows会根据一个Path的环境变量设定的路径去查找python.exe,如果没找到,就会报错。如果在安装时漏掉了勾选Add python.exe to Path,那就要手动把python.exe所在的路径C:Python27添加到Path中。 如果你不知道怎么修改环境变量,建议把Python安装程序重新运行一遍,记得勾上Add python.exe to Path。 小结 学会如何把Python安装到计算机中,并且熟练打开和退出Python交互式环境

xuning715 2019-12-02 01:10:15 0 浏览量 回答数 0

回答

许多Python初学者都会问:我应该学习哪个版本的Python。对于这个问题,我的回答通常是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用那个版本。等学得差不多了,再来研究不同版本之间的差别”。 许多Python初学者都会问:我应该学习哪个版本的Python。对于这个问题,我的回答通常是“先选择一个最适合你的Python教程,教程中使用哪个版本的Python,你就用那个版本。等学得差不多了,再来研究不同版本之间的差别”。但如果想要用Python开发一个新项目,那么该如何选择Python版本呢?我可以负责任的说,大部分Python库都同时支持Python 2.7.x和3.x版本的,所以不论选择哪个版本都是可以的。但为了在使用Python时避开某些版本中一些常见的陷阱,或需要移植某个Python项目时,依然有必要了解一下Python两个常见版本之间的主要区别。__future__模块Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python 2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python 3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。from future import division 下表列出了__future__中其他可导入的特性:特性 可选版本 强制版本 效果nested_scopes 2.1.0b1 2.2 PEP 227:Statically Nested Scopesgenerators 2.2.0a1 2.3 PEP 255:Simple Generatorsdivision 2.2.0a2 3.0 PEP 238:Changing the Division Operatorabsolute_import 2.5.0a1 3.0 PEP 328:Imports: Multi-Line and Absolute/Relativewith_statement 2.5.0a1 2.6 PEP 343:The “with” Statementprint_function 2.6.0a2 3.0 PEP 3105:Make print a functionunicode_literals 2.6.0a2 3.0 PEP 3112:Bytes literals in Python 3000(来源: https://docs.python.org/2/library/future.html)示例:from platform import python_version print函数虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。Python 2print 'Python', python_version() print 'Hello, World!' print('Hello, World!') print "text", ; print 'print more text on the same line' Python 2.7.6 Hello, World! Hello, World! text print more text on the same line Python 3print('Python', python_version()) print('Hello, World!') print("some text,", end="") print(' print more text on the same line') Python 3.4.1 Hello, World! some text, print more text on the same line print 'Hello, World!' File "", line 1 print 'Hello, World!' ^ SyntaxError: invalid syntax 注意:在Python中,带不带括号输出”Hello World”都很正常。但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。print 'Python', python_version() print('a', 'b') print 'a', 'b' Python 2.7.7 ('a', 'b') a b 整数除法由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from future import division来使用Python 3的除法)。Python 2print 'Python', python_version() print '3 / 2 =', 3 / 2 print '3 // 2 =', 3 // 2 print '3 / 2.0 =', 3 / 2.0 print '3 // 2.0 =', 3 // 2.0 Python 2.7.6 3 / 2 = 1 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0 Python 3print('Python', python_version()) print('3 / 2 =', 3 / 2) print('3 // 2 =', 3 // 2) print('3 / 2.0 =', 3 / 2.0) print('3 // 2.0 =', 3 // 2.0) Python 3.4.1 3 / 2 = 1.5 3 // 2 = 1 3 / 2.0 = 1.5 3 // 2.0 = 1.0 UnicodePython 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。Python 2print 'Python', python_version() Python 2.7.6 print type(unicode('this is like a python3 str type')) print type(b'byte type does not exist') print 'they are really' + b' the same' they are really the same print type(bytearray(b'bytearray oddly does exist though')) Python 3print('Python', python_version()) print('strings are now utf-8 u03BCnicou0394é!') Python 3.4.1 strings are now utf-8 μnicoΔé! print('Python', python_version(), end="") print(' has', type(b' bytes for storing data')) Python 3.4.1 has print('and Python', python_version(), end="") print(' also has', type(bytearray(b'bytearrays'))) and Python 3.4.1 also has 'note that we cannot add a string' + b'bytes for data' TypeError Traceback (most recent call last) in () ----> 1 'note that we cannot add a string' + b'bytes for data' TypeError: Can't convert 'bytes' object to str implicitly xrange在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。import timeit n = 10000 def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass Python 2print 'Python', python_version() print 'ntiming range()' %timeit test_range(n) print 'nntiming xrange()' %timeit test_xrange(n) Python 2.7.6 timing range() 1000 loops, best of 3: 433 µs per loop timing xrange() 1000 loops, best of 3: 350 µs per loop Python 3print('Python', python_version()) print('ntiming range()') %timeit test_range(n) Python 3.4.1 timing range() 1000 loops, best of 3: 520 µs per loop print(xrange(10)) NameError Traceback (most recent call last) in () ----> 1 print(xrange(10)) NameError: name 'xrange' is not defined Python 3中的range对象中的__contains__方法另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的“查找”速度。x = 10000000 def val_in_range(x, val): return val in range(x) def val_in_xrange(x, val): return val in xrange(x) print('Python', python_version()) assert(val_in_range(x, x/2) == True) assert(val_in_range(x, x//2) == True) %timeit val_in_range(x, x/2) %timeit val_in_range(x, x//2) Python 3.4.1 1 loops, best of 3: 742 ms per loop 1000000 loops, best of 3: 1.19 µs per loop 根据上面的timeit的结果,查找整数比查找浮点数要快大约6万倍。但由于Python 2.x中的range或xrange没有__contains__方法,所以在Python 2中的整数和浮点数的查找速度差别不大。print 'Python', python_version() assert(val_in_xrange(x, x/2.0) == True) assert(val_in_xrange(x, x/2) == True) assert(val_in_range(x, x/2) == True) assert(val_in_range(x, x//2) == True) %timeit val_in_xrange(x, x/2.0) %timeit val_in_xrange(x, x/2) %timeit val_in_range(x, x/2.0) %timeit val_in_range(x, x/2) Python 2.7.7 1 loops, best of 3: 285 ms per loop 1 loops, best of 3: 179 ms per loop 1 loops, best of 3: 658 ms per loop 1 loops, best of 3: 556 ms per loop 下面的代码证明了Python 2.x中没有__contain__方法:print('Python', python_version()) range.__contains__ Python 3.4.1 print('Python', python_version()) range.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in () 1 print 'Python', python_version() ----> 2 range.__contains__ AttributeError: 'builtin_function_or_method' object has no attribute '__contains__' print('Python', python_version()) xrange.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in () 1 print 'Python', python_version() ----> 2 xrange.__contains__ AttributeError: type object 'xrange' has no attribute '__contains__' 关于Python 2中xrange()与Python 3中range()之间的速度差异的一点说明:有读者指出了Python 3中的range()和Python 2中xrange()执行速度有差异。由于这两者的实现方式相同,因此理论上执行速度应该也是相同的。这里的速度差别仅仅是因为Python 3的总体速度就比Python 2慢。def test_while(): i = 0 while i < 20000: i += 1 return print('Python', python_version()) %timeit test_while() Python 3.4.1 %timeit test_while() 100 loops, best of 3: 2.68 ms per loop print 'Python', python_version() %timeit test_while() Python 2.7.6 1000 loops, best of 3: 1.72 ms per loop 触发异常Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError):Python 2print 'Python', python_version()Python 2.7.6 raise IOError, "file error" IOError Traceback (most recent call last) in ()----> 1 raise IOError, "file error" IOError: file error raise IOError("file error") IOError Traceback (most recent call last) in ()----> 1 raise IOError("file error") IOError: file errorPython 3print('Python', python_version())Python 3.4.1raise IOError, "file error"File "", line 1raise IOError, "file error"^SyntaxError: invalid syntaxThe proper way to raise an exception in Python 3:print('Python', python_version())raise IOError("file error")Python 3.4.1 OSError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 raise IOError("file error") OSError: file error异常处理Python 3中的异常处理也发生了一点变化。在Python 3中必须使用“as”关键字。Python 2print 'Python', python_version()try: let_us_cause_a_NameError except NameError, err: print err, '--> our error message' Python 2.7.6name 'let_us_cause_a_NameError' is not defined --> our error messagePython 3print('Python', python_version())try: let_us_cause_a_NameError except NameError as err: print(err, '--> our error message') Python 3.4.1name 'let_us_cause_a_NameError' is not defined --> our error messagenext()函数和.next()方法由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。Python 2print 'Python', python_version()my_generator = (letter for letter in 'abcdefg')next(my_generator)my_generator.next()Python 2.7.6'b'Python 3print('Python', python_version())my_generator = (letter for letter in 'abcdefg')next(my_generator)Python 3.4.1'a' my_generator.next() AttributeError Traceback (most recent call last) in ()----> 1 my_generator.next() AttributeError: 'generator' object has no attribute 'next'For循环变量与全局命名空间泄漏好消息是:在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了!这是Python 3.x中做的一个改动,在“What’s New In Python 3.0”中有如下描述:“列表推导不再支持[… for var in item1, item2, …]这样的语法,使用[… for var in (item1, item2, …)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。”Python 2print 'Python', python_version() i = 1print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', iPython 2.7.6before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 4Python 3print('Python', python_version()) i = 1print('before: i =', i) print('comprehension:', [i for i in range(5)]) print('after: i =', i)Python 3.4.1before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 1比较无序类型Python 3中另一个优秀的改动是,如果我们试图比较无序类型,会触发一个TypeError。Python 2print 'Python', python_version()print "[1, 2] > 'foo' = ", [1, 2] > 'foo'print "(1, 2) > 'foo' = ", (1, 2) > 'foo'print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2)Python 2.7.6[1, 2] > 'foo' = False(1, 2) > 'foo' = True[1, 2] > (1, 2) = FalsePython 3print('Python', python_version())print("[1, 2] > 'foo' = ", [1, 2] > 'foo')print("(1, 2) > 'foo' = ", (1, 2) > 'foo')print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2)) Python 3.4.1 TypeError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))TypeError: unorderable types: list() > str()通过input()解析用户的输入幸运的是,Python 3改进了input()函数,这样该函数就会总是将用户的输入存储为str对象。在Python 2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。Python 2Python 2.7.6[GCC 4.0.1 (Apple Inc. build 5493)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) my_input = raw_input('enter a number: ') enter a number: 123 type(my_input) Python 3Python 3.4.1[GCC 4.2.1 (Apple Inc. build 5577)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) 返回可迭代对象,而不是列表在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。Python 2print 'Python', python_version() print range(3)print type(range(3))Python 2.7.6[0, 1, 2]Python 3print('Python', python_version())print(range(3))print(type(range(3)))print(list(range(3)))Python 3.4.1range(0, 3)[0, 1, 2]下面列出了Python 3中其他不再返回列表的常用函数和方法:zip()map()filter()字典的.key()方法字典的.value()方法字典的.item()方法 __future__模块 [回到目录] Python 3.x引入了一些与Python 2不兼容的关键字和特性,在Python 2中,可以通过内置的__future__模块导入这些新内容。如果你希望在Python 2环境下写的代码也可以在Python 3.x中运行,那么建议使用__future__模块。例如,如果希望在Python 2中拥有Python 3.x的整数除法行为,可以通过下面的语句导入相应的模块。 ? 1 from future import division 下表列出了__future__中其他可导入的特性: 特性 可选版本 强制版本 效果 nested_scopes 2.1.0b1 2.2 PEP 227:Statically Nested Scopes generators 2.2.0a1 2.3 PEP 255:Simple Generators division 2.2.0a2 3.0 PEP 238:Changing the Division Operator absolute_import 2.5.0a1 3.0 PEP 328:Imports: Multi-Line and Absolute/Relative with_statement 2.5.0a1 2.6 PEP 343:The “with” Statement print_function 2.6.0a2 3.0 PEP 3105:Make print a function unicode_literals 2.6.0a2 3.0 PEP 3112:Bytes literals in Python 3000 (来源: https://docs.python.org/2/library/future.html) 示例: ? 1 from platform import python_version print函数 [回到目录] 虽然print语法是Python 3中一个很小的改动,且应该已经广为人知,但依然值得提一下:Python 2中的print语句被Python 3中的print()函数取代,这意味着在Python 3中必须用括号将需要输出的对象括起来。 在Python 2中使用额外的括号也是可以的。但反过来在Python 3中想以Python2的形式不带括号调用print函数时,会触发SyntaxError。 Python 2 ? 1234 print 'Python', python_version()print 'Hello, World!'print('Hello, World!')print "text", ; print 'print more text on the same line' ? 1234 Python 2.7.6Hello, World!Hello, World!text print more text on the same line Python 3 ? 12345 print('Python', python_version())print('Hello, World!') print("some text,", end="") print(' print more text on the same line') ? 123 Python 3.4.1Hello, World!some text, print more text on the same line ? 1 print 'Hello, World!' ? File "", line 1print 'Hello, World!'^SyntaxError: invalid syntax 注意: 在Python中,带不带括号输出”Hello World”都很正常。但如果在圆括号中同时输出多个对象时,就会创建一个元组,这是因为在Python 2中,print是一个语句,而不是函数调用。 ? 123 print 'Python', python_version()print('a', 'b')print 'a', 'b' Python 2.7.7('a', 'b')a b 整数除法 [回到目录] 由于人们常常会忽视Python 3在整数除法上的改动(写错了也不会触发Syntax Error),所以在移植代码或在Python 2中执行Python 3的代码时,需要特别注意这个改动。 所以,我还是会在Python 3的脚本中尝试用float(3)/2或 3/2.0代替3/2,以此来避免代码在Python 2环境下可能导致的错误(或与之相反,在Python 2脚本中用from future import division来使用Python 3的除法)。 Python 2 ? 12345 print 'Python', python_version()print '3 / 2 =', 3 / 2print '3 // 2 =', 3 // 2print '3 / 2.0 =', 3 / 2.0print '3 // 2.0 =', 3 // 2.0 Python 2.7.63 / 2 = 13 // 2 = 13 / 2.0 = 1.53 // 2.0 = 1.0 Python 3 ? 12345 print('Python', python_version())print('3 / 2 =', 3 / 2)print('3 // 2 =', 3 // 2)print('3 / 2.0 =', 3 / 2.0)print('3 // 2.0 =', 3 // 2.0) Python 3.4.13 / 2 = 1.53 // 2 = 13 / 2.0 = 1.53 // 2.0 = 1.0 Unicode [回到目录] Python 2有基于ASCII的str()类型,其可通过单独的unicode()函数转成unicode类型,但没有byte类型。 而在Python 3中,终于有了Unicode(utf-8)字符串,以及两个字节类:bytes和bytearrays。 Python 2 ? 1 print 'Python', python_version() Python 2.7.6 ? 1 print type(unicode('this is like a python3 str type')) ? 1 print type(b'byte type does not exist') ? 1 print 'they are really' + b' the same' they are really the same ? 1 print type(bytearray(b'bytearray oddly does exist though')) Python 3 ? 12 print('Python', python_version())print('strings are now utf-8 u03BCnicou0394é!') Python 3.4.1strings are now utf-8 μnicoΔé! ? 12 print('Python', python_version(), end="")print(' has', type(b' bytes for storing data')) Python 3.4.1 has ? 12 print('and Python', python_version(), end="")print(' also has', type(bytearray(b'bytearrays'))) and Python 3.4.1 also has ? 1 'note that we cannot add a string' + b'bytes for data' TypeError Traceback (most recent call last) in ()----> 1 'note that we cannot add a string' + b'bytes for data' TypeError: Can't convert 'bytes' object to str implicitly xrange [回到目录] 在Python 2.x中,经常会用xrange()创建一个可迭代对象,通常出现在“for循环”或“列表/集合/字典推导式”中。 这种行为与生成器非常相似(如”惰性求值“),但这里的xrange-iterable无尽的,意味着可能在这个xrange上无限迭代。 由于xrange的“惰性求知“特性,如果只需迭代一次(如for循环中),range()通常比xrange()快一些。不过不建议在多次迭代中使用range(),因为range()每次都会在内存中重新生成一个列表。 在Python 3中,range()的实现方式与xrange()函数相同,所以就不存在专用的xrange()(在Python 3中使用xrange()会触发NameError)。 ? 12345678910 import timeit n = 10000def test_range(n): return for i in range(n): pass def test_xrange(n): for i in xrange(n): pass Python 2 ? 1234567 print 'Python', python_version() print 'ntiming range()'%timeit test_range(n) print 'nntiming xrange()'%timeit test_xrange(n) Python 2.7.6 timing range()1000 loops, best of 3: 433 µs per loop timing xrange()1000 loops, best of 3: 350 µs per loop Python 3 ? 1234 print('Python', python_version()) print('ntiming range()')%timeit test_range(n) Python 3.4.1 timing range()1000 loops, best of 3: 520 µs per loop ? 1 print(xrange(10)) NameError Traceback (most recent call last)in ()----> 1 print(xrange(10)) NameError: name 'xrange' is not defined Python 3中的range对象中的__contains__方法 另一个值得一提的是,在Python 3.x中,range有了一个新的__contains__方法。__contains__方法可以有效的加快Python 3.x中整数和布尔型的“查找”速度。 ? 123456789101112 x = 10000000def val_in_range(x, val): return val in range(x) def val_in_xrange(x, val): return val in xrange(x) print('Python', python_version())assert(val_in_range(x, x/2) == True)assert(val_in_range(x, x//2) == True)%timeit val_in_range(x, x/2)%timeit val_in_range(x, x//2) Python 3.4.11 loops, best of 3: 742 ms per loop1000000 loops, best of 3: 1.19 µs per loop 根据上面的timeit的结果,查找整数比查找浮点数要快大约6万倍。但由于Python 2.x中的range或xrange没有__contains__方法,所以在Python 2中的整数和浮点数的查找速度差别不大。 ? 12345678910 print 'Python', python_version() assert(val_in_xrange(x, x/2.0) == True)assert(val_in_xrange(x, x/2) == True)assert(val_in_range(x, x/2) == True)assert(val_in_range(x, x//2) == True)%timeit val_in_xrange(x, x/2.0)%timeit val_in_xrange(x, x/2)%timeit val_in_range(x, x/2.0)%timeit val_in_range(x, x/2) Python 2.7.71 loops, best of 3: 285 ms per loop1 loops, best of 3: 179 ms per loop1 loops, best of 3: 658 ms per loop1 loops, best of 3: 556 ms per loop 下面的代码证明了Python 2.x中没有__contain__方法: ? 12 print('Python', python_version())range.__contains__ Python 3.4.1 ? 12 print('Python', python_version())range.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last) in ()1 print 'Python', python_version()----> 2 range.__contains__ AttributeError: 'builtin_function_or_method' object has no attribute '__contains__' ? 12 print('Python', python_version())xrange.__contains__ Python 2.7.7 AttributeError Traceback (most recent call last)in ()1 print 'Python', python_version()----> 2 xrange.__contains__ AttributeError: type object 'xrange' has no attribute '__contains__' 关于Python 2中xrange()与Python 3中range()之间的速度差异的一点说明: 有读者指出了Python 3中的range()和Python 2中xrange()执行速度有差异。由于这两者的实现方式相同,因此理论上执行速度应该也是相同的。这里的速度差别仅仅是因为Python 3的总体速度就比Python 2慢。 ? 12345 def test_while(): i = 0 while i < 20000: i += 1 return ? 12 print('Python', python_version())%timeit test_while() Python 3.4.1%timeit test_while()100 loops, best of 3: 2.68 ms per loop ? 12 print 'Python', python_version()%timeit test_while() Python 2.7.61000 loops, best of 3: 1.72 ms per loop 触发异常 [回到目录] Python 2支持新旧两种异常触发语法,而Python 3只接受带括号的的语法(不然会触发SyntaxError): Python 2 ? 1 print 'Python', python_version() Python 2.7.6 ? 1 raise IOError, "file error" IOError Traceback (most recent call last) in ()----> 1 raise IOError, "file error" IOError: file error ? 1 raise IOError("file error") IOError Traceback (most recent call last) in ()----> 1 raise IOError("file error") IOError: file error Python 3 ? 1 print('Python', python_version()) Python 3.4.1 ? 1 raise IOError, "file error" File "", line 1raise IOError, "file error"^SyntaxError: invalid syntaxThe proper way to raise an exception in Python 3: ? 12 print('Python', python_version())raise IOError("file error") Python 3.4.1 OSError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 raise IOError("file error") OSError: file error 异常处理 [回到目录] Python 3中的异常处理也发生了一点变化。在Python 3中必须使用“as”关键字。 Python 2 ? 12345 print 'Python', python_version()try: let_us_cause_a_NameErrorexcept NameError, err: print err, '--> our error message' Python 2.7.6name 'let_us_cause_a_NameError' is not defined --> our error message Python 3 ? 12345 print('Python', python_version())try: let_us_cause_a_NameErrorexcept NameError as err: print(err, '--> our error message') Python 3.4.1name 'let_us_cause_a_NameError' is not defined --> our error message next()函数和.next()方法 [回到目录] 由于会经常用到next()(.next())函数(方法),所以还要提到另一个语法改动(实现方面也做了改动):在Python 2.7.5中,函数形式和方法形式都可以使用,而在Python 3中,只能使用next()函数(试图调用.next()方法会触发AttributeError)。 Python 2 ? 1234 print 'Python', python_version()my_generator = (letter for letter in 'abcdefg')next(my_generator)my_generator.next() Python 2.7.6'b' Python 3 ? 123 print('Python', python_version())my_generator = (letter for letter in 'abcdefg')next(my_generator) Python 3.4.1'a' ? 1 my_generator.next() AttributeError Traceback (most recent call last) in ()----> 1 my_generator.next() AttributeError: 'generator' object has no attribute 'next' For循环变量与全局命名空间泄漏 [回到目录] 好消息是:在Python 3.x中,for循环中的变量不再会泄漏到全局命名空间中了! 这是Python 3.x中做的一个改动,在“What's New In Python 3.0”中有如下描述: “列表推导不再支持[... for var in item1, item2, ...]这样的语法,使用[... for var in (item1, item2, ...)]代替。还要注意列表推导有不同的语义:现在列表推导更接近list()构造器中的生成器表达式这样的语法糖,特别要注意的是,循环控制变量不会再泄漏到循环周围的空间中了。” Python 2 ? 12345678 print 'Python', python_version() i = 1print 'before: i =', i print 'comprehension: ', [i for i in range(5)] print 'after: i =', i Python 2.7.6before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 4 Python 3 ? 12345678 print('Python', python_version()) i = 1print('before: i =', i) print('comprehension:', [i for i in range(5)]) print('after: i =', i) Python 3.4.1before: i = 1comprehension: [0, 1, 2, 3, 4]after: i = 1 比较无序类型 [回到目录] Python 3中另一个优秀的改动是,如果我们试图比较无序类型,会触发一个TypeError。 Python 2 ? 1234 print 'Python', python_version()print "[1, 2] > 'foo' = ", [1, 2] > 'foo'print "(1, 2) > 'foo' = ", (1, 2) > 'foo'print "[1, 2] > (1, 2) = ", [1, 2] > (1, 2) Python 2.7.6[1, 2] > 'foo' = False(1, 2) > 'foo' = True[1, 2] > (1, 2) = False Python 3 ? 1234 print('Python', python_version())print("[1, 2] > 'foo' = ", [1, 2] > 'foo')print("(1, 2) > 'foo' = ", (1, 2) > 'foo')print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2)) Python 3.4.1 TypeError Traceback (most recent call last) in ()1 print('Python', python_version())----> 2 print("[1, 2] > 'foo' = ", [1, 2] > 'foo')3 print("(1, 2) > 'foo' = ", (1, 2) > 'foo')4 print("[1, 2] > (1, 2) = ", [1, 2] > (1, 2))TypeError: unorderable types: list() > str() 通过input()解析用户的输入 [回到目录] 幸运的是,Python 3改进了input()函数,这样该函数就会总是将用户的输入存储为str对象。在Python 2中,为了避免读取非字符串类型会发生的一些危险行为,不得不使用raw_input()代替input()。 Python 2 ? 1234567891011121314151617 Python 2.7.6[GCC 4.0.1 (Apple Inc. build 5493)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) my_input = raw_input('enter a number: ') enter a number: 123 type(my_input) Python 3 ? 12345678 Python 3.4.1[GCC 4.2.1 (Apple Inc. build 5577)] on darwinType "help", "copyright", "credits" or "license" for more information. my_input = input('enter a number: ') enter a number: 123 type(my_input) 返回可迭代对象,而不是列表 [回到目录] 在xrange一节中可以看到,某些函数和方法在Python中返回的是可迭代对象,而不像在Python 2中返回列表。 由于通常对这些对象只遍历一次,所以这种方式会节省很多内存。然而,如果通过生成器来多次迭代这些对象,效率就不高了。 此时我们的确需要列表对象,可以通过list()函数简单的将可迭代对象转成列表。 Python 2 ? 1234 print 'Python', python_version() print range(3)print type(range(3)) Python 2.7.6[0, 1, 2] Python 3 ? 1234 print('Python', python_version())print(range(3))print(type(range(3)))print(list(range(3))) Python 3.4.1range(0, 3)[0, 1, 2] 下面列出了Python 3中其他不再返回列表的常用函数和方法:•zip()•map()•filter()•字典的.key()方法•字典的.value()方法•字典的.item()方法 更多关于Python 2和Python 3的文章 [回到目录] 下面列出了其他一些可以进一步了解Python 2和Python 3的优秀文章, //迁移到 Python 3•Should I use Python 2 or Python 3 for my development activity?•What's New In Python 3.0•Porting to Python 3•Porting Python 2 Code to Python 3•How keep Python 3 moving forward // 对Python 3的褒与贬•10 awesome features of Python that you can't use because you refuse to upgrade to Python 3•关于你不想知道的所有Python3 unicode特性•Python 3 正在毁灭 Python•Python 3 能振兴 Python•Python 3 is fine

xuning715 2019-12-02 01:10:35 0 浏览量 回答数 0

回答

很多时候你可能希望你开发的程序能够同时兼容Python2+和Python3+。 试想你有一个非常出名的Python模块被很多开发者使用着,但并不是所有人都只使用Python2或者Python3。这时候你有两个办法。第一个办法是开发两个模块,针对Python2一个,针对Python3一个。还有一个办法就是调整你现在的代码使其同时兼容Python2和Python3。 本节中,我将介绍一些技巧,让你的脚本同时兼容Python2和Python3。 Future模块导入 第一种也是最重要的方法,就是导入__future__模块。它可以帮你在Python2中导入Python3的功能。这有一组例子: 上下文管理器是Python2.6+引入的新特性,如果你想在Python2.5中使用它可以这样做: from __future__ import with_statement 在Python3中print已经变为一个函数。如果你想在Python2中使用它可以通过__future__导入: print # Output: from __future__ import print_function print(print) # Output: <built-in function print> 模块重命名 首先,告诉我你是如何在你的脚本中导入模块的。大多时候我们会这样做: import foo # or from foo import bar 你知道么,其实你也可以这样做: import foo as foo 这样做可以起到和上面代码同样的功能,但最重要的是它能让你的脚本同时兼容Python2和Python3。现在我们来看下面的代码: try: import urllib.request as urllib_request # for Python 3 except ImportError: import urllib2 as urllib_request # for Python 2 让我来稍微解释一下上面的代码。 我们将模块导入代码包装在try/except语句中。我们是这样做是因为在Python 2中并没有urllib.request模块。这将引起一个ImportError异常。而在Python2中urllib.request的功能则是由urllib2提供的。所以,当我们试图在Python2中导入urllib.request模块的时候,一旦我们捕获到ImportError我们将通过导入urllib2模块来代替它。 最后,你要了解as关键字的作用。它将导入的模块映射到urllib.request,所以我们通过urllib_request这个别名就可以使用urllib2中的所有类和方法了。 过期的Python2内置功能 另一个需要了解的事情就是Python2中有12个内置功能在Python3中已经被移除了。要确保在Python2代码中不要出现这些功能来保证对Python3的兼容。这有一个强制让你放弃12内置功能的方法: from future.builtins.disabled import * 现在,只要你尝试在Python3中使用这些被遗弃的模块时,就会抛出一个NameError异常如下: from future.builtins.disabled import * apply() # Output: NameError: obsolete Python 2 builtin apply is disabled 标准库向下兼容的外部支持 有一些包在非官方的支持下为Python2提供了Python3的功能。例如,我们有: enum pip install enum34singledispatch pip install singledispatchpathlib pip install pathlib 想更多了解,在Python文档中有一个全面的指南可以帮助你让你的代码同时兼容Python2和Python3。

montos 2020-04-16 21:37:10 0 浏览量 回答数 0

问题

基础语言百问-Python

薯条酱 2019-12-01 20:12:27 56807 浏览量 回答数 30

回答

Python目前有两个版本Python2和Python3,Python2与Python3有何区别,两个版本该学习哪个呢?python3 和 python2 是不兼容的,而且差异比较大,python3是不向下兼容的,但是绝大多数组件和扩展都是基于python2的。目前实际应用中大部分暂不考虑 Python3,有的时候注意写兼容 2/3 的代码。用 Python2 为主的写新代码时要考虑以后迁移到 Python3 的可能性。据数据统计显示目前10% 使用 Python 3;20% 既使用Python 2也使用Python 3,Python 2用的更多;70% 使用Python 2。其实python是linux上最常用的软件之一,但是linux目前的版本大部分还是使用python2的,而且,在linux上依赖python2的程序更多一些,所以 Python3 要代替 python2 成为主流还需要几年的时间。如果为了找工作还是学Python 2,学会了Python 2,由Python 2转到python3也不难。

世事皆空 2019-12-02 01:07:37 0 浏览量 回答数 0

回答

很多初学者刚开始学python的时候,一定都遇到过这个问题,python的世界有2个版本,python2 和 python3 ,而且有些语法还不兼容.怎么办~~到底应该选择哪个版本来开发呢?好,今天我们就来聊聊这个话题.1.Python2和Python3的历史背景 Python语言是在20世纪90年代诞生的,算算到现在已经是25岁的大叔级的语言了(跟它同一个时代的还有一个鼎鼎大名的java是在1995发行的, 红了几十年). 但是Python真正成名比java晚了很多年,其实也主要是应用领域的时代变迁.(猜测为啥,对了大数据的出现)Python2是Python里面一个非常重要的版本,最早的版本是从2001的时候开始的,特别是从2006年开始py2.5的发布,python的功能逐渐强大起来,慢慢开始稳定下来,并且差不多1-2年左右递增一个版本,在08年左右开始慢慢的火起来了.而Python3最早是从2008开始发布,但是py3.0的版本非常不稳定,所以社区更新的很快,差不多几个月就更新一次。所以一开始的时候并没有很多人用,只到2014春暖花开的时候python3.4 deliver了才开始慢慢稳定下来.下面我们看一个数据,这是Python社区联和一些网站在2014做的一个调查,关于Python2/3,部分的结果如下: 1).97.51%用户还在写Python2的代码 2).60%的用户写Python3的代码 3).78.09%的用户更多地写Python2代码 4).77.09%的用户认可Python3目前有一些Linux里的操作系统已经默认使用Python3: 1).Arch Linux (轻量级的Linux操作系统) 2).Ubuntu 16.04 (一个桌面应用为主的Linux操作系统) 3).Fedora(Redhat桌面版本的延续)2.Python2和Python3的主要区别: 目前最新的数据是,Python有两个版本:一个是2.7.12版,一个是3.5.12版.那么Python2运行的好好的,为啥突然要出个Python3呢,其实是为了解决Python2里面一些历史问题 第一个是字符串的问题: Python 2 中文本和二进制数据是一个烂摊子,Python中的str 是代表二进制数据还是文本数据是有二义性,文字既能代表文本数据又能代表二进制数据这很麻烦,此类错误发生的时候,我们很难意识到。第二个是对Unicode的支持 由于python是在1991年2月开源发布,这意味着它早于在1991年10月发布的第一版 Unicode 标准。在接下来几年中,晚于 Unicode 标准出现的语言都选择在支持 Unicode 编码的基础上实现自己的 str 类型,这让 Python 2 处于尴尬的境地。 目前是一个python2/3共存的时代,这两个版本是不兼容的。 python2现在只是做bug的修复,新硬件和操作系统兼容的相关维护工作。不会再有新的功能加入,python2只支持到2020年. 现在Python正在朝着3版本进化,在进化过程中,大量的针对2.x版本的代码要修改后才能运行,所以目前有许多第三方库还暂时无法在3.x上使用。不过可以畅想一下,也许再过几年情况就会好很多,毕竟全世界有很多优秀的程序员正在把一些库从Py2往Py3上迁移.3.选择还是要根据自己的需求 若是企业的开发,要满足工作的需求,尤其是依赖的软件只能运行在Python2下,首选Python2.比如你的开发需要依赖大量的第三方的库(因为学Python非常大的一个原因就是因为它有成千上万的第三方包),像大量的数据分析,科学计算,还是选Python2吧.如果你是自己学习,研究的话,愿意拥抱变化,那么建议学Python3,因为它是未来的方向.结论: 编程其实主要是对编程思想的理解和经验的积累,千万不要因为纠结学Py2还是Py3而浪费大量时间。Py2和Py3里面的思想基本是相通的,招式是类似的.当你熟悉Python到一定的程序的时候,会Py2的人学Py3只需要很短的时间。所以不要再纠结细枝末节的语法差异,而耽误了宝贵的学习时间。最后说一下,原创真的不易,希望大家能够给点支持,欢迎转发转发转发,留言留言留言,重要的事情说三遍,也是对我的一点鼓励和动力. 也欢迎更多喜欢Python的同学关注微信公众号: 菜鸟学python,一起来学python吧

世事皆空 2019-12-02 01:07:50 0 浏览量 回答数 0

问题

在Debian 8 系统里安装python3

dongshan8 2019-12-01 21:07:01 6696 浏览量 回答数 1

问题

2018python技术问答集锦,希望能给喜欢python的同学一些帮助

技术小能手 2019-12-01 19:31:10 2040 浏览量 回答数 2

回答

Python 事件函数 在函数计算服务中使用 Python 编程,需要定义一个函数作为入口函数,本文介绍了Python 事件函数。 函数计算目前支持以下 Python 运行环境: Python 2.7 ( runtime = python2.7 ) Python 3.6 ( runtime = python3 ) Python HTTP 函数 本文介绍了 Python HTTP 函数,为函数设置 HTTP 触发器后,可以方便处理发来的 HTTP 请求,方便搭建 Web 应用。 Python Initializer 函数 Initializer 函数是实例的初始化函数,保证同一实例成功且仅成功执行一次。本文介绍了 Python Initializer 入口的结构和特点。 函数计算目前支持以下 Python 运行环境: Python 2.7 ( runtime = python2.7 ) Python 3.6 ( runtime = python3 ) Python 运行环境 函数计算目前支持以下 Python 运行环境: Python 2.7 ( runtime = python2.7 ) Python 3.6 ( runtime = python3 ) 本文介绍了 Python 运行环境的以下内容: 打印日志 错误处理 使用内置模块 使用自定义模块 调用外部命令

1934890530796658 2020-03-27 16:24:59 0 浏览量 回答数 0

回答

首先去python官网下载python3的源码包,网址:https://www.python.org/  进去之后点击导航栏的Downloads,也可以鼠标放到Downloads上弹出菜单选择Source code,表示源码包,这里选择最新版本3.5.1,当然下面也有很多其他历史版本,点进去之后页面下方可以看到下载链接,包括源码包、Mac OSX安装包、Windows安装包    这里选择第一个下载即可,下载的就是源码包:Python-3.5.1.tgz,下载好之后上传到linux系统,准备安装  python安装之前需要一些必要的模块,比如openssl,readline等,如果没有这些模块后来使用会出现一些问题,比如没有openssl则不支持ssl相关的功能,并且pip3在安装模块的时候会直接报错;没有readline则python交互式界面删除键和方向键都无法正常使用,至于需要什么模块在make完之后python会给出提示,通过提示进行安装即可装全, 另外感谢园友的Glory_Lion的回复;下面是需要提前预装的依赖:复制代码yum -y install zlib zlib-develyum -y install bzip2 bzip2-develyum -y install ncurses ncurses-develyum -y install readline readline-develyum -y install openssl openssl-develyum -y install openssl-staticyum -y install xz lzma xz-develyum -y install sqlite sqlite-develyum -y install gdbm gdbm-develyum -y install tk tk-develyum -y install libffi libffi-devel复制代码 安装上面这些python内置模块基本上就比较全了,如果后续有其他必要的模块,会继续补充的,接下来可以安装python了,编译过程中会自动包含这些依赖.   释放文件:tar -xvzf Python-3.5.1.tgz  进入目录:cd Python-3.5.1/  配置编译,因为上面依赖包是用yum安装而不是自己编译的,所以都是安装在系统默认目录下,因此各种选项不用加默认即可生效:./configure --prefix=/usr/python --enable-shared CFLAGS=-fPIC 补充一下:这里加上--enable-shared和-fPIC之后可以将python3的动态链接库编译出来,默认情况编译完lib下面只有python3.xm.a这样的文件,python本身可以正常使用,但是如果编译第三方库需要python接口的比如caffe等,则会报错;所以这里建议按照上面的方式配置,另外如果openssl不使用系统yum安装的,而是使用自己编译的比较新的版本可以使用--with-openssl=/usr/local/openssl这种方式指定,后面目录为openssl实际安装的目录,另外编译完还要将openssl的lib目录加入ld运行时目录中即可.   接下来编译源码:make  执行安装:make install  整个过程大约5-10分钟,安装成功之后,安装目录就在/usr/python 安装完成之后要简单做一下配置:即将python库路径添加到/etc/ld.so.conf配置中,然后执行ldconfig生效;或者添加到$LD_LIBRARY_PATH中,这样在接下来运行python3是就不会报找不到库文件的错误了.   系统中原来的python在/usr/bin/python,通过ls -l可以看到,python是一个软链接,链接到本目录下的python2.7  这里不要把这个删除,不对原来默认的环境做任何修改,只新建一个python3的软链接即可,只是需要执行python3代码时python要改成python3,或者python脚本头部解释器要改为#!/usr/bin/python3  这里建立有关的软链接如下:ln -s /usr/python/bin/python3 /usr/bin/python3ln -s /usr/python/bin/pip3 /usr/bin/pip3  这样就建立好了,以后直接执行python3命令就可以调用python3了,执行pip3可以安装需要的python3模块;另外如果仔细看python安装目录下的bin目录,实际上python3也是个软链接,链接到python3.5.1,这样多次链接也是为了多个版本的管理更加方便,  python3新版本的安装就是这些,因为我们之前安装了完整的依赖,所以下面问题不存在了,忽略即可,其中的python readline模块也早已经停止更新了,会出现崩溃问题;这里基础环境都是使用系统的依赖,更稳定.

小六码奴 2019-12-02 01:05:53 0 浏览量 回答数 0

回答

Linux下大部分系统默认自带python2.x的版本,最常见的是python2.6或python2.7版本,默认的python被系统很多程序所依赖,比如centos下的yum就是python2写的,所以默认版本不要轻易删除,否则会有一些问题,如果需要使用最新的Python3那么我们可以编译安装源码包到独立目录,这和系统默认环境之间是没有任何影响的,python3和python2两个环境并存即可  首先去python官网下载python3的源码包,网址:https://www.python.org/  进去之后点击导航栏的Downloads,也可以鼠标放到Downloads上弹出菜单选择Source code,表示源码包,这里选择最新版本3.5.1,当然下面也有很多其他历史版本,点进去之后页面下方可以看到下载链接,包括源码包、Mac OSX安装包、Windows安装包    这里选择第一个下载即可,下载的就是源码包:Python-3.5.1.tgz,下载好之后上传到linux系统,准备安装  python安装之前需要一些必要的模块,比如openssl,readline等,如果没有这些模块后来使用会出现一些问题,比如没有openssl则不支持ssl相关的功能,并且pip3在安装模块的时候会直接报错;没有readline则python交互式界面删除键和方向键都无法正常使用,至于需要什么模块在make完之后python会给出提示,通过提示进行安装即可装全, 另外感谢园友的Glory_Lion的回复;下面是需要提前预装的依赖:复制代码yum -y install zlib zlib-develyum -y install bzip2 bzip2-develyum -y install ncurses ncurses-develyum -y install readline readline-develyum -y install openssl openssl-develyum -y install openssl-staticyum -y install xz lzma xz-develyum -y install sqlite sqlite-develyum -y install gdbm gdbm-develyum -y install tk tk-devel复制代码 安装上面这些python内置模块基本上就比较全了,如果后续有其他必要的模块,会继续补充的,接下来可以安装python了,编译过程中会自动包含这些依赖.   释放文件:tar -xvzf Python-3.5.1.tgz  进入目录:cd Python-3.5.1/  配置安装目录,因为上面依赖包是用yum安装而不是自己编译的,所以都是安装在系统默认目录下,因此各种选项不用加默认即可生效:./configure --prefix=/usr/python  接下来编译源码:make  执行安装:make install  整个过程大约5-10分钟,安装成功之后,安装目录就在/usr/python  系统中原来的python在/usr/bin/python,通过ls -l可以看到,python是一个软链接,链接到本目录下的python2.7  我们可以不用把这个删除,不对原来默认的环境做任何修改,只新建一个python3的软链接即可,只是需要执行python3代码时python要改成python3,或者python脚本头部解释器要改为#!/usr/bin/python3  这里建立有关的软链接如下:ln -s /usr/python/bin/python3 /usr/bin/python3ln -s /usr/python/bin/pip3 /usr/bin/pip3  这样就建立好了,以后直接执行python3命令就可以调用python3了,执行pip3可以安装需要的python3模块;另外如果仔细看python安装目录下的bin目录,实际上python3也是个软链接,链接到python3.5.1,这样多次链接也是为了多个版本的管理更加方便,  python3新版本的安装就是这些,因为我们之前安装了完整的依赖,所以下面问题不存在了,忽略即可,其中的python readline模块也早已经停止更新了,会出现崩溃问题;这里基础环境都是使用系统的依赖,更稳定. --------------------------------------------华丽的分割线---------------------------------------------------   另外可能会遇到一个问题就是,python3交互式界面特别不好用,删除不能正常使用,必须按Ctrl+删除键才可以,上下键重复命令也无法使用,左右调整光标也无法使用,这样调试代码效率很低,原因是python3缺少readline这个依赖,默认使用pip3 install readline会提示找不到包,所以只能是手动安装了  因为readline依赖于ncurses库,如果没有这个库,编译readline的时候会提示can not find -lncurses,如果在centos环境下可以执行下面命令安装:yum -y install ncurses ncurses-devel  安装ncurses库之后,再安装readline,readline可以在pypi下载,地址:https://pypi.python.org/pypi/readline,这里一定要下载源码包,其余的只能用于python2,下载之后执行下面命令安装:tar -xvzf readline-6.2.4.1.tar.gzcd readline-6.2.4.1/python3 setup.py install  这样执行完毕就为python3安装了readline,然后再进入交互式界面所有的操作都好用了

xuning715 2019-12-02 01:10:13 0 浏览量 回答数 0

问题

删除与Brew安装位置不同的Python框架文件的最安全方法是什么

祖安文状元 2020-02-22 15:31:20 0 浏览量 回答数 1

回答

在python文件里第一行加上#! /usr/bin/python,即你的python解释器所在的目录。另外还有一种写法是#! /usr/bin/env python 编辑完成python脚本文件后为它加上可执行权限。例如你的python脚本文件叫做runit.py,那么就在shell中输入如下命令:chmod +x runit.py 之后直接在shell中输入./runit.py就可以执行你的python程序了。 当然这是在Linux下的操作,如果想在windows下直接执行Python程序,就需要使用py2exe工具将python源程序编译成exe文件了。

元芳啊 2019-12-02 01:04:31 0 浏览量 回答数 0

问题

使用cmake查找正确的Python框架

祖安文状元 2020-02-21 14:17:54 0 浏览量 回答数 1

回答

大部分python文件的头部都会写上 #!/usr/bin/python 或者 #!/usr/bin/env ,这个语句主要和运行模式有关,如果我们用普通运行模式例如(linux) : python .py 那么这个语句在此运行模式下无效。如果想让python程序像普通程序一样运行,例如:./.py (文件要有可执行权限chmod a+x *.py),这个语句就起作用了,他用来为脚本语言指定解释器,通常认为用 #!/usr/bin/env python 要比 #!/usr/bin/python 更好,因为 python 解释器有时并不安装在默认路径,例如在虚拟环境中。解释:!/usr/bin/env python这种写法在你机器上安装了多个版本的python的时候有意义,这样声明的时候,会去取你机器的 PATH 中指定的第一个 python 来执行你的脚本。如果这时候你又配置了虚拟环境的话,那么这样写可以保证脚本会使用你虚拟环境中的 python 来执行。!/usr/bin/python表示写死了就是要 /usr/bin/python 这个目录下 python 来执行你的脚本。这样写程序的可移植性就差了,如果此路径下python命令不存在就会报错。所以一般情况还是用第一种写法。

xuning715 2019-12-02 01:10:53 0 浏览量 回答数 0

问题

【python学习全家桶】263道python热门问题,阿里百位技术专家答疑解惑

管理贝贝 2019-12-01 20:07:21 7217 浏览量 回答数 2

回答

1、python脚本中经常第一句出现#!/usr/bin/env python或#!/usr/bin/python。这句话的意义下面解释: 脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它,就这么简单 !/usr/bin/python是告诉操作系统执行这个脚本的时候,调用/usr/bin下的python解释器; !/usr/bin/env python这种用法是为了防止操作系统用户没有将python装在默认的/usr/bin路径里。当系统看到这一行的时候,首先会到env设置里查找python的安装路径,再调用对应路径下的解释器程序完成操作。 !/usr/bin/python相当于写死了python路径; !/usr/bin/env python会去环境设置寻找python目录,推荐这种写法 如果你用 python xxoo.py 来运行,那么写不写都没关系,如果要用 ./xxoo.py 那么就必须加这行, 用来为脚本语言指定解释器. 通常认为用 #!/usr/bin/env python 要比 #!/usr/bin/python 更好,因为 python 解释器有时并不安装在默认路径,例如在 virtualenv 中。 当你把py文件直接赋予执行权限去执行 ./yourfile.py 的时候,给文件指定一个解释器。 而 #!/usr/bin/python 是一般默认的python解释器的路径,所以这种的就是装在默认位置的不会出问题。 但是 #!/usr/bin/envpython 则更加通用一些会去你的PATH 中寻找python 。 python脚本的两种调用方式说明: 1、./run.py.shell直接调用python脚本 2、python run.py 调用python 解释器来调用python脚本 先分别解释: 1、./run.py调用脚本的方式。shell把run.py当成一般的脚本看待,不把它当成python脚本。按这种方式调用脚本,python 脚本的第一行必须有: !/usr/bin/env python3(或#!/usr/bin/env python) 先举例子说明,在说明原因: 未加#!/usr/bin/env python3的情况: a.py: print ('a') 说明:要使用./a.py,必须使用chmod将a.py的属性改成可执行的。 chmod 755 a.py -rwxr-xr-x 1 root root 12 Nov 27 09:43 a.py 如果a.py是不可执行的,那么./a.py就会报如下错误。 -bash: ./a.py: Permissiondenied 在将a.py改为可执行后,如果使用./a.py,还是会报错。 ./a.py: line 1: syntaxerror near unexpected token `'a'' ./a.py: line 1: `print('a')' 但是,因为我系统中装了python2和python3. 所以,使用#!/usr/bin/env python3提示shell使用python3来调用脚本. a.py内容如下:--------------------------------------------------------------------------------------------------- !/usr/bin/env python3 print ('a') 执行结果为:a python3 print函数必须要加上(). 所以,如果上述的print('a')变为print 'a',显然是会报错的。 root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#./a.py File "./a.py", line 2 print 'a' ^ SyntaxError: invalidsyntax 以上就说明了,使用./run.py调用python脚本的方式,取决于你在python脚本中第一句,并且使用./run.py必须在脚本文件中写上#!/usr/bin/env python3(或类似的命令),不然都执行不了。 1、先说明一下,我的系统中是预装了python2,然后我装了python3,并且系统默认的python是python2。我装了python3并没有改变系统默认的python解释器,也不建议把系统默认的python解释器改变了,因为像scikit-learn等库很多还是基于python2.7的,你把系统默认的python改成python3会导致很多库出问题。 2、看一下/usr/bin:就知道在ubuntu中,各种软件的安装情况 lrwxrwxrwx 1 root root 9 Jun 19 2013 python -> python2.7 lrwxrwxrwx 1 root root 9 Jun 19 2013 python2 -> python2.7 -rwxr-xr-x 1 root root 2985296 Dec 19 2014 python2.7 lrwxrwxrwx 1 root root 30 Nov 26 10:08 python3 ->/opt/python3.3.2/bin/python3.3 说明: 1、python-> python2.7:系统默认的python是python2.7 2、python2-> python2.7:python2执行的是python2.7 3、python3-> /opt/python3.3.2/bin/python3.3:python3执行的是/opt/python3.3.2/bin/python3.3 现在做个试验:说明使用./run.py的方式,随着第一句#!/usr/bin/envpython3的不同,shell会调用不同的python解释器。 1、 [python] view plain copy !/usr/bin/env python3 import subprocess, sys, os, time NR_THREAD = 1 start = time.time() cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True) cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True) print ("end pre-a.py") 中断程序查看shell调用哪个python解释器: File"./run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 522, incall Traceback (most recentcall last): File "converters/pre-a.py", line36, in key = field + '-' + row[field] KeyboardInterrupt return p.wait(timeout=timeout) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1528,in wait (pid, sts) = self._try_wait(0) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1485,in _try_wait (pid, sts) = _eintr_retry_call(os.waitpid,self.pid, wait_flags) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 476, in_eintr_retry_call return func(*args) KeyboardInterrupt 很明显,使用#!/usr/bin/env python3,那么shell就调用了python3的解释器。 2、 [python] view plain copy !/usr/bin/env python2 import subprocess, sys, os, time NR_THREAD = 1 start = time.time() cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True) cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True) print ("end pre-a.py") 中断程序查看shell调用哪个python解释器: Traceback (most recentcall last): File "./run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/usr/lib/python2.7/subprocess.py",line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py",line 1291, in wait pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0) File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call return func(*args) KeyboardInterrupt 很明显,使用#!/usr/bin/env python2,那么shell就调用了python2的解释器。 3、 [python] view plain copy !/usr/bin/env python import subprocess, sys, os, time NR_THREAD = 1 start = time.time() cmd = 'converters/pre-a.py trainsample0.25.csv tr.gbdt.dense tr.gbdt.sparse' subprocess.call(cmd, shell=True) cmd = 'converters/pre-a.py testsample0.25.csv te.gbdt.dense te.gbdt.sparse' subprocess.call(cmd, shell=True) print ("endpre-a.py") 中断程序查看shell调用哪个python解释器: File"./run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/usr/lib/python2.7/subprocess.py",line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py",line 1291, in wait pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0) File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call return func(*args) KeyboardInterrupt root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last): File "converters/pre-a.py", line19, in for row incsv.DictReader(open(args['csv_path'])): File "/opt/python3.3.2/lib/python3.3/csv.py", line 118, in__next__ d = dict(zip(self.fieldnames, row)) KeyboardInterrupt 很明显,使用#!/usr/bin/env python,那么shell就调用了系统默认的python解释器,也就是python2。python -> python2.7。那么,为什么还会出现python3.3.2。那是因为程序中,subprocess.call(cmd, shell=True),开了一个子进程,使用了shell来调用pre-a.py,pre-a.py肯定是使用#!/usr/bin/envpython3 .pre-a.py脚本的内容如下: [python] view plain copy !/usr/bin/env python3 import argparse, csv, sys from common import * if len(sys.argv) == 1: sys.argv.append('-h') parser = argparse.ArgumentParser() parser.add_argument('csv_path', type=str) parser.add_argument('dense_path', type=str) parser.add_argument('sparse_path', type=str) args = vars(parser.parse_args()) 2、如果使用python run.py 的方式来调用脚本,那么脚本文件中的第一句#!/usr/bin/envpython3就会被自动略掉,不会起到任何的作用。 python2 run.py代表使用默认的python2解释器来调用脚本。 python3 run.py 代表使用默认的python3解释器来调用脚本。 python run.py 代表使用默认的python解释器来调用脚本。 python run_test.py: ^CTraceback (mostrecent call last): File "run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/usr/lib/python2.7/subprocess.py",line 493, in call return Popen(*popenargs, **kwargs).wait() File "/usr/lib/python2.7/subprocess.py",line 1291, in wait pid, sts = _eintr_retry_call(os.waitpid,self.pid, 0) File "/usr/lib/python2.7/subprocess.py",line 478, in _eintr_retry_call return func(*args) KeyboardInterrupt root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last): File "converters/pre-a.py", line22, in val = row['I{0}'.format(j)] KeyboardInterrupt 很明显,python run_test.py,使用默认的python解释器(python2)来调用脚本。 python3 run_test.py: ^CTraceback (mostrecent call last): File "run_test.py", line 10, in subprocess.call(cmd, shell=True) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 522, in call return p.wait(timeout=timeout) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1528, in wait (pid, sts) = self._try_wait(0) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 1485, in _try_wait (pid, sts) = _eintr_retry_call(os.waitpid,self.pid, wait_flags) File "/opt/python3.3.2/lib/python3.3/subprocess.py", line 476, in _eintr_retry_call return func(*args) KeyboardInterrupt root@iZ28yi4s6zwZ:/mnt/DisplayAdvertisingChallenge/Gbdt_Fm_Kaggle#Traceback (most recent call last): File "converters/pre-a.py", line19, in for row incsv.DictReader(open(args['csv_path'])): File "/opt/python3.3.2/lib/python3.3/csv.py", line 118, in next d = dict(zip(self.fieldnames, row)) KeyboardInterrupt 很明显,python3 run_test.py,使用python3解释器来调用脚本。来源:网络

51干警网 2019-12-02 01:10:47 0 浏览量 回答数 0

回答

直接输入这个命令就好了 sudo apt-get remove python2.7 代码: $ ./configure --prefix=/usr/include $ make $ sudo checkinstall 然后,python2.7文件夹出现在/usr/include/bin、/usr/include/liclude和/usr/include/lib中, 输入 代码: $ python --version python 2.6.5 但是,却出现如下提示: [text] $ sudo apt-get autoremove 正在读取软件包列表... 完成 正在分析软件包的依赖关系树 正在读取状态信息... 完成 您也许需要运行“apt-get -f install”来修正上面的错误。 下列软件包有未满足的依赖关系: command-not-found: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 computer-janitor: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 computer-janitor-gtk: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 gdebi: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 gdebi-core: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 jockey-common: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 lsb-release: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 nvidia-common: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-appindicator: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-apport: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-apt: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-aptdaemon: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-aptdaemon-gtk: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-brlapi: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-cairo: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-crypto: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-cups: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-dbus: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-egenix-mxdatetime: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-egenix-mxtools: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-farsight: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gconf: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gdbm: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-glade2: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gmenu: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gnome2: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gnomeapplet: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gnomecanvas: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gnomekeyring: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gobject: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gst0.10: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gtk2: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gtksourceview2: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-gtkspell: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-imaging: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-indicate: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-launchpad-integration: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-libxml2: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-newt: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-notify: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-openssl: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-pam: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-pkg-resources: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-problem-report: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-pycurl: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-pygoocanvas: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-pyorbit: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-rdflib: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-setuptools: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-simplejson: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-smbc: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-software-properties: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-twisted-bin: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-twisted-core: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-virtkey: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-vte: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-webkit: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-wnck: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-xapian: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 python-zope.interface: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 screen-resolution-extra: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 software-properties-gtk: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 ufw: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 update-manager: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 update-manager-core: 依赖: python (< 2.7) 但是 2.7.8-1 已经安装 ubuntu系统的很多模块、管理都依赖于python2.7,最好不要卸载。 卸载会导致系统问题,且难以修复。 来源于网络,供您参考

保持可爱mmm 2019-12-02 02:20:14 0 浏览量 回答数 0

回答

Python 简史 开发 Python 3 的想法是实现一些重大的改变,如摆脱了 Python 的遗留问题:将所有字符串都呈现为 Unicode。正如 Python 的核心开发人员之一布雷特·坎农(Brett Cannon)写道: 人们有时会忘记 Python 诞生的年代。 Guido 于 1989 年 12 月开始对 Python 进行编码,并于 1991 年 2 月首次以开源形式发布。这意味着 Python 本身早于 1991 年 10 月发布的 Unicode 标准的第一版。在随后的几年中,Unicode 标准化后创建的语言选择使用基于 Unicode 编码字符串的实现。 支持任何语言的 Unicode 和文本非常重要。 Python 是一种世界语言,不仅是支持 ASCII 覆盖的罗马字母的语言,这就是 Python 3 在处理文本时将其默认设为“ Unicode”的原因。它保证了所有 Python 3 代码都将支持世界上的每个人,无论编写该代码的开发人员是否明确为其指定 Unicode 编码。 不幸的是,该团队假设每个人都将立即进行大的切换,并使 Python 3 向后不兼容,并将 Python 2 设置为维护分支。但是,许多人不想切换,因为正如改进的 PEP 所说,Python 3 是“相对于 Python 2 的温和的改进。”许多人并没有因为这些带来的不便而切换。当时,Python2、3 最大的区别是将 print 语句更改为 print() 函数语法,这破坏了很多 Python 2 代码。 结果,此后很多年 Python 2 还继续处于积极的开发中。 不过,在 2019 年,Python 3 终于成为了新 Python 软件工程师(大部分)开发的默认语言版本,现在许多公司和项目都在使用 Python 3 的主要功能:f- 字符串、Path、类型提示、异步,当然还包括 Unicode 编码。 缓慢的迭代过程 自从新的版本于 2008 年宣布以来,Python 3 市场份额增长一直很漫长: 最初,有很多理由不采用 Python 3:最重要的是,它与 Python 2 并没有向后兼容。结果导致一些 Python2 的主要库往 Python3 迁移都犹豫不决。2 向 3 转换的转折点发生在大约 2016 年左右的 Python 3.5 发行版中,该版本具有矩阵乘法、asyncio 的引入、OrderedDict 的速度改进以及类型提示的实现,这些提示为 Python3 带来了一些类似于静态语言的实用功能。 Python3 更高版本包含更多功能,例如 Pathlib 库和 f- 字符串操作。通过这些更改,人们使用了许多库(例如用于机器学习的 scikit-learn)开始了向 Python 3 的迁移。 随着越来越多的依赖关系开始升级,一些公司也开始迁移 Python3。 从互联网上的状况来看,您可能以为每个人都完成了 Python3 迁移。 在 Jetbrains 进行的一项调查中,他们制作了 IntelliJ 和 PyCharm 之类的 IDE,有 75%的个人受访者表示他们已经迁移到 Python3。一连串的博客文章都显示了相同的内容,例如,Dropbox 于 2018 年秋季详细说明了他们的迁移 Python3、Instagram 于 2017 年迁移 Python3、Facebook 于 2014 年开始迁移 Python3。在客户的敦促下,Splunk 最近也这样做了 – 往 Python3 迁移。 但是,仅仅因为 Python 2 即将到期,并不意味着公司会在一夜之间停止使用它。我们怎么知道 Python 2 仍在大量的使用?我们可以直接检查 Python 包库 PyPI 的运行情况。2016 年,PyPI 核心开发人员开始将日志发送到 Google 的 BigQuery,以便能够针对它们运行 SQL,这使得根据使用情况做出体系结构决策变得更加容易。 例如,如果要查看过去 30 天内通过 Python 版本下载了哪些库,则可以在 BigQuery 中创建一个新项目(每月查询的前 1TB 是免费的),然后运行: SELECT REGEXP_EXTRACT(details.python, r"^([^\.]+\.[^\.]+)") as python_version, COUNT(*) as download_count, FROM TABLE_DATE_RANGE( [the-psf:pypi.downloads], DATE_ADD(CURRENT_TIMESTAMP(), -31, "day"), DATE_ADD(CURRENT_TIMESTAMP(), -1, "day") ) GROUP BY python_version, ORDER BY download_count DESC LIMIT 100 尽管 Python 3 一直是社区中的主导版本至少一年,但从 PyPI 下载的单个软件包的最新数量显示,2019 年 9 月所有软件包下载中至少有 40%为 2.7 版本。诚然,这比年初的 60%有所下降,但是鉴于 EOL 距离只有数月之遥,所以这个数据仍然很重要。 在每个库的基础上,它变得有些棘手:大多数 Flask 下载都是使用 Python 3 版本完成的,但是只有 26%的 botocore 下载(适用于 Python 的 AWS 开发工具包)正在使用 Python 3。 而且,有几个库需要进行迁移:Twisted 和 PyPy(常用的 JIT 编译器)将无限期保留版本 2。 任何给定软件的寿命终止通常并不意味着该软件不再可用。这确实意味着它不再针对任何安全漏洞或添加任何其他错误修复程序进行更新。但是,不更新到 Python 3 会带来很多风险 - 最重要的是,可能会丢失安全更新,无法利用类型提示和速度提升等新功能。 为什么 Python3 迁移速度这么慢? 开个玩笑,在我写本文的时候,我的 IT 系统还在 Java 8 上运行(按今天的标准,这已经很古老了。但是根据 2018 年的 JVM 生态系统报告,Java 8 仍然是主要的开发环境。) 这就是答案:大多数大型组织,在技术新闻发布的炒作周期之外,其行动要比新闻媒体或博客想像的要慢得多。例如,大多数主要银行仍在运行 FORTRAN 和 COBOL 的编程语言系统。 因此,尽管许多公司描述了他们的迁移策略,但更多的应用软件将长期保留在 Python 2 上。 为什么会这样呢? 在所有决策中,政治发挥的作用和技术指导一样重要 例如,为了在 Facebook 上使用 Python 3,Jason Fried 从 2014 年开始重写 Python3 服务。一路走来,他犯了很多错误,更改了很多代码,并做了很多修改以使其广为人知人们正在做 Facebook 之类的事情,例如参加新的开发人员培训,从而开始使用 Python 3。然后,他与ŁukaszLanga 合作,后者将 Instagram 转换为 Python 3: 2016 年,他和 Langa 在 Facebook 上组建了一个全新的团队,以在公司内部管理 Python3。由于他们是“ Python 团队”,因此他先前提到的“公认权威”起作用。人们认为他们可以在 Facebook 上做出有关 Python 的决定。实际上,Instagram 的迁移项目本身耗时 10 个月。 Guido 和 Langa 现在工作的 Dropbox 花费了三年时间,而直到 Guido 几周前退休为止,它仍在进行中。 诚然,上面这些案例都是巨大的 Python 代码库,但您必须怀疑:如果 Python 的高层人员从事此工作需要花费这么长时间,那么对于一家公司非高层做决策来说可能要花费更多的时间。 安全问题是一个很重要的考量问题 具有讽刺意味的是,您会认为不升级将是更大的风险。但是在较大的组织中,不允许升级 Python3:管理员或安全团队向他们推送更新。在某些情况下,也不允许下载更新 PIP。如果 Python 2 是安全团队同意的默认协议,那么它可能需要做出巨大的努力才能说服人们将其切换到 3,尤其是在受到严格监管(例如医疗保健或金融)和政府的 IT 环境中。 惯性 尽管许多版本的 Linux(例如 RHEL)在 Python 2 和 Python 3 之间都包括了 Python 3,但这绝不是默认值,在 2 和 3 之间切换时,经常发现一些问题,尤其是指向系统版本的链接默认使用 Python2。Python 经历了从 2 到 3 的漫漫长路,个人和具有前瞻性的创业公司都采用了它。现在,第二大迁移将发生在大型企业从 2 开始迁移的时候。关于 Python 2,我们将看到 2020 年 40%使用率的数量进一步减少,但是变化将是递增的。 英文原文

珍宝珠 2020-01-06 10:36:04 0 浏览量 回答数 0

回答

本人是Python小白,在使用过程中遇到了一些跨平台及Python版本的问题,下面开始不定时添加我在学习Python过程中遇到的问题及解决方案。1、Python2.x,print不需要括号,而Python3.x需要,否则会报错    Python2.x:print  response.read()    Python3.x:print ( response.read())2、urllib中urlencode使用    python3.x:urlencode在urllib.parse模块中 使用方式urllib.parse.urlencode ,下面是在parse.py中urlencode模块的定义。    python2.x:使用方法是直接使用,from urllib import urlencode

寒喵 2019-12-02 01:09:21 0 浏览量 回答数 0

回答

Jython是从python调用Java的一种方法-实际上,您可以在 Java JVM中运行Python 。这使您可以访问几乎所有在JVM上运行的Java,但是有很多限制。 由于Jython在JVM中运行python,因此您几乎可以使用任何Java库。但是,使用的Python受到严格限制:只能使用Python 2.7,并且只能导入纯Python库(使用C编译的Python库无法在Jython上运行)。 对于使用Jython的项目的示例:Processing.py在Jython上运行,以便访问Processing Java API及其Java库生态系统。 https://github.com/jdf/processing.py 请注意,Jython 2 及其文档非常老,并且开发人员不确定Jython 3是否/何时发布。 https://github.com/jython/jython3 py4j py4j是一种不同的方法-它是“ Python与Java之间的桥梁”,并允许本机python代码访问在单独的JVM中运行的单独的Java。但是请注意,python和Java代码必须并行运行并通过网关接口进行通信。这是在单独运行的进程之间进行的通信-您不是从Python或在Python内部生成JVM。 例如:在JVM端,将myObject传递给新的GatewayServer(myObject); 在Python端,创建一个JavaGateway()Python对象,并使用它与Java myObject通信。

祖安文状元 2020-02-22 15:15:20 0 浏览量 回答数 0

回答

在mac上搭建python环境:  mac系统其实自带了一个python的执行执行环境,用来运行python还行,但是开发可能就不够了,因此我们需要重新安装python。这里有两种方案安装:  1.homebrew  brew install python  这个方案比较简单,如果出错的话可以给前面加sudo试试,这个安装的python可能不是最新版.  2.从官网下载安装  大家可以从https://www.python.org/download下载安装最新版的python,安装比较无脑,一路按下去就OK,缺点是以后升级,卸载都得自己维护.  这两个方法安装的python的位置是不一样的,大家可以用:  which python  来查看安装位置.安装完成后在终端中键入python来验证安装是否成功.

李世龙ing 2019-12-02 01:09:48 0 浏览量 回答数 0

回答

今天也遇到这个问题,然后试了试改动下版本问题成aliyun-python-sdk-core-v3 2.9.4 ,但是不成功,最后去看了下发布在github上的包,发现了一些问题,最后简单的来说,问题的出现应该是达成了这样的条件:1、python使用的python3 ,既pip 是python3版本的2、安装命令是 pip install aliyun-python-sdk-core-v3但是在 https://github.com/aliyun/aliyun-openapi-python-sdk/tree/master/aliyun-python-sdk-core 这个源码里,明明提供给了setup.py 和 setup3.py 安装脚本猜测应该是因为使用了pip 执行的安装导致python 版本问题,即便声明了安装 aliyun-python-sdk-core-v3 最后的处理如下:1、直接下载代码从 https://github.com/aliyun/aliyun-openapi-python-sdk/tree/master/aliyun-python-sdk-core2、cd 到 aliyun-python-sdk-core 目录下,然后使用 python setup3.py install 来安装 aliyun-python-sdk-core 的python3版本3、pyinstaller -F xx.py 打包成exe4、执行exe成功

游客wrn6hq6brve2s 2019-12-02 01:48:03 0 浏览量 回答数 0

回答

WEB开发,我们先从搭建一个简单的服务器开始,Python自带服务模块,且python3相比于python2有很大不同,在Python2.6版本里,/usr/bin/lib/python2.6/ 目录下会有 BaseHTTPServer.py, SimpleHTTPServer.py, CGIHTTPServer.py两个文件,但是在Python3.4里,就没有上面的3个文件,而是合闭到了 /usr/bin/python3.4/http/server.py文件里了。所以在python2版本中,如果想要启动python自带的服务,在doc窗口里输入:[plain] view plain copypython -m CGIHTTPServer 8081 其中8081端口号是自己可以设置的,默认端口号为8080而在python3中,因为已经将BaseHTTPServer.py, SimpleHTTPServer.py, CGIHTTPServer.py 模块合并为了server模块,所以启动服务器的代码也有所改变,为:[plain] view plain copypython -m http.server 8081 正确启动后,截图如下:在浏览器中输入localhost:端口号,即可访问

xuning715 2019-12-02 01:10:20 0 浏览量 回答数 0
阿里云大学 云服务器ECS com域名 网站域名whois查询 开发者平台 小程序定制 小程序开发 国内短信套餐包 开发者技术与产品 云数据库 图像识别 开发者问答 阿里云建站 阿里云备案 云市场 万网 阿里云帮助文档 免费套餐 开发者工具 云栖号物联网 小程序开发制作 视频内容分析 企业网站制作 视频集锦 代理记账服务 2020阿里巴巴研发效能峰会 企业建站模板 云效成长地图 高端建站 云栖号弹性计算 阿里云云栖号 云栖号案例 云栖号直播