[Zope-dev] Extending Zope2 bin/instance run
Wichert Akkerman
wichert at wiggy.net
Thu Sep 9 08:45:10 EDT 2010
On 9/3/10 18:21 , Tres Seaver wrote:
> -----BEGIN PGP SIGNED MESSAGE-----
> Hash: SHA1
>
> Wichert Akkerman wrote:
>> I have noticed that now that we are almost exclusively using eggs to
>> distribute our software using "bin/instance run" has become difficult:
>> often the script you want to run is located inside an egg which makes to
>> path to it hard to predict. This is not the most user friendly command:
>>
>> bin/instance run eggs/my.package-*/my/package/script.py
>>
>> If a user is using a shared egg directory from zc.buildout or something
>> else the egg can be anywhere on the filesystem, making it next to
>> impossible to explain to users.
>>
>> I am considering to modify bin/instance run to check if its first
>> argument is a filesystem path, and if not consider the argument to be a
>> dotted name of a callable which should be invoke. That way backwards
>> compatibility remains, but you can now also do this:
>>
>> bin/instance run my.package.script.main
>
> What about using something like the EntryPoint syntax:
>
> $ bin/instance run my.package.script:main
>
> We could even add a new entry point class for it, and allow:
>
> $ bin/instance run egg:my.package#some_name
I've opted for a third alternative: use an entry point to define the
extra commands. If you do this in setup.py:
entry_points="""
[zopectl.command]
mycommand = mypackage.commands:func
"""
you can do:
$ bin/instance mycommand [<args>]
The advantage of this approach is that it makes for more user friendly
commands that do not needlessly expose implementation details to the
commandline.
Wichert.
More information about the Zope-Dev
mailing list