why are we allowed to have fancy `python /path/to/foo.py` but not fancy `python -m /path/to/foo`? if `python` was capable of detecting modules and automatically deciding package roots, none of this would even be an argument and I'd just use `python /path/to/module/submodule/__main__.py` (with "module" having an __init__.py) and be done with it. but python can't do that because backwards compatibility and whatnot.

so I propose we shove the solution into python -m instead. why's that so bad? it's simply ergonomics.

On 2020-01-11 6:28 p.m., Juancarlo Añez wrote:
Soni,

Perhaps what you're looking for is available by writing a short Python program with a shebang? Then PYTHONPATH would be set to the directory of the program (many small projects include a `run.py` in the project's base directory).

You can also place the program in ~/bin if it does `export PYTHONPATH`.

Then, I have this alias for one of my home-brewed tools, and it works as I want:

    alias chubby='PYTHONPATH=~/chubby ~/.virtualenvs/chubby/bin/python
    -Oum chubby'


I too think that the semantics of `python -m` are fine.

On Sat, Jan 11, 2020 at 1:46 PM Soni L. <fakedme...@gmail.com <mailto:fakedme%2...@gmail.com>> wrote:

    I just want python foo/bar/baz/qux/__main__.py but with imports that
    actually work. -m works, but requires you to cd. -m with path
    would be
    an more than huge improvement.

    and it absolutely should look for the given module in the given path.
    not "anywhere in the PYTHONPATH".

    On 2020-01-11 2:21 p.m., Steven D'Aprano wrote:
    > On Sat, Jan 11, 2020 at 11:27:51AM -0300, Soni L. wrote:
    >
    > > PYTHONPATH=foo/bar python -m baz.qux
    > >
    > > becomes
    > >
    > > python -m foo/bar/baz.qux
    > >
    > > which is less of a kludge.
    >
    > Sorry Soni, I completely disagree with you.
    >
    > The status quo `PYTHONPATH=foo/bar python -m baz.qux` is
    explicit about
    > changing the PYTHONPATH and it uses a common, standard shell
    feature.
    > This takes two well-designed components that work well, and can be
    > understood in isolation, and plugging them together. The first
    part of
    > the command explicitly sets the PYTHONPATH, the second part of the
    > command searches the PYTHONPATH for the named module.
    >
    > Far from being a kludge, I think this is elegant, effective design.
    >
    > It seems to me that your proposed syntax is the kludge: it mixes
    > pathnames and module identifiers into a complex, potentially
    > ambiguous "half path, half module spec" hybrid:
    >
    >      foo/bar/baz.qux
    >      * foo/bar/ is a pathname
    >      * baz.qux is a fully-qualified module identifier, not a
    file name
    >
    > The reader has to read that and remember that even though it looks
    > exactly like a pathname, it isn't, it does not refer to the file
    > "baz.qux" in directory "foo/bar/". It means:
    >
    > * temporarily add "foo/bar/" to the PYTHONPATH
    > * find package "baz" (which could be anywhere in the PYTHONPATH)
    > * run the module baz.qux (which might not be qux.py)
    >
    >
    _______________________________________________
    Python-ideas mailing list -- python-ideas@python.org
    <mailto:python-ideas@python.org>
    To unsubscribe send an email to python-ideas-le...@python.org
    <mailto:python-ideas-le...@python.org>
    https://mail.python.org/mailman3/lists/python-ideas.python.org/
    Message archived at
    
https://mail.python.org/archives/list/python-ideas@python.org/message/L7RRKAML6GWYXN4ULLD3U2ZOLS6CC4HM/
    Code of Conduct: http://python.org/psf/codeofconduct/



--
Juancarlo *Añez*

_______________________________________________
Python-ideas mailing list -- python-ideas@python.org
To unsubscribe send an email to python-ideas-le...@python.org
https://mail.python.org/mailman3/lists/python-ideas.python.org/
Message archived at 
https://mail.python.org/archives/list/python-ideas@python.org/message/7JZ3VVEDYBJ6RST76SAT7AI3HA2YLWB7/
Code of Conduct: http://python.org/psf/codeofconduct/

Reply via email to