On Wed, 07 Aug 2013 13:22:36 +0900 (JST)
FUJITA Tomonori <[email protected]> wrote:

> On Fri, 2 Aug 2013 10:21:20 -0400
> Glenn McGuire <[email protected]> wrote:
> 
>> I've been using the latest RYU source from GIT, and building my own python
>> eggs.  When launching ryu-manager, I get the following error:
>> 
>> [root@hostname ryu]# ryu-manager
>> Traceback (most recent call last):
>>   File "/usr/bin/ryu-manager", line 5, in <module>
>>     pkg_resources.run_script('ryu==2.2', 'ryu-manager')
>>   File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 461, in
>> run_script
>>     self.require(requires)[0].run_script(script_name, ns)
>>   File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 1194, in
>> run_script
>>     execfile(script_filename, namespace, namespace)
>>   File
>> "/usr/lib/python2.6/site-packages/ryu-2.2-py2.6.egg/EGG-INFO/scripts/ryu-manager",
>> line 43, in <module>
>>     from ryu.topology import switches
>>   File "build/bdist.linux-x86_64/egg/ryu/topology/switches.py", line 427,
>> in <module>
>>   File "build/bdist.linux-x86_64/egg/ryu/topology/switches.py", line 574,
>> in Switches
>> AttributeError: 'module' object has no attribute 'EventOFPPortStatus'
>> 
>> [root@hostname ryu]# python ./bin/ryu-manager
>> Traceback (most recent call last):
>>   File "./bin/ryu-manager", line 55, in <module>
>>     from ryu.topology import switches
>>   File "build/bdist.linux-x86_64/egg/ryu/topology/switches.py", line 427,
>> in <module>
>>   File "build/bdist.linux-x86_64/egg/ryu/topology/switches.py", line 574,
>> in Switches
>> AttributeError: 'module' object has no attribute 'EventOFPPortStatus'
>> 
>> I found that I could execute ryu-manager correctly from the interactive
>> python shell but not from the command line, and looked at the derivation of
>> Event classes from pathnames.
>> It occurred to me that the eggs would not necessarily include the source
>> files, so I tried successfully to make the code look up both source and
>> compiled filenames, and return the union of that.
>> 
>> I have not tried to push it up via git, but I thought people might find
>> this useful.
>> This is what I came up with:
> 
> Thanks! I'll apply the following:
> 
> =
>>From 59ff924f1f4eb8b2887aa97fd608890b938fb81a Mon Sep 17 00:00:00 2001
> From: Glenn McGuire <[email protected]>
> Date: Wed, 7 Aug 2013 13:05:29 +0900
> Subject: [PATCH] ofproto: make binary code loadable
> 
> I've been using the latest RYU source from GIT, and building my own python
> eggs.  When launching ryu-manager, I get the following error:
> 
> [root@hostname ryu]# ryu-manager
> Traceback (most recent call last):
>   File "/usr/bin/ryu-manager", line 5, in <module>
>     pkg_resources.run_script('ryu==2.2', 'ryu-manager')
>   File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 461, in
> run_script
>     self.require(requires)[0].run_script(script_name, ns)
>   File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 1194, in
> run_script
>     execfile(script_filename, namespace, namespace)
>   File
> "/usr/lib/python2.6/site-packages/ryu-2.2-py2.6.egg/EGG-INFO/scripts/ryu-manage\
> r",
> line 43, in <module>
>     from ryu.topology import switches
>   File "build/bdist.linux-x86_64/egg/ryu/topology/switches.py", line 427,
> in <module>
>   File "build/bdist.linux-x86_64/egg/ryu/topology/switches.py", line 574,
> in Switches
> AttributeError: 'module' object has no attribute 'EventOFPPortStatus'
> 
> [root@hostname ryu]# python ./bin/ryu-manager
> Traceback (most recent call last):
>   File "./bin/ryu-manager", line 55, in <module>
>     from ryu.topology import switches
>   File "build/bdist.linux-x86_64/egg/ryu/topology/switches.py", line 427,
> in <module>
>   File "build/bdist.linux-x86_64/egg/ryu/topology/switches.py", line 574,
> in Switches
> AttributeError: 'module' object has no attribute 'EventOFPPortStatus'
> 
> I found that I could execute ryu-manager correctly from the interactive
> python shell but not from the command line, and looked at the derivation of
> Event classes from pathnames.
> It occurred to me that the eggs would not necessarily include the source
> files, so I tried successfully to make the code look up both source and
> compiled filenames, and return the union of that.
> 
> Signed-off-by: FUJITA Tomonori <[email protected]>
> ---
>  ryu/ofproto/__init__.py | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/ryu/ofproto/__init__.py b/ryu/ofproto/__init__.py
> index 90ead38..ea3c5fa 100644
> --- a/ryu/ofproto/__init__.py
> +++ b/ryu/ofproto/__init__.py
> @@ -22,25 +22,28 @@ from ryu import utils
>  
>  
>  _OFPROTO_DIR = os.path.dirname(__file__)
> +
>  _OFPROTO_PARSER_FILE_NAMES = glob.glob(os.path.join(
> -    _OFPROTO_DIR, 'ofproto_v[0-9]*_[0-9]*_parser.py'))
> +    _OFPROTO_DIR, 'ofproto_v[0-9]*_[0-9]*_parser.py*'))
>  _OFPROTO_PARSER_FILE_NAMES = [os.path.basename(name)
>                                for name in _OFPROTO_PARSER_FILE_NAMES]
>  
>  
>  _OFPROTO_MODULES = {}
>  for parser_file_name in _OFPROTO_PARSER_FILE_NAMES:
> -    # drop lasting '.py'
> -    parser_mod_name = __name__ + '.' + parser_file_name[:-3]
> -    consts_mod_name = parser_mod_name[:-7]      # drop lasting '_parser'
> +    # drop tailing '.py*'
> +    parser_mod_name = __name__ + '.' + \
> +        '.'.join(parser_file_name.split('.')[:-1])
> +    consts_mod_name = parser_mod_name[:-7]      # drop trailing '_parser'
>      try:
>          parser_mod = utils.import_module(parser_mod_name)
>          consts_mod = utils.import_module(consts_mod_name)
>      except:
>          continue
>  
> -    assert consts_mod.OFP_VERSION not in _OFPROTO_MODULES
> -    _OFPROTO_MODULES[consts_mod.OFP_VERSION] = (consts_mod, parser_mod)
> +    #assert consts_mod.OFP_VERSION not in _OFPROTO_MODULES

Oops, I'll remove the above.

> +    if consts_mod.OFP_VERSION not in _OFPROTO_MODULES:
> +        _OFPROTO_MODULES[consts_mod.OFP_VERSION] = (consts_mod, parser_mod)
>  
>  
>  def get_ofp_modules():
> -- 
> 1.7.12.4 (Apple Git-37)
> 
> 
> ------------------------------------------------------------------------------
> Get 100% visibility into Java/.NET code with AppDynamics Lite!
> It's a free troubleshooting tool designed for production.
> Get down to code-level detail for bottlenecks, with <2% overhead. 
> Download for free and get started troubleshooting in minutes. 
> http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
> _______________________________________________
> Ryu-devel mailing list
> [email protected]
> https://lists.sourceforge.net/lists/listinfo/ryu-devel

------------------------------------------------------------------------------
Get 100% visibility into Java/.NET code with AppDynamics Lite!
It's a free troubleshooting tool designed for production.
Get down to code-level detail for bottlenecks, with <2% overhead. 
Download for free and get started troubleshooting in minutes. 
http://pubads.g.doubleclick.net/gampad/clk?id=48897031&iu=/4140/ostg.clktrk
_______________________________________________
Ryu-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/ryu-devel

Reply via email to