luogu-dev / cyaron

CYaRon: Yet Another Random Olympic-iNformatics test data generator
GNU Lesser General Public License v3.0
1.32k stars 164 forks source link

Fix Bug #65

Closed Hukeqing closed 4 years ago

Hukeqing commented 4 years ago

This file cant run in Python3.7 Because it will throw "AssertionError" in file "compare_test.py" in line 57(line 56 before). I add "try-except" in this file but cant fix it.

YanWQ-monad commented 4 years ago

通过 .travis.yml 可以发现是用 tox 来测试的,所以我个人建议把 xeger 等依赖的安装放到 tox.ini 里面。

加上这么一行,让 tox 在测试的时候安装 requirement.txt 里面的依赖

deps = -rrequirements.txt

个人拙见


另外,我在本地没有复现到上面所说的 AssertionError 错误(Python 3.7.3 on Linux)

william-song-shy commented 4 years ago

您tql

---Original--- From: "Monad"notifications@github.com Date: Sat, Jul 27, 2019 22:41 PM To: "luogu-dev/cyaron"cyaron@noreply.github.com; Cc: "Subscribed"subscribed@noreply.github.com; Subject: Re: [luogu-dev/cyaron] Fix Bug (#65)

通过 .travis.yml 可以发现是用 tox 来测试的,所以我个人建议把 xeger 等依赖的安装放到 tox.ini 里面。

加上这么一行,让 tox 在测试的时候安装 requirement.txt 里面的依赖 deps = -rrequirements.txt
个人拙见

另外,我在本地没有复现到上面所说的 AssertionError 错误(Python 3.7.3 on Linux)

— You are receiving this because you are subscribed to this thread. Reply to this email directly, view it on GitHub, or mute the thread.

Hukeqing commented 4 years ago

我这里确实出现了 Assertion 错误(python3.7.2 in pycharm on Windows)

====================================================================== FAIL: test_noipstyle_incorrect (cyaron.tests.compare_test.TestCompare)

Traceback (most recent call last): File "D:\Code\python\cyaron\cyaron\tests\compare_test.py", line 52, in test_noipstyle_incorrect Compare.output("test_another_incorrect.out", std=io) cyaron.compare.CompareMismatch: In program: 'test_another_incorrect.out'. On line 2 column 7, read 4, expected 3.

During handling of the above exception, another exception occurred:

Traceback (most recent call last): File "D:\Code\python\cyaron\cyaron\tests\compare_test.py", line 56, in test_noipstyle_incorrect self.assertEqual(e.content, 'test123\r\ntest124 ') AssertionError: 'test123\r\r\ntest124 ' != 'test123\r\ntest124 '

  • test123 ? +
  • test124

    上述内容稍有格式问题,以下方截图为准

终端部分输出截图: TIM截图20190728081353 测试命令:

python unit_test.py

考虑到另外一个问题,可能是我没有安装 pygraphviz 包的原因。pygraphviz 包在Windows下有依赖项:Microsoft Visual C++ 14.0 在安装包时会出现如下错误

error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": https://visualstudio.microsoft.com/downloads/

个人觉得关系应该不是很大,根据个人了解,pygraphviz 是图形工具包,而出现错误的地方函数命名为:test_noipstyle_incorrect,个人理解是测试 noip 模式下的对拍器。与 pygraphviz 似乎是没有关系的(仅个人理解,如有错误请指出) 其次,在文件“.travis.yml”中,也没有提到 pygraphviz 包的安装命令。且 python 版本仅为"3.6"。所以我当时认为是 python 版本问题,现在看来可能不是(当然不排除python的小版本之间的差距)


关于对“.travis.yml”的修改 Orz 是我没有想到借用 requirement 但是考虑到当他人使用此包时,不应当/不需要下载 tox-travis 包。所以又不能把 tox-travis 包加入到 requirement 中,个人认为可以修改,但是还是需要两行

 - pip install tox-travis
 - pip install -r requirements.txt

当然,鄙人对 travis 文件的编写并不是很熟悉,可能有错误的理解,如果有误请指出。 表示抱歉的是我没有看懂这个

deps = -rrequirements.txt

可能功能与

pip install -r requirements.txt

相同Orz,学到了


另外,在“.travis.yml”文件中并没有提及到 pygraphviz 包,且整个项目中,仅“visual.py” 文件使用了此包。另外在本地测试,不会出现缺少 pygraphviz 包的错误提示,根据我对项目的理解,这个函数模块应该是当时编写图论部分的人写的测试模块,为了更加直观的查看生成的图是否满足条件而编写的,那是否应该将 pygraphviz 包移出 requirements 文件?


最后,我已经将重新修改的项目推送到GitHub 修改内容——基于我当时pull request时的修改 但是 Travis 返回给我的结果是Fail 前往我的 Travis 错误是

ModuleNotFoundError: No module named 'xeger'

个人表示有点不能理解,在输出信息中明明写了成功安装 (之前build成功是由于我不小心注释掉了”unit_test.py“中的

from cyaron.tests import *

因为pycharm提示这行代码没有被使用到……鄙人意见:可以将这个导入包的代码放置到使用到它的地方,不至于会有其他人像我一样去注释掉/删除掉此行 (对本条comment的多次修改仅因格式稍有问题)

YanWQ-monad commented 4 years ago

orz,您这回复也太详细了吧,本来只是有点强迫症所以说一下而已。


我认为这个 AssertionError 是 Windows 平台的 CRLF 换行特性所引发的错误(与 pygraphviz 无关),好像我之前也遇到过呢,所以我说的时候强调了一下是在 Linux 平台,Windows 平台我待会切个系统测试一下。

7.28 22:33 Update:已提交相关 PR:#67


我昨天其实也发现 pygraphviz 似乎没有什么用,刚刚搜了一下发现是 #16 引入的。

原作者:

我第一反应就是添加一个可视化的功能就会很棒棒, 所以用pygraphviz写了一个visual.py

pygraphviz 只在 visual.py 中被引用到,而平时和测试的时候都没有用到,所以不装也没有什么问题。(然后我也一直没有发现它的存在)


安装 pygraphviz 报错的原因是 pygraphviz 是用 C/C++ 写的,安装的时候需要编译。

(下面都是吐槽 Windows)
在 Linux 上只要安装了 gcc 就可以很顺利的编译,而 Windows 的垃圾开发环境,导致 pip 不认手动安装的 MinGW,只认 Microsoft Visual C++(默认),当然也可以更改 pip 的相关文件来实现用 MinGW 来编译,不过很麻烦。

之前也试过在 Windows 上跑一个深度学习,结果却在环境(依赖)安装上面花了一大堆时间。Windows 日常用是挺好的,但是一遇到一些项目的开发就会很痛苦,另观 Linux,apt-get 真香。


然后那个 requirements.txt 依赖的安装,我是看到项目的根目录有个 tox.ini 然后 .travis.yml 里面也是用 tox 来运行测试的,所以判断这个项目的测试是用 tox 来管理的。

如果 requirements.txt 的安装不在 tox.ini 里面声明的话,运行 tox 来跑测试就会报错(ModuleNotFoundError)。tox 这玩意我也没怎么用过,初步判断是新建了一个临时的 virtualenv 并安装相应的库然后在里面跑测试。默认情况下 tox 里面的环境是不会用到外面的包。

为了印证我的猜测,看了下 Travis CI 果然 Failed 了。

差点忘说了,deps = -rrequirements.txt 是直接加到 tox.ini 里面的 [testenv] 下。


另外 Travis CI 的默认系统配置里面不包含 Python 3.7,需要手动设置 dist: xenial 才能用到 Python 3.7。(见 travis-ci/travis-ci#9815)

Hukeqing commented 4 years ago

之前也考虑到可能是平台的问题,然后因为最近学校趁暑假在做网络检修,加上不知道是什么原因,学校的网络对访问国外的网站(即使是python、jetbrain这类的)也非常的慢,还经常掉包,导致我一直没能在我的笔记本(ubuntu)上安装python3.7(因为tensoflow很多代码都是在python2下跑,我也就没去下载python3了,一直在用python2,加上实验室的电脑有python3,然后就一直忘记……)在你留评论的时候,我正在 艰难的 下载python3。(不知道python有没有国内的镜像源) 不过最后一次没有出锅(因为我放弃apt,转用windows安装python的方法,chrome NB!) 在linux下测试通过,应该是平台的问题了,如果是\r的问题的话,那是否在macOS平台下也会出错呢?


至于 tox ,真的对其没有太多的了解,可能得靠几位大佬完善了


一开始对修订这个包的想法只是来自最近的一次网络赛,当时队友要我帮他出数据,但那个数据要求有点难受,如果使用正则表达式会非常简单,所以就萌生了想修改这个项目的想法。