Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > comp.lang.python > #197422
| From | Thomas Passin <list1@tompassin.net> |
|---|---|
| Newsgroups | comp.lang.python |
| Subject | Re: Pip installs to unexpected place |
| Date | 2025-04-19 15:56 -0400 |
| Message-ID | <mailman.25.1745092587.3008.python-list@python.org> (permalink) |
| References | (7 earlier) <m6dnueFg8f0U1@mid.individual.net> <20250418153848.w2hmxpegl3uwii3w@hjp.at> <e1cce2f7-e59b-42bb-95ee-602f241f545b@tompassin.net> <20250419085614.vbgzh7h7hggyhzsd@hjp.at> <0a88a780-0921-469b-a649-48f57cf972b4@tompassin.net> |
On 4/19/2025 4:56 AM, Peter J. Holzer via Python-list wrote: > On 2025-04-18 13:08:36 -0400, Thomas Passin via Python-list wrote: >> On 4/18/2025 11:38 AM, Peter J. Holzer via Python-list wrote: >>> On 2025-04-18 13:24:28 +1200, Greg Ewing via Python-list wrote: >>>> On 18/04/25 9:41 am, Mats Wichmann wrote: >>>>> There's just not a really great answer to this. >>>> >>>> Seems to me a system-installed application shouldn't be looking in the >>>> user's .local packages in the first place. That should only be for things >>>> the user has installed "for this user". >>> >>> It's not the application that looks into .local, it's Python. If you say >>> that a system-installed Python shouldn't look into ~/.local, then you've >>> just disabled that mechanism completely. If not then Python would >>> somehow have to distinguish between system-installed and user-installed >>> scripts. This isn't as easy as checking whether the path starts with >>> /usr/bin or whether it belongs to root. Tying into the system's package >>> manager doesn't look appealing to me (not to mention that it might be >>> unacceptably slow). >> >> Let's try a specific example. Let's say that PyQt6 v6.8.3 is installed in >> the system site directory. The OS uses PyQt6 for some system purposes. Now >> the user comes along and forces an install of PyQt6 v6.9.0 in the user site >> directory. 6.9.0 has a bug that would crash one of the system's application >> but not the user's programs. (This is not a far-fetched scenario). > > Agreed. Also since PyQt6 is a GUI framework, I'm going to assume that > those applications are supposed to be invoked by the user on their > desktop, not by a cronjob controlled by the system. > > >> When the system launches its application the PYTHONPATH will start with >> system site directories; local user site directories will be on the >> PYTHONPATH but since they come later, the python will use PyQt6 v6.8.3 >> because that will come first on the path. No crash here. >> >> If the user has a program that actually does require the use of v6.9.0, he's >> going to have to make sure that the user's local site directories come first >> on the path. One way to do that is to set the PYTHONPATH to point to the >> user's location. > > This is IMHO not practical. The user would have to set PYTHONPATH for > some programs, but not for others. You can't do this with .bashrc (or > similar), the user would have to write a wrapper script for each of > their programs which depend on something in ~/.local. Possible of course > but cumbersome. > > I like Oscar's suggestion that Python scripts provided by the > distribution include -s in the shebang much better. > > Or - what I tend to do - simply use a virtual environment for each > script that needs a package that the system doesn't provide. But of > course that's basically "disable/don't use .local" and all those venvs > take space and need to be maintained. My problem with venvs, especially if I have more than one, is that I eventually forget what they were for and what is different about each one. If there's only one and it's used for all non-system work, that's OK but beyond that and they tend to suffer knowledge rot. > >> In what scenario is a system application going to load a wrong version of a >> dependency from a user's site location? > > When the user sets PYTHONPATH and then accidentally invokes the > system-supplied application without resetting it first. > >> The only one I can think of is for the user, with the help of sudo, or >> by editing some system-enabled script, were to change the global >> PYTHONPATH. That seems a stretch. > > No, there doesn't have to be a global (in the sense that it applies to > all users) PYTHONPATH for that to happen. You just need a PYTHONPATH > that is set for all processes of that user - which the user can > certainly set without sudo (usually by editing .bashrc or maybe using > their desktop environment's settings dialog). Yes, I agree and I wasn't thinking locally enough.
Back to comp.lang.python | Previous | Next — Previous in thread | Next in thread | Find similar
Re: Pip installs to unexpected place Mats Wichmann <mats@wichmann.us> - 2025-04-17 15:41 -0600
Re: Pip installs to unexpected place Greg Ewing <greg.ewing@canterbury.ac.nz> - 2025-04-18 13:24 +1200
Re: Pip installs to unexpected place (Posting On Python-List Prohibited) Lawrence D'Oliveiro <ldo@nz.invalid> - 2025-04-18 02:20 +0000
Re: Pip installs to unexpected place "Peter J. Holzer" <hjp-python@hjp.at> - 2025-04-18 17:38 +0200
Re: Pip installs to unexpected place Oscar Benjamin <oscar.j.benjamin@gmail.com> - 2025-04-18 17:11 +0100
Re: Pip installs to unexpected place Thomas Passin <list1@tompassin.net> - 2025-04-18 13:08 -0400
Re: Pip installs to unexpected place "Peter J. Holzer" <hjp-python@hjp.at> - 2025-04-19 10:38 +0200
Re: Pip installs to unexpected place "Peter J. Holzer" <hjp-python@hjp.at> - 2025-04-19 10:56 +0200
Re: Pip installs to unexpected place songbird <songbird@anthive.com> - 2025-04-19 07:49 -0400
Re: Pip installs to unexpected place Thomas Passin <list1@tompassin.net> - 2025-04-19 15:56 -0400
Re: Pip installs to unexpected place rbowman <bowman@montana.com> - 2025-04-20 04:34 +0000
csiph-web