[Distutils] Adding entry points into Distutils ?

Noah Gift noah.gift at gmail.com
Fri May 8 01:49:38 CEST 2009


resending, as I accidently only sent to PJE

On Fri, May 8, 2009 at 11:48 AM, Noah Gift <noah.gift at gmail.com> wrote:
> On Fri, May 8, 2009 at 11:24 AM, P.J. Eby <pje at telecommunity.com> wrote:
>> At 10:21 AM 5/8/2009 +1200, Noah Gift wrote:
>>>
>>> 1.  Different versions of Python conflict with previous versions of
>>> console scripts.  Take paste for example.
>>
>> I don't understand what you mean.
>
> Sorry that was a bit curt.
>
> One of the problems with Pylons installation and virtualenv is that
> you might have previously installed paste script, and that could have
> been triggered to a specific version of paste like this:
>
>
> #!/vol/apps/python-2.5.1_64/bin/python
> # EASY-INSTALL-ENTRY-SCRIPT: 'PasteScript==1.7.3','console_scripts','paster'
> __requires__ = 'PasteScript==1.7.3'
> import sys
> from pkg_resources import load_entry_point
>
> sys.exit(
>   load_entry_point('PasteScript==1.7.3', 'console_scripts', 'paster')()
>
> if you do a which paste, you will see this:
>
> CSH#ngift at naseberry# which paste
> /usr/bin/paste
>
>
> What this means is the you could really want some theoretical new
> version of the paste script in your virtualenv, or in a standard
> python site-packages directory, and or a different version of python,
> say 2.6, but the name of the script hides which actual version you
> want and it specifically chooses one version of Python.  There isn't
> that good of a solution to solve this, but easy_install itself, seems
> to "do the right thing", but appending the actual python version to
> the script name.
>
> I think the idea way is that one bootstrap could work across all
> version of python so that python versions wouldn't need to be appended
> to the script name.  Additionally, it could be useful, but I have no
> idea how this would work, to have the bootstrap dynamically pick the
> right version of itself that it needs to run in a given context.
>
>
>
>>
>>> 2.  The entry point mechanism IIRC recursively scans the site-packages
>>> directory and loads up the system path with eggs.  This is too
>>> expensive of an operation for the current environment I work in.
>>
>> The scan is not recursive; only files that are actually *on* sys.path are
>> scanned: i.e., either an .egg that is directly on sys.path, or an .egg-info
>> in a directory that is directly on sys.path.
>
> I could be wrong, as this is from memory, but I believe that each egg
> inside of site-packages gets seperately injected in sys.path.  I
> suppose this is the only way to deal with package versions cleanly.  I
> have noticed that whole process is reasonably expensive.
>>
>> Now, it's possible that some application you are using does such a scan
>> explicitly; I'm just noting that merely querying or loading entry points
>> doesn't cause any recursive scans, and it most definitely does not add
>> anything new to sys.path, unless the entry point to be loaded has declared
>> an additional dependency that's *not* on sys.path yet.
>>
>>
>>> 3.  There doesn't seem to be a clean way to inject user specific
>>> environment details to the console script.
>>> I often need the ability to alter the sys.path in a user specific way
>>> for the entry point without needing to mess up the global sys.path
>>> permanently.
>>
>> I don't understand what you mean here, either.
>
> In film enviroments the whole way we work is by toggling between
> different enviroments.  A developer, artists, etc, will need to work
> on a specific shot in a movie, and they also need to toggle between
> films, etc.  Each of these enviroments is different because different
> code is being used. Keeping all possible combinations of python
> environments in your global environment can make the python interpeter
> grind to halt because of the way Python itself recursives over paths
> looking for files.  The idea scenario, at least for my current
> environment, is for sys.path to "inject" a custom path or N paths at
> the actual run time of the command line tool, because it limits the
> scanning Python needs to do.  Here is an example of my quick and dirty
> hack to make IPython run quicker:
>
> if __name__ == "__main__":
>    import sys
>    sys.path = [
>     '/vol/apps/python-2.5.1_64/lib/python2.5',
>     '/vol/apps/python-2.5.1_64/lib/python2.5/site-packages',
>     '/vol/apps/python-2.5.1_64/lib/python2.5/lib-dynload/',
>     '/vol/filmstudio/linux64/lib/python2.5/site-packages/Genshi-0.4.4-py2.5.egg',
>     '/vol/filmstudio/linux64/lib/python2.5/site-packages/MySQL_python-1.2.2-py2.5-linux-x86_64.egg',
>     '/vol/filmstudio/linux64/lib/python2.5/site-packages/lxml-2.1.2-py2.5-linux-x86_64.egg',
>     '/vol/filmstudio/linux64/lib/python2.5/site-packages/nose-0.10.4-py2.5.egg',
>     ]
>
>    import IPython.Shell
>    IPython.Shell.start().mainloop()
>
>
> On one hand, IPython is now very snappy and runs in a useable fashion.
> The problem now, is that all flexibility is lost to dynamically add
> more things based on the users environment.  Perhaps by having the
> boostrap script look at some custom environmental variable to "inject"
> one more path, but just for that boostrap, in that given context, as
> we don't want to keep extra stuff around in the global PYTHONPATH and
> it is different for each user.
>
>>
>>
>
>
>
> --
> Cheers,
>
> Noah
>



-- 
Cheers,

Noah



On Fri, May 8, 2009 at 11:24 AM, P.J. Eby <pje at telecommunity.com> wrote:
> At 10:21 AM 5/8/2009 +1200, Noah Gift wrote:
>>
>> 1.  Different versions of Python conflict with previous versions of
>> console scripts.  Take paste for example.
>
> I don't understand what you mean.
>
>> 2.  The entry point mechanism IIRC recursively scans the site-packages
>> directory and loads up the system path with eggs.  This is too
>> expensive of an operation for the current environment I work in.
>
> The scan is not recursive; only files that are actually *on* sys.path are
> scanned: i.e., either an .egg that is directly on sys.path, or an .egg-info
> in a directory that is directly on sys.path.
>
> Now, it's possible that some application you are using does such a scan
> explicitly; I'm just noting that merely querying or loading entry points
> doesn't cause any recursive scans, and it most definitely does not add
> anything new to sys.path, unless the entry point to be loaded has declared
> an additional dependency that's *not* on sys.path yet.
>
>
>> 3.  There doesn't seem to be a clean way to inject user specific
>> environment details to the console script.
>> I often need the ability to alter the sys.path in a user specific way
>> for the entry point without needing to mess up the global sys.path
>> permanently.
>
> I don't understand what you mean here, either.
>
>



-- 
Cheers,

Noah


More information about the Distutils-SIG mailing list