Support for custom commands and functions
See original GitHub issueHello,
When using setup.py
, it is possible to customize commands or use functions to get some results dynamically.
For instance, to run a post install script (that requires dependencies to be installed) one can write this:
class CustomInstallCommand(install):
def _post_install(self):
# Some stuff to do
def __init__(self, *args, **kwargs):
super(CustomInstallCommand, self).__init__(*args, **kwargs)
atexit.register(self._post_install)
and use this class as keyword argument value in the setup()
call:
cmdclass={'install': CustomInstallCommand}
(other commands like clean, test, tox can be customized this way too).
Second example, in order to compile translation files (po files) into mo files at setup time:
def create_mo_files():
data_files = []
# do stuff
return data_files
and use the result as keyword argument value in the setup()
call:
data_files=create_mo_files()
It looks quite obvious that it’s not possible to do such things if one uses only a pyproject.toml
file: how would it import a class or a function, or know about it, how to run it? (Or is there a way?)
From reading the code, I’ve seen that the keyword arguments list passed to setup()
is hard coded (to build a sdist), so cmdclass
and data_files
are not usable at the moment (if I’m not wrong).
I guess this is not the easiest feature to implement. Is it planned or already discussed?
Issue Analytics
- State:
- Created 5 years ago
- Reactions:9
- Comments:5 (1 by maintainers)
Top GitHub Comments
I was just researching Poetry as one of possibilities for our new workflow and I bumped into this issue. Up until now, we’ve been using good old
setup.py
with several custom build cases:.po → .mo
(has already been mentioned)If Poetry doesn’t plan to support these custom build steps, we could:
poetry build
; unfortunately, that clashes with Poetry excluding files mentioned in.gitignore
, but maybe there is a way around it; still, this way seems to be prone to errors (what if I forget to call them?), but kind of OK for the CI use i guessI really like Poetry and I thought it could be a solution to our current problems. But without these custom build steps, I’m afraid we won’t be able to use it. @sdispater, do you think that there is any way around this? Any chance we could add a hook that would run before each call of
poetry build
(basically option 2 above, but without the manual component)? That wouldn’t necessarily mean adding some executable files to Poetry itself, just being able to call a python function (or a shell script, but I’m much more inclined to Python callable). Or could this be somehow achieved by plugins?I don’t plan on supporting this. The whole idea of Poetry and
pyproject.toml
in general is to not have executable files to setup a project so it’s unlikely it will ever be implemented.