[x3d-public] x3d.py pip packake problems and potential solution

Andreas Plesch andreasplesch at gmail.com
Thu Apr 23 12:24:59 PDT 2020


Hi Don,

PyPi requirements are met but that does not necessarily mean there is
any functionality.

I think you still need to add this line to the autogeneration of __init__.py

# import the x3d.py module
from x3d import *

since I did not see it in the file you attached. Without it, the
package is installed and can be imported but the imported object does
not have any attributes or methods. With it, the x3d module from
x3d.py gets imported and then the classes it provides exported as
properties of the (new) module provided by the package.

It is a bit confusing since in the __init__.py file the "x3d" in "from
x3d import *" refers to the x3d.py file included in the package while
after installation of the x3d PyPi package 'import x3d' in a python
script refers to the imported package.

I am not a PyPi expert and there may be other ways to properly package
but adding the above line seemed like a good solution. I think without
it the python system is not aware of the x3d.py file and the objects
it provides.

Can you reproduce the error below on a system which does not
previously have x3d.py anywhere ?

> > $ pip install x3d
> > Collecting x3d
> >    Downloading https://files.pythonhosted.org/packages/3b/4b/2a7cb8f738e5bf03beb729989fc1c0f52a86ddf61ea3fb38c61c55afd41b/x3d-0.0.26-py3-none-any.whl
> > (204kB)
> >       |████████████████████████████████| 204kB 5.6MB/s
> > Installing collected packages: x3d
> > Successfully installed x3d-0.0.26
> > $ python
> > Python 3.7.3 | packaged by conda-forge | (default, Jul  1 2019, 21:52:21)
> > [GCC 7.3.0] :: Anaconda, Inc. on linux
> > Type "help", "copyright", "credits" or "license" for more information.
> >>>> import x3d
> >>>> x3d.X3D()
> > Traceback (most recent call last):
> >    File "<stdin>", line 1, in <module>
> > AttributeError: module 'x3d' has no attribute 'X3D'

-Andreas

On Thu, Apr 23, 2020 at 2:46 PM Don Brutzman <brutzman at nps.edu> wrote:
>
> Thanks for your note Andreas.  __init__.py is autogenerated from X3DUOM whenever producing x3d.py package.
>
> Latest is attached, also online at
>
> * https://sourceforge.net/p/x3d/code/30232/tree/www.web3d.org/x3d/stylesheets/python/x3d/
>
> * https://sourceforge.net/p/x3d/code/30232/tree/www.web3d.org/x3d/stylesheets/python/x3d/__init__.py
>
> Just rechecked, yes 'X3D' is present there on line following # Statements
>
> Perhaps __init__.py isn't included properly?? Everything seems to pass PyPi requirements.
>
> I suspect you have to either use 'X3D' or 'x3d.X3D' according to how you have imported.  All the examples I'm testing/producing avoid the prefix, but I think there is a unit test in there.  Can add more tests, or improve documentation, as you think best.
>
> Shouldn't matter but am using latest Python (currently 3.8.2) in my testing.
>
> So, not seeing something to fix... let's persist please until this is sorted out satisfactorily.
>
>
>
> On 4/23/2020 7:00 AM, Andreas Plesch wrote:
> > Importing the x3d.py module from the x3d.py file works (if the x3d.py
> > file is in te python path).
> >
> > For convenience, there is also x3d python package (pip) which is
> > available from the pip registry and can be installed by:
> >
> > pip install x3d
> >
> > to the system python modules.
> >
> > However, this does not quite work:
> >
> > $ pip install x3d
> > Collecting x3d
> >    Downloading https://files.pythonhosted.org/packages/3b/4b/2a7cb8f738e5bf03beb729989fc1c0f52a86ddf61ea3fb38c61c55afd41b/x3d-0.0.26-py3-none-any.whl
> > (204kB)
> >       |████████████████████████████████| 204kB 5.6MB/s
> > Installing collected packages: x3d
> > Successfully installed x3d-0.0.26
> > jovyan at jupyter-gesiscss-2dnotebo-2dgetting-5fstarted-2d7wbaxlkp:~$ python
> > Python 3.7.3 | packaged by conda-forge | (default, Jul  1 2019, 21:52:21)
> > [GCC 7.3.0] :: Anaconda, Inc. on linux
> > Type "help", "copyright", "credits" or "license" for more information.
> >>>> import x3d
> >>>> x3d.X3D()
> > Traceback (most recent call last):
> >    File "<stdin>", line 1, in <module>
> > AttributeError: module 'x3d' has no attribute 'X3D'
> >
> > I think what is needed is to actually import the module in the
> > __init__.py file for the pip package.
> >
> > # __init__.py needed for properly configuring pypi distribution of
> > x3d.py package
> >
> > # According to _Learning Python_ by Mark Lutz, fifth edition:
> > # - Empty __init.py__ no longer required as of Python 3.3.  p. 761
> > # - Using __init.py__ is performance advantage for loading, even when
> > empty.  p. 761
> > # - Using __all__ list to define exported values for import * is
> > allowed but not required.  p. 735 and 771-772.
> >
> > # 6.4.1. Importing * From a Package
> > # https://docs.python.org/3/tutorial/modules.html#importing-from-a-package
> >
> > # indicates that
> > #     from packagename import *
> > # "then imports whatever names are defined in the package" and
> > # "Although certain modules are designed to export only names that
> > follow certain patterns when you use import *,
> > #     it is still considered bad practice in production code."
> >
> > # TODO testing continues to fix x3d.py package's class visibility
> > satisfactorily for end users
> >
> > ## import the x3d.py module
> > from x3d import *
> >
> > __all__ = [
> >      # Field types
> >
> > With that change in the __init__.py file, the pip package works for me:
> >
> > $ python
> > Python 3.7.6 | packaged by conda-forge | (default, Jan  7 2020, 22:33:48)
> > [GCC 7.3.0] on linux
> > Type "help", "copyright", "credits" or "license" for more information.
> >>>> import x3d
> > x3d.py package loaded, have fun with X3D Graphics!
> >>>> x3d.X3D
> > <class 'x3d.X3D'>
> >>>> x3d.Box().toXML()
> > '<Box/>\n'
> >>>>
> >
> > Perhaps this change could be applied to the next release of the x3d
> > pip package. I could not find the __init__.py file on sourceforge.
> >
> > Cheers,
> >
> > -Andreas
> >
>
> all the best, Don
> --
> Don Brutzman  Naval Postgraduate School, Code USW/Br       brutzman at nps.edu
> Watkins 270,  MOVES Institute, Monterey CA 93943-5000 USA   +1.831.656.2149
> X3D graphics, virtual worlds, navy robotics http://faculty.nps.edu/brutzman



-- 
Andreas Plesch
Waltham, MA 02453



More information about the x3d-public mailing list