注释
任何 2.7 版本都可以使用。努力与 3.3 一起工作,但目前不是高优先级。试一试并报告任何反馈。 |
我会看看我能帮上什么忙。 |
@ericrector大多数功能已经存在于 python3 中(尚未完全测试)。主要问题来自核心发送程序,串行接口在 python3 中需要“字节”类型,字符串是 unicode,而在 python2 中需要“str”。 |
@vlachoudis我不了解相关代码的细节,但我会把它放在这里。
对 python 3 普通 unicode 字符串 (str) 进行编码会产生字节。对 python 2 常规字符串 (str) 进行编码会生成 str。对 python 2 unicode 字符串 (unicode) 进行编码会生成 str。我有一种预感,那就是你一直在寻找的方法。 |
谢谢@voneiden这可以进行转换。但是,python3 中不存在的“unicode”类型的代码中有很多检查会引发 NameError 异常。 |
好吧。我会尝试找一些时间坐下来熟悉代码库,也许我能想出点什么。我同意转向 python3。保留旧版 python2 支持会很好,但它对主要代码的影响应该很小。 |
我现在有点害怕跳。我想运行我希望程序具有的所有功能,然后转移到 python3。 |
好的,我会留意情况的。 |
嗨,大家好, 我不是故意打开一罐蠕虫。我可以试着帮忙。我在 c、cpp 和 java 方面有很强的 但如果 Vasilis 希望等待,我可以尊重。 2016 年 2 月 11 日星期四上午 11:07,Matti Eiden notifications@github.com
|
@ericrector感谢您提供帮助。我只是想避免使用拼凑的代码来支持两个 python 版本,而我仍然有一些功能没有完全实现。我想在某个时候跳转到 python3 并停止对 python2 的支持。 我会说第一步是将所有非关键部分修改为 python2 和 python3 兼容。我已经在尝试这样做,但欢迎提供额外帮助。然后开始处理代码的关键部分并将它们仅转换为 python3(尤其是发件人) |
在 python v2.6.6 上启动会引发最新代码错误: 在 Python 版本 2.7.9 上,“主要”元组对象解析,所以没问题,bCNC 运行时版本检查代码没有任何问题。 |
@DasWookie感谢您的报告。我修改了代码以询问 sys.version_info[0] 而不是 .major。现在它应该也适用于 2.6 |
现在支持 3 了吗? |
不,python 3 将需要大量的工作和测试,因为字符串现在是 unicode(2 字节),而在控制器上它必须与字节流通信。 |
@vlachoudis 我已经开始了为期 100 天的代码挑战,一旦我对一般语言更加熟悉,我就会对此进行研究。 我想知道 我几乎每天都使用 bCNC,所以应该可以在我的另一台笔记本电脑上进行测试。 |
现在我看不到任何需要 Python 3 的代码。等待似乎是没有代价的。 |
仅供我的内部记录:https ://www.root.cz/clanky/domena-cz-slavi-25-let-zacalo-to-souborem-hosts-txt/ find -name '*.py' -type f | while read i; do sed -i 's/\.\(de\|en\)code("utf8")//g' "$i"; done
python2 -m modernize -x libmodernize.fixes.fix_import -w -n --no-six .
python2 -m modernize -x libmodernize.fixes.fix_import -w -n --no-six --future-unicode .
futurize -j 4 -w -n -1 .
futurize -j 4 -w -n -2 .
futurize -j 4 -w -n -0 -u .
2to3-2.7 -j 4 -p -w -n -x import -x unicode .
var.encode() #unicode to bytes
var.decode() #bytes to unicode
|
@Harvie我看到你做了一个分支 V3。这应该是开发/测试的位置吗?
|
@atrueresistance它不是真正最新的。我们也从来没有让它正常工作。我已经设法显示主窗口,但几乎所有东西都坏了。 |
大家好消息!我想我已经解决了 python3 上 bCNC 的大部分问题。现在我需要你们在 python2 和 python3 上大量测试最新的 git master 版本,这样我们就可以确定它已经准备好发布了! |
我很高兴,恭喜! |
python3 中的串行通信似乎存在错误,有人可以判断它是否也影响 python2 吗?我的 gcc 有一些问题,所以我现在不能安装 grbl 来测试它。 |
好的,错误在于 Sender.py 中行的编码 靠近#anything接收 `
` 注释的打印结果在 python 3 中为 b” 值(实际上是 Debian 9 中的 Python 3.5.3)。更多来.. 好的,它似乎被更正了
但是 Harvie commit 7fe44a6似乎是错误的,因为在 Python3 中(见上面的版本)它引发了一个错误: `
` sorry 但是代码插入不正确有时候我不得不多次修改帖子,似乎与换行有关,如何在帖子中正确插入代码? 问候 卡罗·D。 |
`
` 这似乎解决了混合问题,一些生成为 str,一些生成为 byte,因此如果它是 byte,encode() 将因属性错误而失败。 很抱歉没有发送正确的行,但我正在测试我的程序版本,但 SerialIO 没有受到影响,除了添加了一些 print() 语句以尝试了解它是如何工作的。 使用 python 2 = 2.7.13 和 python3 = 3.5.3 在 Debian 9 上测试 问候 卡罗·D。 |
我认为我们需要一些围绕 serial.write() 的包装器,因此我们不必将 try/catch 语句放在各处。 |
是的,分析 tosend 类型并采取相应行动可能会更好: `
` 如果你在 try: except part 之前添加这两行,你会发现一些“行”作为 str() 传递,另一些作为字节 b” 传递,如何找出这些行来自哪里? 从命令行查看此序列: ‘ 要发送的串行 > $# 串行发送类型> <class ‘str’> 串行发送类型> <class ‘str’> serial to send type> <class ‘str’> ` 说到python3 问候 卡罗·D。 |
对于一些处理 python 差异的代码,我已经解决了在我的案例 OCV 中设置从模块导入的“全局”var。 当您测试 python 2 或 3 时,首先将 IS_PY3 设置为 True,在 OCV 模块中将其设置为 False,因此如果未检测到 python3,则假定为 else 值 例如,这里有一部分代码处理字典,如 python2 > 2.7 viewitems 在 python3 中作为 items() 工作 如本说明所述: dict.viewkeys()、dict.viewvalues() 和 dict.viewitems() 返回的对象是视图对象。它们提供字典条目的动态视图,这意味着当字典发生变化时,视图会反映这些变化。
此代码导致此行为: 也许为了应对微妙地方的不同行为,可以使用类似的方法。 另一个 mod 可以像这样使用 Tk 的导入:
这涉及更改所有以 Tk 为前缀的 Tk 调用,这是一项漫长的工作,但代码可读性得到提高,现在很清楚 Tk.END 来自 Tk 模块等等,使用正确的编辑器可以修改文件十分钟或更短时间。 问候 卡罗·D。 |
Sender.py 的这个 sendGcode 类 似乎适用于 python3 和 Python2 “““Python
“”” 抱歉代码污染,但它符合 PEP8 文档字符串标准,并使用我的全局变量样式按需激活一些 degug 输出。 问候 卡罗·D。 |
包装器在 bCNC 代码中无处不在。看起来像这样,到目前为止它似乎在 python2 中工作。但无法让 serial.write() 在 python3 上运行: def serial_write(self, data):
#print("W "+str(type(data))+" : "+str(data))
if sys.version_info[0] == 2:
ret = self.serial.write(str(data))
else:
ret = self.serial.write("hello".encode())
return ret
|
首先感谢您为此项目付出的时间和精力!
这在哪个 python 版本下运行?我正在使用 Python 3.3.3 (v3.3.3:c3896275c0f6, Nov 18 2013, 21:19:30) [MSC v.1600 64 bit (AMD64)] on win32
当我运行脚本时,我得到了找不到的模块:
ImportError: No module named ‘ builtin ‘
我变了:
导入内置
以
导入内置
( http://docs.pythonsprints.com/python3_porting/py-porting.html#name-changes )
然后我得到:
回溯(最近一次调用最后一次):
文件“C:\xxxxxxxxxxxxxxxxx\bCNC.py”,第 27 行,
内置._ = gettext.translation(‘bCNC’, ‘locale’, fallback=True).ugettext
AttributeError: ‘NullTranslations’ 对象没有属性 ‘ugettext’
httplib 现在也是 urllib????
你有什么建议吗?