poetry script fails to find module

Loris Bennett loris.bennett at fu-berlin.de
Thu Jul 28 10:14:37 EDT 2022


"Loris Bennett" <loris.bennett at fu-berlin.de> writes:

> Hi,
>
> The following is a little bit involved, but I hope can make the problem clear.
>
> Using poetry I have written a dummy application which just uses to typer
> to illustrate a possible interface design.  The directory structure is a
> follows: 
>
>   $ tree -P *.py
>   .
>   |-- dist
>   |-- stoat
>   |   |-- hpc
>   |   |   |-- database.py
>   |   |   |-- group.py
>   |   |   |-- __init__.py
>   |   |   |-- main.py
>   |   |   |-- owner.py
>   |   |   `-- user.py
>   |   |-- __init__.py
>   |   |-- main.py
>   |   `-- storage
>   |       |-- database.py
>   |       |-- group.py
>   |       |-- __init__.py
>   |       |-- main.py
>   |       |-- owner.py
>   |       |-- share.py
>   |       `-- user.py
>   `-- tests
>       |-- __init__.py
>       `-- test_stoat.py
>
> With in the poetry shell I can run the application successfully:
>
>   $ python stoat/main.py hpc user --help                                                                           
>   Usage: main.py hpc user [OPTIONS] COMMAND [ARGS]...
>
>     manage HPC users
>
>   Options:
>     --help  Show this message and exit.
>
>   Commands:
>     add     add a user
>     remove  remove a user
>
> I then install this in a non-standard path (because the OS Python3 is
> 3.6.8) and can run the installed version successfully:
>
>   $ PYTHONPATH=/trinity/shared/zedat/lib/python3.9/site-packages python /trinity/shared/zedat/lib/python3.9/site-packages/stoat/main.py hpc user --help
>   Usage: main.py hpc user [OPTIONS] COMMAND [ARGS]...
>
>     manage HPC users
>
>   Options:
>     --help  Show this message and exit.
>
>   Commands:
>     add     add a user
>     remove  remove a user
>
> However, poetry creates a script 'stoat' from the entry
>
>   [tool.poetry.scripts]
>   stoat = "stoat.main:main"
>
> in pyproject.toml, which looks like
>
>   #!/trinity/shared/easybuild/software/Python/3.9.6-GCCcore-11.2.0/bin/python3.9
>   # -*- coding: utf-8 -*-
>   import re
>   import sys
>   from stoat.main import main
>   if __name__ == '__main__':
>       sys.argv[0] = re.sub(r'(-script\.pyw|\.exe)?$', '', sys.argv[0])
>       sys.exit(main())
>
> If I run that I get 
>
>   $ PYTHONPATH=/trinity/shared/zedat/lib/python3.9/site-packages stoat hpc user --help
>   Traceback (most recent call last):
>     File "/trinity/shared/zedat/bin/stoat", line 5, in <module>
>       from stoat.main import main
>     File "/trinity/shared/zedat/lib/python3.9/site-packages/stoat/main.py", line 3, in <module>
>       import hpc.main
>   ModuleNotFoundError: No module named 'hpc'
>
> Why is the module 'hpc' not found by the poetry script?

Never mind, I worked it out.  I had to replace 

  import hpc.main

with

  import stoat.hpc.main

However, this raises the question of why it worked in the first place
in the poetry shell. 

Cheers,

Loris

-- 
This signature is currently under construction.


More information about the Python-list mailing list