[ 
https://issues.apache.org/jira/browse/BEAM-9130?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17018227#comment-17018227
 ] 

Chad Dombrova commented on BEAM-9130:
-------------------------------------

{quote}
My solution doesn't require the workaround in setup.py, which TBH I still don't 
fully follow.
{quote}

It's some seriously esoteric python stuff, but here's a terse summary.  The 
protobuf package in python2 is installed as "protobuf", but it uses a 
protobuf-3.11.0-py3.7-nspkg.pth file (living next to the installed package) to 
mount the package under the "google" namespace package.  This was an effort by 
google to allow all of their various python libs to install into one parent 
"google" namespace.  All well and good except that .pth files don't work unless 
they are in one of the special directories returned by 
{{site.getsitepackages()}}, which is by default just the python interpreter's 
native lib and site-packges directories.  So if you ever do a non-standard 
install of protobuf (i.e. using {{pip install --target}}) then the .pth file is 
not read and executed by the python interpreter and the package cannot be 
imported as {{google.protobuf}}. 

Got all that?  Well you can forget it all now, because they added official 
support for namespace packages in python3 that don't require this .pth hack  :)

{quote}
WDYT about my fix, which essentially matches what setupVirtualenv does?
{quote}

Making this match setupVirtualenv is definitely the right fix.  Obvious in 
retrospect!

This has gotten me motivated to revisit my pep517 changes again.  I would love 
some help on it if you have time. 




> sdks:python:test-suites:direct:py2:hdfsIntegrationTest is failing with 
> ImportError: No module named google.protobuf.message
> ---------------------------------------------------------------------------------------------------------------------------
>
>                 Key: BEAM-9130
>                 URL: https://issues.apache.org/jira/browse/BEAM-9130
>             Project: Beam
>          Issue Type: Improvement
>          Components: test-failures
>            Reporter: Valentyn Tymofieiev
>            Priority: Major
>              Labels: currently-failing
>          Time Spent: 50m
>  Remaining Estimate: 0h
>
> From logs:
> {noformat}
> 16:33:50    File "/usr/local/lib/python2.7/multiprocessing/process.py", line 
> 267, in _bootstrap
> 16:33:50      self.run()
> 16:33:50    File "/usr/local/lib/python2.7/multiprocessing/process.py", line 
> 114, in run
> 16:33:50      self._target(*self._args, **self._kwargs)
> 16:33:50    File "/app/sdks/python/gen_protos.py", line 357, in 
> _install_grpcio_tools_and_generate_proto_files
> 16:33:50      generate_proto_files(force=force)
> 16:33:50    File "/app/sdks/python/gen_protos.py", line 324, in 
> generate_proto_files
> 16:33:50      generate_urn_files(log, out_dir)
> 16:33:50    File "/app/sdks/python/gen_protos.py", line 65, in 
> generate_urn_files
> 16:33:50      import google.protobuf.message as message
> 16:33:50  ImportError: No module named google.protobuf.message
> 16:33:50  Traceback (most recent call last):
> 16:33:50    File "setup.py", line 305, in <module>
> 16:33:50      'mypy': generate_protos_first(mypy),
> 16:33:50    File 
> "/usr/local/lib/python2.7/site-packages/setuptools/__init__.py", line 145, in 
> setup
> 16:33:50      return distutils.core.setup(**attrs)
> 16:33:50    File "/usr/local/lib/python2.7/distutils/core.py", line 151, in 
> setup
> 16:33:50      dist.run_commands()
> 16:33:50    File "/usr/local/lib/python2.7/distutils/dist.py", line 953, in 
> run_commands
> 16:33:50      self.run_command(cmd)
> 16:33:50    File "/usr/local/lib/python2.7/distutils/dist.py", line 972, in 
> run_command
> 16:33:50      cmd_obj.run()
> 16:33:50    File 
> "/usr/local/lib/python2.7/site-packages/setuptools/command/sdist.py", line 
> 44, in run
> 16:33:50      self.run_command('egg_info')
> 16:33:50    File "/usr/local/lib/python2.7/distutils/cmd.py", line 326, in 
> run_command
> 16:33:50      self.distribution.run_command(command)
> 16:33:50    File "/usr/local/lib/python2.7/distutils/dist.py", line 972, in 
> run_command
> 16:33:50      cmd_obj.run()
> 16:33:50    File "setup.py", line 229, in run
> 16:33:50      gen_protos.generate_proto_files(log=log)
> 16:33:50    File "/app/sdks/python/gen_protos.py", line 291, in 
> generate_proto_files
> 16:33:50      raise ValueError("Proto generation failed (see log for 
> details).")
> 16:33:50  ValueError: Proto generation failed (see log for 
> details
> {noformat}
> {noformat}
> import google.protobuf.message as message
> ImportError: No module named google.protobuf.message
> {noformat}



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to