On Fri, Jun 26, 2020 at 12:43 PM David Mathog <dmat...@gmail.com> wrote: > So by what method could code working outside of python possibly determine that > "yaml" goes with "PyYAML"?
Sorry, I forgot that the information was in PyYAML-5.3.1-py3.6.egg-info/top_level.txt Still, how common is that? Can anybody offer an estimate about what fraction of packages use different names like that? Thanks, David Mathog Is this a common situation? > > Is pkg_resources actually a package? Does it make sense for a common > package repository to have a single instance of this directory or > should each installed python based program retain its own version of > this? > > There are some other files that live in site-packages which are not > actually packages. The list so far is: > > __pycache__ > > #some dynamic libraries, like > kiwisolver.cpython-36m-x86_64-linux-gnu.so > > #some pth files, but always so far with an explicit version number, like > sphinxcontrib_applehelp-1.0.2-py3.8-nspkg.pth > #or associated with a package with a version number like: > setuptools > setuptools-46.1.3.dist-info > setuptools.pth > > #some py files, apparently when that package does not make a corresponding > #directory like: > zipp-3.1.0.dist-info > zipp.py > > #initialization file "site" as > site.py > site.pyc > > Any others to look out for? That is, files which might be installed > in site-packages but which should not be shared. > > Hopefully this next is an appropriate question for this list, since > the issue arises from how python loads packages. Is there any way to > avoid collisions between python based programs other than activating > and deactivating their virtualenvs, or redefining PYTHONPATH, before > each is used? Programs that have the property that their library > loading is determinate (usually the case with C, fortran, bash > scripts, etc.)one can construct a bash script (for instance) which > runs 3 programs in order like so: > > prog1 > prog2 > prog3 # spawns subprocesses which run prog2 and prog1 > > and there are not generally any issues. (Yes, one can create a mess > with LD_PRELOAD and the like.) But if those 3 are python programs > unless prog1, prog2, prog3 are all built into the same virtualenv, > which usually means they come from the same software distribution, I > don't see how to avoid conflicts for the first two cases without > activating/deactivating each one, which looks like it might be tricky > in the 3rd case. > > If one has a directory like: > > TOP/bin/prog > TOP/lib/python3.6/site-packages > > Other than using PYTHONPATH to direct to it with an absolute path, is > there any way to force prog to only import from that specific > site-packages? Let me try that again. Is there a way to tell prog > via any environmental variable to look in > "../lib/python3.6/site-packages" (and nowhere else) for imports, with > the reference directory being that where prog is installed, not where > the process PWD might happen to be. Because if that was possible it > might allow a sort of "set it and forget it" method like > > export PYTHONRELPATHFROMPROG="../lib/python3.6/site-packages > prog1 #uses prog1 site-package > prog2 #uses prog2 site-package > prog3 #uses prog3 site-package > # prog1 subprocess #uses prog1 site-package > # prog2 subprocess #uses prog2 site-package > > (None of which would be necessary if python programs could import > specific versions reliably from a common directory containing multiple > versions of each package.) > > Thanks, > > David Mathog > > > On Thu, Jun 25, 2020 at 10:46 AM David Mathog <dmat...@gmail.com> wrote: > > > > On Thu, Jun 25, 2020 at 12:37 AM Paul Moore <p.f.mo...@gmail.com> wrote: > > > > > I think the key message here is that you won't be *re*-inventing the > > > wheel. This is a wheel that still needs to be invented. > > > > It _was_ invented, but it is off round and gives a rough ride. As > > noted in the first post this: > > > > __requires__ = ['scipy <1.3.0,>=1.2.0', 'anndata <0.6.20', 'loompy > > <3.0.0,>=2.00', 'h5py <2.10'] > > import pkg_resources > > > > was able to load the desired set of package-versions for scanpy, but > > setting a version number constraint on scanpy itself at the end of > > that list, one which matched the version that the preceding commands > > successfully loaded, broke it. So it is not reliable. > > > > And the entire __requires__ kludge is only present because for reasons > > beyond my pay grade this: > > > > import pkg_resources > > pkg_resources.require("scipy<1.3.0,>=1.2.0;anndata<0.6.20;etc.") > > import scipy > > import anndata > > #etc. > > > > cannot work because by default "import pkg_resources" keeps only the > > most recent version rather than making up a tree (or list or hash or > > whatever) and waiting to see if there are any version constraints to > > be applied at the time of actual package import. > > > > What I'm doing now is basically duct tape and bailing wire to work > > around those deeper issues. In terms of language design, a much > > better fix would be to modify pkg_resources so that it will always > > successfully load the required versions from a designated directory > > which contains multiple versions of packages, and modify the package > > maintenance tools so that they can maintain such a directory. > > > > Regards, > > > > David Mathog -- Distutils-SIG mailing list -- distutils-sig@python.org To unsubscribe send an email to distutils-sig-le...@python.org https://mail.python.org/mailman3/lists/distutils-sig.python.org/ Message archived at https://mail.python.org/archives/list/distutils-sig@python.org/message/TGXZ6MHXRR5EPCV65DMQ6DMC5XNBYOCP/