poetry script fails to find module

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


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?

Cheers,

Loris

-- 
This signature is currently under construction.


More information about the Python-list mailing list