On Wed, May 31, 2017 at 10:46 AM, Björn 'besser82' Esser <besser82@xxxxxxxxxxxxxxxxx> wrote: > Am 31.05.2017 um 16:20 schrieb Jan Kurik: >> >> = Proposed Self Contained Change: Making sudo pip Safe (Again) = >> https://fedoraproject.org/wiki/Changes/Making_sudo_pip_safe >> >> Change owner(s): >> * Michal Cyprian <mcyprian AT redhat DOT com> >> * Petr Viktorin <pviktori AT redhat DOT com> >> * Tomas Orsava <torsava AT redhat DOT com> >> * Miro Hroncok <mhroncok AT redhat DOT com> >> >> >> At the present time, running sudo pip3 in Fedora is not safe. Pip >> shares its installation directory with dnf, can remove dnf-managed >> files and generally break the Python 3 interpreter. We propose a >> series of measures that will make it safe to use. >> From the technical standpoint, this will be accomplished by changing >> the install prefix setting of the distutils install command in the >> /usr/bin/python3 executable from /usr/ to /usr/local. pip3 and >> distutils will thereafter use this prefix when determining where to >> install modules. In addition, the paths >> /usr/local/lib/pythonX.Y/site-packages and >> /usr/local/lib64/pythonX.Y/site-packages will be added to the front of >> the sys.path variable so that modules are imported preferentially from >> there. These settings, however, will not be modified for the >> system-python binary, the /usr/bin/python3 executable when running >> with -I option specified, nor when an RPM build is detected. >> Therefore, Python RPM packages will continue to be built with the >> correct installation path for system modules. I wrote about this idea before: I'll re-iterate my concerns once, for people new to the thread. I still think it's a bad idea. What you're describing is essentially reimplementing pyenv to point to /usr/local/, and automatically activating that pyenv-like target as enabled by default for all users of that system. It could, if engineered well, help avoid the overwriting of RPM bundled components of precisely the same version with pip installed versions, and vice versa. What it provides no help with, because this shareable location will be activated by default ahead of the more standard RPM bundled modules, is when newer versions of modules installed by "pip3 install" are with existing modules of any sort from any default discoverable location. The problem also exists with pyvenv, but on a much smaller scale and only when the user specifically selects to use that local installation. It remains very difficult for older modules to include module dependencies to avoid this, since at the time the older module was written the newer and incompatible module may not have existed. Been there, done that, with awscli and various Sphinx module versions in the airflow modules dependency tree. With airflow, the Sphinx upgrades broke quite a few previously working pip module installations. And with some modules, you have to update "pip" itself. Activating a new pip module this way is *begging* to create pain building tools that previously built well. As I said, been there, done that. I acknowledge that it could make cleaning up after that kind of "sudo pip3 install pip" safer. But I'd worry more about "sudo pip3 install [module-that-requires-Sphinx-upgrade]" and having to dig for where the bugs are for other modules. >> The purpose of this change is not to make sudo pip a standard way to >> install Python packages. Virtual environments and pip3 install --user >> should still be the prefered options. Nevertheless, sudo pip is far >> too prevalent an instruction in various guides and installation notes >> throughout the Internet that there is little hope of changing users' >> behaviour in this regard. *That* part is very real. I'm not clear that this actually solves anything, since it leaves this shared location as the system default. >> >> >> == Scope == >> * Proposal owners: >> Modify the distutils install command as described above. >> Modify the site.py script to add additional paths to sys.path when it is >> needed. >> >> * Other developers: >> N/A (not a System Wide Change) >> >> * Release engineering: >> https://pagure.io/releng/issue/6820 >> >> * List of deliverables: >> N/A (not a System Wide Change) >> >> * Policies and guidelines: >> N/A (not a System Wide Change) >> >> * Trademark approval: >> Not needed for this Change > > > +1 for this proposal > > _______________________________________________ > devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx > To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx _______________________________________________ devel mailing list -- devel@xxxxxxxxxxxxxxxxxxxxxxx To unsubscribe send an email to devel-leave@xxxxxxxxxxxxxxxxxxxxxxx