-----Original Message-----
From: Steven D'Aprano <st...@pearwood.info>
Sent: 11 January 2020 04:39
To: python-ideas@python.org
Subject: [Python-ideas] Re: python -m quality of life improvements
On Fri, Jan 10, 2020 at 11:53:10PM -0300, Soni L. wrote:
> currently python -m requires you to cwd to the desired package root.
> I'd like to suggest the ability to python -m
> relative/path/to/package/root/module.submodule and python -m
> /absolute/path/to/package/root/module.submodule
Oh, a further thought comes to mind... if your modules aren't on the
PYTHONPATH, just drop the -m and you can execute any legal Python file, even if
the name isn't a legal identifier.
[steve@ando tmp]$ cp ~/python/spam/eggs.py /tmp/"some name".foo
[steve@ando tmp]$ python3.5 "some name.foo"
some name.foo
So as I understand it, the functionality you want already exists, both for
running scripts on the path using -m and scripts with arbitrary file names
without -m.
Have I missed some subtlety in your proposal?
[Steve Barnes]
I did notice one anomaly in the behaviour of python -m:
taking your code structure above and using :
> py -mzipfile -c eggs.zip spam\__init__.py spam\__main__.py spam\eggs.py
to create eggs.zip I can run:
> py eggs.zip
Renaming eggs.zip to eggs.py I can run:
>eggs.py
E:\toolbuild\eggs.py\__main__.py
Or
>py eggs.py
E:\toolbuild\eggs.py\__main__.py
But get problems when I try:
> py -meggs.py
Traceback (most recent call last):
File "C:\Python38_64\lib\runpy.py", line 183, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
File "C:\Python38_64\lib\runpy.py", line 109, in _get_module_details
__import__(pkg_name)
ValueError: source code string cannot contain null bytes
Gadget@GADGETLAPTOP E:\toolbuild
> py -meggs
Traceback (most recent call last):
File "C:\Python38_64\lib\runpy.py", line 183, in _run_module_as_main
mod_name, mod_spec, code = _get_module_details(mod_name, _Error)
File "C:\Python38_64\lib\runpy.py", line 153, in _get_module_details
code = loader.get_code(mod_name)
File "<frozen importlib._bootstrap_external>", line 916, in get_code
File "<frozen importlib._bootstrap_external>", line 846, in source_to_code
File "<frozen importlib._bootstrap>", line 219, in _call_with_frames_removed
ValueError: source code string cannot contain null bytes
Is this expected behaviour or worth a ticket and some time investigating
further?
This was on Windows 10/64 with 3.8-64 but I get exactly the same with 3.7-64/32
& 2.7 and with python rather than py.
Gadget/Steve
_______________________________________________
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/ZP6Y2RP6QOLJX6KL6J5WA27256SIF6AJ/
Code of Conduct: http://python.org/psf/codeofconduct/