[Tutor] ModuleNotFoundError in Terminal, PyCharm OK
dn
PythonList at DancesWithMice.info
Tue Jul 11 22:28:28 EDT 2023
Not using setuptools myself, am not competent to respond. Perhaps
A.N.Other will offer guidance?
Am glad to see that the project is coming-together - that you have
achieved success(es) in some areas, and have a plan to continue (and
continue learning). Good one!
On 12/07/2023 09.26, trent shipley wrote:
> It took me forever to figure out I could use the Python path to call the
> executable on the command line instead of the file path. That was after
> getting an error message which led to the great insight that all Python
> package examples were singly rooted with a single source--while I was
> trying to have sibling src and tests directories. I would up using
> setuptools in an effort to get absolute Python path names to work. I'm not
> sure it was needed, but absolute Python path names for modules are now
> working.
>
> Please confirm the setuptools build artifacts should go in .gitignore.
>
> Kivy has been provisionally selected as my GUI framework. I'm working
> through the documentation and tutorials prior to jumping into the RPG-GUI
> version. (There is no demand for that. The CLI suits my needs, but the
> RPG-GUI is a personal stretch goal.)
>
> (venv) trent at trent-virtual-machine:~/pythonworkspace/hackable_dice_roller$
> python3 -m src.cli.shdroll --base 1 --sides 6 --dice 3 --rolls 3
> d6_0 d6_1 d6_2 3_*_d6_roll_total grand_total
> 0 1 4 4 9 37
> 1 1 6 4 11 37
> 2 6 6 5 17 37
> (venv) trent at trent-virtual-machine:~/pythonworkspace/hackable_dice_roller$
> tree --gitignore
> .
> ├── build
> │ ├── bdist.linux-x86_64
> │ └── lib
> │ ├── api
> │ │ ├── core.py
> │ │ └── __init__.py
> │ ├── cli
> │ │ ├── __init__.py
> │ │ ├── shdroll_cli_parser.py
> │ │ └── shdroll.py
> │ ├── gui
> │ │ ├── __init__.py
> │ │ └── simple_gui
> │ │ ├── __init_.py
> │ │ └── __init__.py
> │ └── tests
> │ ├── api
> │ │ ├── __init__.py
> │ │ ├── test_hdr_core.py
> │ │ └── test_hdr_core_visually.py
> │ ├── cli
> │ │ ├── __init__.py
> │ │ └── test_shdroll_visual.py
> │ ├── gui
> │ │ ├── __init__.py
> │ │ └── simple_gui
> │ │ └── __init__.py
> │ └── __init__.py
> ├── dist
> │ ├── src-0.0.1-py3.11.egg
> │ ├── src-0.0.1-py3-none-any.whl
> │ └── src-0.0.1.tar.gz
> ├── hackable_dice_roller.toml
> ├── README
> ├── setup.cfg
> ├── setup.py
> └── src
> ├── api
> │ ├── core.py
> │ ├── __init__.py
> │ └── __pycache__
> ├── cli
> │ ├── __init__.py
> │ ├── __pycache__
> │ ├── shdroll_cli_parser.py
> │ └── shdroll.py
> ├── gui
> │ ├── __init__.py
> │ ├── __pycache__
> │ └── simple_gui
> │ ├── __init__.py
> │ └── __pycache__
> ├── __init__.py
> ├── __pycache__
> ├── src.egg-info
> │ ├── dependency_links.txt
> │ ├── PKG-INFO
> │ ├── SOURCES.txt
> │ └── top_level.txt
> └── tests
> ├── api
> │ ├── __init__.py
> │ ├── __pycache__
> │ ├── test_hdr_core.py
> │ └── test_hdr_core_visually.py
> ├── cli
> │ ├── __init__.py
> │ ├── __pycache__
> │ ├── test.csv
> │ ├── test_shdroll_visual.py
> │ └── test.xlsx
> ├── gui
> │ ├── __init__.py
> │ └── simple_gui
> │ └── __init__.py
> ├── __init__.py
> └── __pycache__
>
> 32 directories, 46 files
>
> On Wed, Jun 28, 2023 at 3:00 PM dn via Tutor <tutor at python.org> wrote:
>
>> On 29/06/2023 08.53, trent shipley wrote:
>>> Hi dn,
>>>
>>> #1 was not very useful, but #5
>>>
>> https://docs.python.org/3/reference/import.html#:~:text=5.4.5.-,module.__path__,search%20for%20modules%20during%20import
>> .
>>> was
>>> quite useful
>>>
>>> I discovered that bash had no PYTHONPATH environment variable, and that
>>
>> Did you discover this by looking from BASH, or did you use Python (while
>> it is running) to survey the paths?
>>
>> (Python sets it up when the interpreter starts)
>>
>>
>>> PyCharm had obligingly intelligently populated it. (And if I changed the
>>> file structure, I had to manually inform PyCharm I had changed it, even
>> if
>>> I used the "refactor" feature.)
>>>
>>> I wound up with this:
>>>
>>> # shdroll.py
>>> import sys
>>> sys.path.extend(['../../..', # Important
>>> '../../../src', # Stuff
>>> '../../../src/core']) # Here
>>> from simple_hdroll_cli_parser import SimpleHDRollCliParser
>>> from src.core import core
>>>
>>> parse_cli_args = SimpleHDRollCliParser()
>>> kwargs = parse_cli_args.parse()
>>>
>>> if kwargs.add is not None:
>>> transform = core.add_currying(kwargs.add)
>>> elif kwargs.mult is not None:
>>> transform = core.multiply_currying(kwargs.mult)
>>> else:
>>> transform = None # not strictly necessary, but it makes my brain
>> hurt
>>> less
>>>
>>> # Create a die
>>> die = core.IntegerDie(transform_fn=transform,
>>> sides=kwargs.sides,
>>> bottom=kwargs.base)
>>>
>>>
>>> *
>>>
>>> *
>>>
>>> *
>>>
>>>
>>>
>>> print(rolls.to_string())
>>>
>>> -------
>>>
>>> I also wound up with a src.py file in the ./hackable_dice_roller/src
>>> directory so it would stop complaining about a missing module in the src
>>> package. src.py has one line.
>>>
>>> from src.core import core
>>>
>>> Was that what you had in mind, or did I come up with a singularly ugly
>> and
>>> unPythonic solution?
>>
>> Yes it does seem ugly, doesn't it. However, that is a good sign. The
>> very next sentence should be a question: "is there a better way?".
>>
>> Congratulations! (?) You are now ready to discuss Modules
>> (https://docs.python.org/3/tutorial/modules.html) which will lead into
>> "packages", and the exact scenario under discussion...
>>
>> NB whilst much discussion centers around mechanisms to deliver (your)
>> libraries to A.N.Other, you can also be your own 'customer'.
>>
>>
>> That said, there does seem to be many 'layers' of directories. If you
>> suspect so, perhaps you could draw-up a chart to show how the code-units
>> have been separated/laid-out, to aid discussion?
>>
>> --
>> Regards,
>> =dn
>> _______________________________________________
>> Tutor maillist - Tutor at python.org
>> To unsubscribe or change subscription options:
>> https://mail.python.org/mailman/listinfo/tutor
>>
> _______________________________________________
> Tutor maillist - Tutor at python.org
> To unsubscribe or change subscription options:
> https://mail.python.org/mailman/listinfo/tutor
--
Regards,
=dn
More information about the Tutor
mailing list