On 02Apr2019 0817, Calvin Spealman wrote:
(I originally posted this to python-ideas, where I was told none of this PEP's authors subscribe so probably no one will see it there, so I'm posting it here to raise the issue where it can get seen and hopefully discussed)

Correct, thanks for posting. (I thought we had a "discussions-to" tag with distutils-sig on it, but apparently not.)

While the PEP does show the version number as part of the path to the actual packages, implying support for multiple versions, this doesn't seem to be spelled out in the actual text. Presumably __pypackages__/3.8/ might sit beside __pypackages__/3.9/, etc. to keep future versions capable of installing packages for each version, the way virtualenv today is bound to one version of Python.

I'd like to raise a potential edge case that might be a problem, and likely an increasingly common one: users with multiple installations of the *same* version of Python. This is actually a common setup for Windows users who use WSL, Microsoft's Linux-on-Windows solution, as you could have both the Windows and Linux builds of a given Python version installed on the same machine. The currently implied support for multiple versions would not be able to separate these and could create problems if users pip install a Windows binary package through Powershell and then try to run a script in Bash from the same directory, causing the Linux version of Python to try to use Windows python packages.

I'm not actually sure what the solution here is. Mostly I wanted to raise the concern, because I'm very keen on WSL being a great entry path for new developers and I want to make that a better experience, not a more confusing one. Maybe that version number could include some other unique identify, maybe based on Python's own executable. A hash maybe? I don't know if anything like that already exists to uniquely identify a Python build or installation.

Yes, this is a situation we're aware of, and it's caught in the conflict of "who is this feature meant to support".

Since all platforms have a unique extension module suffix (e.g. "module.cp38-win32.pyd"), it would be possible to support this with "fat" packages that include all binaries (or some clever way of merging wheels for multiple platforms).

And since this is already in CPython itself, it leads to about the only reasonable solution - instead of "3.8", use the extension module suffix "cp38-win32". (Wheel tags are not in core CPython, so we can't use those.)

But while this seems obvious, it also reintroduces problems that this has the potential to fix - suddenly, just like installing into your global environment, your packages are not project-specific anymore but are Python-specific. Which is one of the major confusions people run into ("I pip installed X but now can't import it in python").

So the main points of discussion right now are "whose problem does this solve" and "when do we tell people they need a full venv". And that discussion is mostly happening at https://discuss.python.org/t/pep-582-python-local-packages-directory/963/

Cheers,
Steve
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to