Hi Brad, Great! Thanks a lot! It looks almost good to me.
A few remarks, if update sys.path before importing module file, I guess we need to backup the original sys.path and restore it before returning module instance as following. https://github.com/osrg/ryu/blob/master/ryu/utils.py#L96-L97 This avoids inserting the unexpected path into sys.path. Thanks, Iwase On 2017年04月08日 12:25, Brad Cowie wrote: > Hi Iwase, > > Thanks for the followup. > > In testing I found a few issues with your patch and have some feedback: > > - Windows style line endings > - Breaks python2.6 & python2.7 compatibility (FileNotFoundError is python3 > only) > - Doesn't update sys.path to include path to python file which causes issues > with imports > > I have written an updated patch and attached that fixes these issues and > further reworks the loading behaviour of Ryu. > > What I've done is switched from using exceptions to an if statement to decide > on how a given RyuApp should be loaded. The reason I've done this is because > imp.load_source and importlib will pass exceptions from the user code up the > stack to Ryu which means that an exception inside the RyuApp would cause us > to do a module import even though we already loaded the RyuApp from a file. > > Let me know what you think of this patch. > > Brad > > On 7 April 2017 at 19:56, Iwase Yusuke <iwase.yusu...@gmail.com > <mailto:iwase.yusu...@gmail.com>> wrote: > > Hi Brad, > > Sorry for the delay. > > I make a patch for this issue. > Could you test the attached patch? > > Thanks, > Iwase > > > On 2017年03月24日 17:19, Brad Cowie wrote: > > Hi Iwase, > > > > Yes I suspect most people will prefer that when a file path is > specified as a ryu app that file path given is preferred over loading a > module. > > > > Perhaps an additional check - if the app given to ryu-manager exists as > a regular file, load that, otherwise load the module by the same name? > > > > Brad > > > > On 24 March 2017 at 19:46, Iwase Yusuke <iwase.yusu...@gmail.com > <mailto:iwase.yusu...@gmail.com> <mailto:iwase.yusu...@gmail.com > <mailto:iwase.yusu...@gmail.com>>> wrote: > > > > Hi Brad, > > > > Thank you for your reporting! > > > > Yes, as you said, ryu.utils.import_module() prefers to loading a > Python module than file paths. > > In order to solve this problem, we need to change the priority > (Python module or file path), I guess. > > > > You mean "file path should be preferred", right? > > > > Thanks, > > Iwase > > > > > > On 2017年03月19日 11:05, Brad Cowie wrote: > > > Hi there, > > > > > > If you have a RyuApp and put it in a python file that happens to > have the same name as any python module installed in PYTHON_PATH, ryu-manager > will be unable to load the RyuApp. > > > > > > Here is an example showing the issue in ryu-manager 4.12: > > > > > > brad@zilch ~/D/r/r/app> ryu-manager ./simple_switch_13.py > > > loading app ./simple_switch_13.py > > > loading app ryu.controller.ofp_handler > > > instantiating app ./simple_switch_13.py of SimpleSwitch13 > > > instantiating app ryu.controller.ofp_handler of OFPHandler > > > [loads fine] > > > > > > brad@zilch ~/D/r/r/app> pip freeze | grep six > > > six==1.10.0 > > > [find name of any package installed with pip] > > > > > > brad@zilch ~/D/r/r/app> mv ./simple_switch_14.py > ./six.py > > > brad@zilch ~/D/r/r/app> ryu-manager ./six.py > > > loading app ./six.py > > > [ryu-manager will attempt to load a RyuApp from > /usr/lib/python2.7/dist-packages/six.py instead of ./six.py] > > > > > > This seems to be an issue in ryu > <https://github.com/osrg/ryu/tree/master/ryu > <https://github.com/osrg/ryu/tree/master/ryu> > <https://github.com/osrg/ryu/tree/master/ryu > <https://github.com/osrg/ryu/tree/master/ryu>>>/*utils.py* where > import_module() will prefer to load a python module even when presented with > a relative or absolute file path. > > > > > > Interested on people's thoughts on the best way to solve this one. > > > > > > Regards, > > > Brad > > > > > > > > > > ------------------------------------------------------------------------------ > > > Check out the vibrant tech community on one of the world's most > > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > > > > > > > > > > > _______________________________________________ > > > Ryu-devel mailing list > > > Ryu-devel@lists.sourceforge.net > <mailto:Ryu-devel@lists.sourceforge.net> > <mailto:Ryu-devel@lists.sourceforge.net > <mailto:Ryu-devel@lists.sourceforge.net>> > > > https://lists.sourceforge.net/lists/listinfo/ryu-devel > <https://lists.sourceforge.net/lists/listinfo/ryu-devel> > <https://lists.sourceforge.net/lists/listinfo/ryu-devel > <https://lists.sourceforge.net/lists/listinfo/ryu-devel>> > > > > > > > > > > > > > > ------------------------------------------------------------------------------ > > Check out the vibrant tech community on one of the world's most > > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > > > > > > > _______________________________________________ > > Ryu-devel mailing list > > Ryu-devel@lists.sourceforge.net <mailto:Ryu-devel@lists.sourceforge.net> > > https://lists.sourceforge.net/lists/listinfo/ryu-devel > <https://lists.sourceforge.net/lists/listinfo/ryu-devel> > > > > > > > ------------------------------------------------------------------------------ > Check out the vibrant tech community on one of the world's most > engaging tech sites, Slashdot.org! http://sdm.link/slashdot > > > > _______________________________________________ > Ryu-devel mailing list > Ryu-devel@lists.sourceforge.net > https://lists.sourceforge.net/lists/listinfo/ryu-devel > ------------------------------------------------------------------------------ Check out the vibrant tech community on one of the world's most engaging tech sites, Slashdot.org! http://sdm.link/slashdot _______________________________________________ Ryu-devel mailing list Ryu-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/ryu-devel