1
defunct9 2017-06-28 23:43:53 +08:00 via iPhone 5
高高兴兴的用了 p2,结果被 encode、decode 折磨了个半死
|
2
donething 2017-06-29 02:10:09 +08:00 via Android
为什么 python3 好用的 MySQL 连接库都没有?
|
3
MIMEIK 2017-06-29 08:03:20 +08:00 via Android
因为 py3 和 py2 本来就不是一种语言呀
摔╮(╯▽╰)╭ |
5
CYKun 2017-06-29 08:56:09 +08:00 via Android
因为后向兼容就是很难做呀,不然 java 也不会有那么多人骂了。
|
6
to2false 2017-06-29 09:01:03 +08:00
兼容问题,是时候喊出那一句话了,PHP 是世界上......
|
8
keysona 2017-06-29 09:04:45 +08:00 1
破坏 & 重生。
py3 大法好。 除了 遗留项目,现在 统一 py3. |
9
lgpqdwjh 2017-06-29 09:16:48 +08:00 3
python 1989 年发明,第一个公开发行版发行于 1991 年
utf8 由 Ken Thompson 于 1992 年创建 |
10
chenyu0532 2017-06-29 09:20:19 +08:00
因为 py 爸爸设计的就不能兼容啊。。。老老实实用吧。。这个问题没有为什么
|
11
Phariel 2017-06-29 09:39:02 +08:00 via Android
Swift 不是同样的道理 为什么不能好好的兼容前面的版本
因为压根就没考虑过兼容问题 |
12
justtery 2017-06-29 09:53:45 +08:00 via Android 3
没升级 python3 的 python 包你就当它死了就好了
|
13
jason19659 2017-06-29 09:58:46 +08:00
所以一般都装 2 个版本的 py
|
15
kinghui 2017-06-29 10:03:13 +08:00
@donething #3 我们目前在尝试把在开发中的 Python2 项目迁移到 Python3, MySQL 连接库我们目前在尝试使用 https://github.com/PyMySQL/mysqlclient-python ,
|
16
tankb52 2017-06-29 10:04:14 +08:00
兼容是个无底的坑。
|
17
leavic 2017-06-29 10:04:58 +08:00 1
非商业语言的有点就是敢于大破大立,只管对错不管利益。
|
19
eloah 2017-06-29 10:11:12 +08:00 1
Rust 表示,兼容是什么
|
20
gouchaoer 2017-06-29 10:11:13 +08:00
这是 py 犯下的最愚蠢的错误,当然了我能不用就不用这门语言
|
21
gouchaoer 2017-06-29 10:14:49 +08:00
我就不懂了,你把 /这种基本操作符的意义都变了,除了给库开发者造成冒犯,有毛意义
print 加不加括号有毛意义 一堆抖 M 么 |
22
zhengxiaowai 2017-06-29 10:48:00 +08:00 4
py2 很大一部分是兼容 py1 导致的,你看看 python 诞生的时间,比 java 还早好多年,很多现在的丑陋的在当时来看是很优雅的实现。
python 是一种简单又复杂的语言,取决于使用方式。举个栗子,元编程的强大,大家都知道。目前很好实现元编程的只有 Python 和 Ruby。python 排序所用的 timsort 算法的高效被很多语言实现的排序作为参考(来自《流畅的 Python 》)。 @gouchaoer 你不懂就要多看书,不是瞎喷。print 加不加括号取决于 print 是作为函数还是关键字。作为函数的话实用性远远大于关键字。 要我说,python3 出来的第一天就要停止 python2 的开发才对,哈哈哈哈哈! |
23
ke1e 2017-06-29 10:48:01 +08:00
print 加括号它就是个函数,不加括号它就是个表达式
|
24
kinghui 2017-06-29 10:51:04 +08:00 1
@gouchaoer 不是加不加括号, 而是从一个表达式变成了函数, 引用 https://stackoverflow.com/a/6241519 提到的其中一个好处就是可以像如下方式使用 print:
>>> [print(x) for x in range(10)] print 并不会对兼容性造成太多的困扰, 毕竟很少有库里直接使用 print, 而且 print 这种非常容易修改. 最大的不兼容就是底层使用 Unicode 重新实现, 同时严格区分了 字节序(bytes) 和 Unicode(str). 比如 Python2 中 bytes 和 unicode 可以相互比较, 但是在 Python3 中是不允许的: Python2: >>> b'abc' in u'cc abc' # True Python3: >>> b'abc' in 'abc' # TypeError 还有比如 Python2 中只要是字符串类型(str,unicode) 都有 format/decode/encode 方法, 但是 Python3 中仅允许 Unicode(str) 有 encode/format 方法, bytes 不允许有 format 方法, 等等等. 这样做的好处是让语言更加严谨, 其他一些库的不兼容可能主要是由于这个原因导致, 也有部分可能是破窗效应: 反正不兼容那就做些大调整, 比如换个名啥的. 还有一些类似 MySQLdb 这样的库不兼容是因为 Python3 的 C API 也不兼容, 导致这些用 C 写的扩展库不支持 Python3, 就像 #8 说的, 除非一些已死的项目(想 MySQLdb) 基本上都已经(或正在)同时兼容 Python2 和 Python3. |
25
tempdban 2017-06-29 11:00:22 +08:00
@gouchaoer 以前同事初学 python2 的时候,调试全靠 print。后来我想优雅的重载 print 向 log 输出,做不到....
到了 python3 重载 print()后,就随便他们怎么 print 了 |
26
gouchaoer 2017-06-29 11:16:39 +08:00
@zhengxiaowai
@tempdban 你不用为 py 的 print 辩解了,我这个外行教 guido 怎么兼容,简单的很: 对 py3 而言,print 如果不加括号,ok 这是一个关键字;如果加了括号,这是一个函数,你想怎么重载怎么重载 |
27
tempdban 2017-06-29 11:31:01 +08:00
|
30
BOYPT 2017-06-29 11:33:38 +08:00
感觉今年看到的逼都在这个帖子里了
|
31
gimp 2017-06-29 11:37:54 +08:00 2
“我这个外行教 guido 怎么兼容”
有趣 :) |
32
Kongyuan 2017-06-29 11:38:26 +08:00 2
最近被 python3 的数据库链接库给纠结坏了。 找了半天才找到个合适库:
如果你也在找链接 MySQL 的请参考: * pymysql - 怎一个幔子了得。好在 docker 的 image 不用准备 mysql 的包了。 * mysqlclient-python - 就是 python2.x MySQLdb 的替代品。 对于的 乖乖去下载 mysql 安装包和 dev 库吧 然后,这年头有谁多进程连数据库不用连接池? 然并卵,pymysql 不支持,mysqlclient-python 支持但用起来复杂。 所以找了这个 DBUtils: https://pypi.python.org/pypi/DBUtils/1.2 (support both python2.x/3.x) 发现找到了救星。 顺便说一下为了找这个库,翻遍了 github 上的各种 python3 mysql pool 的项目。 弄了一下午 (逃) |
33
cashew 2017-06-29 11:41:31 +08:00
Java 到是一直在做兼容,然后就越来越臃肿了。
|
34
ixiaohei 2017-06-29 11:45:17 +08:00
表示做 java 的看你们讨论 py2 和 py3 迁移问题都很 happy,另外你们要是以后切换 py4 是不是有得吐槽一番,有些东西能废弃就废弃吧,一直抱着老的,还怎么去拥抱新的,另外 java 很多时候为了兼容老的,出个新东西都得多久...
|
35
ixiaohei 2017-06-29 11:45:56 +08:00
不过不用头痛的是,java 切换高级版本,很多老的都可以用。
|
36
gouchaoer 2017-06-29 11:51:29 +08:00 2
@cashew 得了吧,java 语言很简洁很规矩,兼容做的很好,jvm 也做得好,社区成熟库多不折腾,真正的工业级语言,这么好用的基础设施。。。这么说吧,java 是最好的语言
|
37
ty89 2017-06-29 11:52:55 +08:00
所以我现在尽量只用 ror 做 web 开发了
|
38
nullcc 2017-06-29 11:57:14 +08:00
长远来看肯定是要用 py3 的,这点没有任何疑问
|
40
AnyISalIn 2017-06-29 12:00:26 +08:00
主要问题是一些三方库可能不支持 Python 3,但是如果自己写的话,还是很容写 2.7 -> 3.6 都兼容的代码的
|
41
jiangzhuo 2017-06-29 12:00:32 +08:00
最近用了 six 感觉好一点
|
42
gouchaoer 2017-06-29 12:02:58 +08:00 1
@smithtel 你不战一战怎么把那些只知道人云亦云、掌握了一个技术栈就只知道敝帚自珍的小白骂醒,真的好的技术是不怕拿出来比较的。而且我又不是大神没啥包袱,引战啊煽风点火啥的我挺喜欢的
|
43
tairan2006 2017-06-29 12:29:32 +08:00
其实不反对 Python3 不兼容,反对的是好不容易不兼容了,你就不能多改一些么…比如更快一点…
|
44
ivechan 2017-06-29 12:33:55 +08:00
一天到晚宣传程序员需要学习的新技术多的是你们, 可 Python3 都出来了差不多十年了,
还有人在讨论 XX 库为什么不兼容 Python2 这种问题。。 |
45
xijiangtao 2017-06-29 12:43:11 +08:00
@donething pymysql,python-mysql 之类的,搜索一下都是好多一堆教你怎么连接 Mysql 的
|
46
windfarer 2017-06-29 12:45:23 +08:00 via Android
又是吵架帖。。
|
47
0915240 2017-06-29 12:50:18 +08:00 via iPhone
java 是臃肿,但兼容确实做的很好。
|
48
cashew 2017-06-29 12:50:52 +08:00
@gouchaoer 说简洁、说臃肿也是相对于别的语言,这些本身就没什么好争的,各个语言各有千秋。说 Java 繁重,也恰恰说明它是一个靠谱好用的语言,更何况 Java 在各个领域都有闪光点也证明它本身。
我也无意去说什么,毕竟 Java 是编译型语言和 Python 解释型语言相比本身就不恰当。 |
50
gy911201 2017-06-29 12:56:10 +08:00
你看为了兼容,Java 的泛型都成了什么样了……
|
51
demerol 2017-06-29 13:26:45 +08:00 via Android
php js 就是个很好的例子
|
52
robertding 2017-06-29 13:30:08 +08:00
@kinghui 终于要迁移了啊。。。
|
53
VmuTargh 2017-06-29 13:55:55 +08:00
有些花就是习惯在烂泥里面生活了,给它个好环境反倒枯萎了。
|
54
zhangbohun 2017-06-29 14:24:41 +08:00 via Android
说起来因为 print 要加括号所以我一直没升级 py3,哈哈哈哈哈哈
|
57
clino 2017-06-29 14:56:37 +08:00
我一直觉得 python 每一个大的版本只做一个大的不兼容的更改,我看升级就妥妥的没问题
就是步子跨太大,大跃进了以后成本就高了 |
58
mimzy 2017-06-29 14:58:56 +08:00
@zhangbohun #54 估计你知道 不过可以这样嘛 from __future__ import print_function
|
59
mimzy 2017-06-29 15:00:07 +08:00
@zhangbohun #54 对了反应过来你的意思是不想加括号…啊那就不是我表达的意思了…
|
60
lxy 2017-06-29 15:16:22 +08:00
@gouchaoer
print(2, 3) 在 py2 输出的是 tuple:"(2, 3)",py3 是"2 3"。你的兼容方式并不能兼容。 |
61
visonme 2017-06-29 15:23:10 +08:00
因为 py3 的设计者门,一开始就是把 py3 作为一个新的东西打造,而不是单纯作为 PY2 的升级版
|
62
fy 2017-06-29 15:28:11 +08:00 1
简单,移除不支持 python3 的库。
因为它们多半是三年以上不更新的过时库,换社区里更好的替代品。 |
63
gouchaoer 2017-06-29 15:37:22 +08:00
@lxy py 的 tuple 的(2, 3)是写成(2, 3,)的,而且这个和我的兼容方式无关,这个 tuple 也很蛋疼啊,过度设计
|
64
Chrisplus 2017-06-29 15:58:03 +08:00
python 3 最大的原罪,就是他的名字叫 python 3 吧……
如果叫 snake1 估计都没这么多口水 |
65
ipwx 2017-06-29 16:08:24 +08:00 1
@gouchaoer 首先,(2,3) 是没有问题的,和 (2,3,) 同义。(2,) 才是强制要写的。你肯定记错了。要不就是 f((2,3)) 的用法。但是 f((2,3)) 也可以不加最后那个逗号呀。
其次,我实在是不懂你为什么这么仇视 Python。我从学习 Python 以来已经六年了,学会写 2&3 兼容性代码、setup.py 以及完善的单元测试也已经两年了。我用 Python 写过很多东西,从脚本到网站( Flask + Webpack + Vue.js ),再到深度学习的模型( TensorFlow ),体验一直都不错。 我现在写 Python 的代表性作品可以参考 https://github.com/korepwx/mlcomp/tree/dev 和 https://github.com/korepwx/tfsnippet/tree/dev。另外我还给 https://github.com/thu-ml/zhusuan 贡献了点代码。 (事实上 TFSnippet 就是我在用 ZhuSuan 的过程中感觉有些东西写不出来,所以仿写并改写的一个轮子)。 |
66
northisland 2017-06-29 16:12:05 +08:00 via iPhone
优雅的 python 生了两个婊子,一个叫 2,一个叫 3
|
67
gouchaoer 2017-06-29 16:19:50 +08:00
@ipwx 那的确是我记错了,我其实大学本科的时候还蛮喜欢 py 的,后来语言接触多了发现 py 的很多设计很糟,但是还是一堆人跪舔,如果我当初要选一门脚本语言入门的话绝不会选 py ;你要说我仇视 py 那就仇视吧,我指出的问题那是实实在在,就事论事
|
68
bytelee 2017-06-29 16:24:29 +08:00
如果让你用了 Swift 你还不去 apple 总部自焚
|
69
ipwx 2017-06-29 16:40:41 +08:00
@gouchaoer 我的意见是这样的:我比较喜欢 Python,不是因为它语言有多好,而是因为它能很快完成我要做的一切事情。你看我要做的事情从 Web 开发(“写博客”遗留下来的爱好)到运维脚本(管实验室的服务器要用)到写深度学习的模型和在集群上调度实验脚本( PhD 的本职),样样都有。
我是不想开发个博客或者类似的 Web 应用就要去熟悉一下 C#、Java 或者 PHP 的程序栈,毕竟这只是我的爱好而不符合我的职业规划;我也不想学习 Bash 那种反人类的语法;至于深度学习就更别提了,靠谱的库全是 Python 的。 所以我喜欢用 Python,因为只有它能让我只熟悉一门语言就搞定所有事情。要不然,我还得同时维护好几个语言自己经常用的轮子代码吗? |
70
ipwx 2017-06-29 16:43:35 +08:00
@gouchaoer 从我这样的需求出发看问题,你会觉得网上热捧那么多语言的人真是吃饱了撑着的。对我说的就是 OCaml、Haskell、Scala ……等各种语言的狂热爱好者,语法再好,功能再多,你能让我快快乐乐地写个 Deep Generative Model 吗?
|
72
ShindouHIkaru 2017-06-29 18:20:01 +08:00
@gouchaoer 为了埋这个伏笔,你也是蛮拼的。。。
|
73
l00t 2017-06-29 18:51:41 +08:00
所谓向下兼容的意思就是你得保留所有错误。
|
74
lrxiao 2017-06-29 18:53:39 +08:00
建议这楼里的人都好好看看
https://docs.python.org/3/whatsnew/3.0.html 并且看看里面提案的 PEP 是怎么写的... 举几个优点黑点 优点:unicode 新式类 新的字符串格式化方法 各种各样更优雅的语法 缺点: 性能慢了 与旧库难兼容 就指着个 print 瞎喷...233333 |
75
lrxiao 2017-06-29 18:57:20 +08:00
像 Py2 这种 True/False 都不是关键字 while(1)和 while(True)因为这个 VM 没法优化...这不是屎设计吗
|
79
mingyun 2017-06-30 00:19:34 +08:00
可能需要这个 pip install 3to2
|
80
zjlin1984 2017-06-30 08:42:31 +08:00
看了很多评论
|
81
Septembers 2017-06-30 11:05:18 +08:00 via iPhone
@justtery 还有一种选择翻修这个库
|
82
assad 2017-06-30 16:05:42 +08:00
我是来看评论的
|
83
RaymondLiu 2017-06-30 20:45:28 +08:00 via iPhone
@ipwx 赞👍 我初学 python 一年 向你学习
|
84
mathgl 2017-07-01 00:40:45 +08:00
壮士断腕
py2 是没料到有这么成功,想填坑发现已经太迟,于是开个新的...你要不要跟进就不好说了。 |
85
Huozic 2017-07-01 17:01:18 +08:00
比较好奇楼主用的什么模块?已经用了 PY3 几年了,日常没遇过什么包不支持 PY3 了。
|