Skip to content

Don't name the module "cmd" #19

@msander

Description

@msander

I created a CLI module for my weekend project and called it "cmd.py".
This leads to the following exception:

/home/marcel/.virtualenvs/ultrabak/bin/python /home/marcel/git/ultrabak/ultrabak/cmd.py
Traceback (most recent call last):
  File "/home/marcel/git/ultrabak/ultrabak/cmd.py", line 1, in <module>
    import fire
  File "/home/marcel/git/python-fire/fire/__init__.py", line 21, in <module>
    from fire.core import Fire
  File "/home/marcel/git/python-fire/fire/core.py", line 62, in <module>
    from fire import completion
  File "/home/marcel/git/python-fire/fire/completion.py", line 25, in <module>
    from fire import inspectutils
  File "/home/marcel/git/python-fire/fire/inspectutils.py", line 23, in <module>
    import IPython
  File "/home/marcel/.virtualenvs/ultrabak/lib/python3.5/site-packages/ipython-5.3.0-py3.5.egg/IPython/__init__.py", line 48, in <module>
    from .core.application import Application
  File "/home/marcel/.virtualenvs/ultrabak/lib/python3.5/site-packages/ipython-5.3.0-py3.5.egg/IPython/core/application.py", line 25, in <module>
    from IPython.core import release, crashhandler
  File "/home/marcel/.virtualenvs/ultrabak/lib/python3.5/site-packages/ipython-5.3.0-py3.5.egg/IPython/core/crashhandler.py", line 28, in <module>
    from IPython.core import ultratb
  File "/home/marcel/.virtualenvs/ultrabak/lib/python3.5/site-packages/ipython-5.3.0-py3.5.egg/IPython/core/ultratb.py", line 119, in <module>
    from IPython.core import debugger
  File "/home/marcel/.virtualenvs/ultrabak/lib/python3.5/site-packages/ipython-5.3.0-py3.5.egg/IPython/core/debugger.py", line 46, in <module>
    from pdb import Pdb as OldPdb
  File "/usr/lib/python3.5/pdb.py", line 135, in <module>
    class Pdb(bdb.Bdb, cmd.Cmd):
AttributeError: module 'cmd' has no attribute 'Cmd'

After renaming it to "cli.py" everything works as expected. The reason is that the cmd module is added to the pythonpath if it is executed like this and covers python's cmd module. It works if the cmd module is executed as a submodule (python -m ultrabak.cmd or using entry_points).

As cmd.py could be a common name for a CLI, I'd suggest to add a note somewhere in the docs.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions