On Wed, 23 Apr 2025 19:31:36 +0300, Andy Shevchenko wrote: > On Wed, Apr 23, 2025 at 06:30:48PM +0900, Akira Yokosawa wrote: >> On Tue, 22 Apr 2025 10:57:33 +0300, Andy Shevchenko wrote: >>> On Mon, Apr 21, 2025 at 10:35:29AM -0600, Jonathan Corbet wrote: >>>> Dmitry Baryshkov <dmitry.barysh...@oss.qualcomm.com> writes: > > [...] > >>>>> Would it be possible to properly support O= and create pyc / pycache >>>>> inside the object/output dir? >>>> >>>> I have to confess, I've been wondering if we should be treating the .pyc >>>> files like we treat .o files or other intermediate products. Rather >>>> than trying to avoid their creation entirely, perhaps we should just be >>>> sure they end up in the right place and are properly cleaned up...? >>>> >>>> To answer Dmitry's question, it seems that setting PYTHONPYCACHEPREFIX >>>> should do the trick? >>> >>> It's not so easy. The Python is written in a way that it thinks it will >>> never >>> runs object files separately from the source. Hence that variable sets only >>> the folder per script as _home_ for the cache. It's completely unusable. >>> They >>> took it wrong. It still can be _painfully_ used, but it will make Makefiles >>> uglier. >> >> But, PYTHONPYCACHEPREFIX can be set as an environment variable. >> >> For example, try: >> >> export PYTHONPYCACHEPREFIX="$HOME/.cache/__pycache__" >> >> Wouldn't it be good enough for you? > > Of course not. We have _many_ scripts in python in kernel and having a cache > there for _all_ of them is simply WRONG. You never know what clashes can be > there with two complicated enough scripts which may have same module names, > etc. >
Interesting... I'm suspecting you replied without having tried the setting... FYI, this is an excerpt from list of .pyc files under __pycache__ after building defconfig kernel and "make htmldocs"; and running $ find . -name *.pyc" -print" under ~/.cache/__pycache__ --------------------------------------------------------------------- ./home/.../git/linux/scripts/lib/kdoc/kdoc_files.cpython-312.pyc ./home/.../git/linux/scripts/lib/kdoc/kdoc_parser.cpython-312.pyc ./home/.../git/linux/scripts/lib/kdoc/kdoc_re.cpython-312.pyc ./home/.../git/linux/scripts/lib/kdoc/kdoc_output.cpython-312.pyc [...] ./usr/lib/python3.12/xml/__init__.cpython-312.pyc ./usr/lib/python3.12/xml/parsers/expat.cpython-312.pyc ./usr/lib/python3.12/xml/parsers/__init__.cpython-312.pyc ./usr/lib/python3.12/xml/etree/ElementPath.cpython-312.pyc ./usr/lib/python3.12/xml/etree/__init__.cpython-312.pyc ./usr/lib/python3.12/xml/etree/cElementTree.cpython-312.pyc ./usr/lib/python3.12/xml/etree/ElementTree.cpython-312.pyc ./usr/lib/python3.12/mimetypes.cpython-312.pyc [...] ./usr/lib/python3/dist-packages/sphinx/deprecation.cpython-312.pyc ./usr/lib/python3/dist-packages/sphinx/highlighting.cpython-312.pyc ./usr/lib/python3/dist-packages/sphinx/pycode/ast.cpython-312.pyc ./usr/lib/python3/dist-packages/sphinx/pycode/__init__.cpython-312.pyc ./usr/lib/python3/dist-packages/sphinx/pycode/parser.cpython-312.pyc ./usr/lib/python3/dist-packages/sphinx/config.cpython-312.pyc [...] ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/deprecation.cpython-312.pyc ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/highlighting.cpython-312.pyc ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/pycode/ast.cpython-312.pyc ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/pycode/__init__.cpython-312.pyc ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/pycode/parser.cpython-312.pyc ./home/.../sphinx-WIP/lib/python3.12/site-packages/sphinx/config.cpython-312.pyc [...] ------------------------------------------------------------------------- As you see, each of them are stored at a path corresponding to its original .py file. The final part of the excerpt came from me running in-development Sphinx in a python venv with the same PYTHONPYCACHEPREFIX setting. I don't see any possibility of clashes as you mentioned above, quoting again: > We have _many_ scripts in python in kernel and having a cache > there for _all_ of them is simply WRONG. You never know what clashes can be > there with two complicated enough scripts which may have same module names, > etc. Or my imagination might be too limited to see your point ... Regards, Akira