Próbuję dodać zadanie po instalacji do distutils Python, jak opisano w artykule How to extend distutils with a simple post install script?. Zadanie ma wykonać skrypt Python w zainstalowanym katalogu lib. Ten skrypt generuje dodatkowe moduły Pythona wymagane przez zainstalowany pakiet.Wykonywanie instalacji po zainstalowaniu skryptu w języku Python przy użyciu narzędzia distutils/setuptools
Moja pierwsza próba jest następujący:
from distutils.core import setup
from distutils.command.install import install
class post_install(install):
def run(self):
install.run(self)
from subprocess import call
call(['python', 'scriptname.py'],
cwd=self.install_lib + 'packagename')
setup(
...
cmdclass={'install': post_install},
)
Podejście to działa, ale o ile mogę powiedzieć, ma dwa braki:
- Jeśli użytkownik korzystał interpreter Pythona inne niż jeden podniósł z
PATH
, skrypt po instalacji zostanie wykonany z inny interpretator, który może powodować problem. - Nie jest bezpieczny przed pracą na sucho itp., Co mógłbym rozwiązać, zawijając ją w funkcję i wywołując ją pod numerem
distutils.cmd.Command.execute
.
Jak mogę poprawić swoje rozwiązanie? Czy istnieje zalecany sposób/najlepsza praktyka w tym zakresie? Chciałbym uniknąć, jeśli to możliwe, innej zależności.
Dla tych, którzy chcą mieć możliwość używania także 'python setup.py install', a także' pip install', zobacz: http://stackoverflow.com/questions/21915469/python-setuptools-install-requires -is-ignored-when-overriding-cmdclass –